目录
[鹤城杯 2021]Middle magic
1、题目
2、知识点
3、思路
[WUSTCTF 2020]朴实无华
4、题目
5、知识点
6、思路
[鹤城杯 2021]Middle magic
1、题目
2、知识点
代码审计,弱比较、数组绕过
3、思路
打开题目,出现源代码,我们进行审计
1、
这里要我们上传一个aaa变量,然后用了preg_replace函数
preg_replace:
$aaa = preg_replace('/^(.*)level(.*)$/', '${1}<!-- filtered -->${2}', $_GET['aaa']);
意思是:将aaa变量中的level字段替换成<!-- filtered -->
preg_match:
if(preg_match('/pass_the_level_1#/', $aaa))
意思是aaa参数的内容是pass_the_level_1#
这里的难点是要绕过preg_replace函数,因为它会将level替换掉,
因为preg_replace函数只匹配第一行的数据,不能匹配多行的字符,所以我们可以使用换行符进行绕过
payload:
?aaa=%0apass_the_level_1%23
2、
这里需要POST上传admin和root_pwd两个参数,首先对他们进行弱比较(==),然后进行sha1强比较(===),这里可以使用数组绕过,因为弱比较只比较类型,不比较值,然后sha1对数组进行加密后为空,所以也可以绕过
payload:
admin[]=1&root_pwd[]=2
3、
这里要POST上传一个level_3参数,且会对其内容进行json解码,所以我们需要上传一个json格式的数据,接着跟内置的result变量进行弱比较
这里可以使用{"result":字符串},或者{"result":0}
payload:
level_3={"result":0} 因为PHP纯字符与0进行弱比较时为True
或者
{"result":ssss} 因为json格式的字符串解码后会变成一个数组
得到flag:NSSCTF{c8dd707c-eb31-484b-826a-d616e09a599c}
[WUSTCTF 2020]朴实无华
4、题目
5、知识点
弱比较,代码审计
6、思路
访问题目,发现没有什么提示,用目录扫描看看
访问robots.txt
出现一个页面,访问一下看看
结果也没什么用,之前出现一个字段,User-agent,抓包看看
发现隐藏的页面:/fl4g.php
得到源码,正戏来了
1、level1
这里要我们上传一个num变量,但是要小于2020,但又要大于2021
intval()
这里可以1e10,就可以绕过比较了
2、level2
这里上传一个md5变量,且它的值跟md5加密后的值相同,百度一下
0e215962017
这样就绕过了
3、level3
这里会执行system($get_flag),也就是我们可以传进行系统命令,然后执行
if(!strstr($get_flag," ")
如果有get_flag有空格,则为false,所以这也是对空格的过滤
对空格的绕过有:${IFS}$9 、{IFS} 、$IFS 、${IFS}、$IFS$1(其他数字也行,不一定要1)、IFS等
str_ireplace
$get_flag = str_ireplace("cat", "wctf2020", $get_flag);
如果get_flag变量的内容有cat,则替换成wctf2020,也就是过滤了cat
绕过:可以用tac
先查看有什么文件
payload:
?num=1e10&md5=0e215962017&get_flag=tac${IFS}$9fllllllllllllllllllllllllllllllllllllllllaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaag
得到flag:NSSCTF{ee074295-8182-42f6-b291-509d02b15df4}
这篇文章就先写到这里了,哪里不懂的或者哪里不足的欢迎指出!