读题
- 打开题目,我们可以创建、查看、修改、删除订单。猜测是二次注入,一顿测试后无果。
- 查看源码,发现有提示
?file=?
尝试后面直接接文件名。发现没有任何返回。 - 尝试使用php伪协议读取文件内容,成功:按照这种方式把几个页面都读出来。
1
/index.php?file=php://filter/read=convert.base64-encode/resource=delete.php
漏洞分析
这里我偷了个懒,直接放Seay
工具里去跑。结果如下:
先去看看index.php ,发现它进行了ini_set('open_basedir', '/var/www/html/');
也就是目录穿越不太可能了。
再来看看change.php的:
我们不难发现$row['address']
它是从数据库中取出来的且没有做其它的过滤操作,我们尝试爆破注入。
二次注入之爆破注入
使用正常思路一路爆破后数据库后发现并没有flag。于是猜测flag再根目录下至于文件名就一个一个猜,如:flag、flag.txt、flag.php 最后发现是 flag.txt。 使用以下paylaod:
1 | 1' and updatexml(1,concat(0x7e,(select substr(load_file('/flag.txt'),1,30)),0x7e),1)# |
报出前30位,接着使用以下payload爆出剩下的:
1 | 1' and updatexml(1,concat(0x7e,(select substr(load_file('/flag.txt'),28,50)),0x7e),1)# |
根据返回结果的拼接我们可以得到最后的 flag
对了payload是放在地址那里,然后名字电话乱填都ok。注册后去修改就可以被执行了。