第一步目录扫描
发现fl4g.php点开看看中文乱码了这时可以利用火狐修复一下按 alt
接下来就是绕过三级level
level 1:
intval()函数作用是在处理数据时会在接触到字符串时停止,即11y58=11,x58=0,1e4=1
而1e4其实等于10000 这是一种科学计数法,具体来说,1e4 中的 1 表示基数(也称为尾数或有效数字),而 4 表示指数。这可以解释为 1 乘以 10 的 4 次方,即 1 * 10^4,等于 10000
而当1e4+1时会等于10001 所以可以利用这点来绕过if
level 2:
要求是原值与md5值进行弱比较相等 而有一个值正好即0e215962017 因为是弱比较,而且0e215962017的md值也是0e开头所以它们弱比较即是0=0
level 3:
这里的if(!strstr($get_flag," ")过滤了参数$get_flag参数中不能有空格
str_ireplace("cat", "wctf2020", $get_flag);过滤了cat 函数作用是把参数$get_flag中的cat替换成wctf2020。
system($get_flag);
说明我们可以执行命令,而cat被过滤了 我们可以利用其他命令例如:
more :可以用来查看文件内容的命令
less
:命令是用于分页查看文件内容的
tail
:命令用于显示文件的末尾几行内容
head
:命令用于显示文件的前几行内容
这些都是可以用的,再加上空格绕过即可,空格绕过方法有:
${IFS}
$IFS$1 //$1可改加成其他数字
<
%09
因此可以构造playload:
http://dfad8383-22cf-48d9-9a39-3254b8af114c.node4.buuoj.cn:81///fl4g.php/?num=1e4&md5=0e215962017&get_flag=ls
看看目录下有什么先
最终playload:
http://dfad8383-22cf-48d9-9a39-3254b8af114c.node4.buuoj.cn:81///fl4g.php/?num=1e4&md5=0e215962017&get_flag=more%09fllllllllllllllllllllllllllllllllllllllllaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaag
得到flag: