[CISCN2019 总决赛 Day2 Web1]Easyweb
一个登录界面 查看源码发现图片是通过/image.php?id=1
获取的 猜测这里应该是有sql注入的
日常查看/robots.txt
发现存在备份文件
查看image.php.bak
1 | <?php |
发现存在sql注入
1 | $result=mysqli_query($con,"select * from images where id='{$id}' or path='{$path}'"); |
需要构造特殊的语句来注入
addslashes($id)
先来看看addslashes()函数
它会在这些符号前添加反斜杠进行转义
官方文档也提及了
如果使用不得当 就会出现安全问题
再来看$id=str_replace(array("\\0","%00","\\'","'"),"",$id);
看到$id
存在一个替换操作
我们可以构造 $id=\\0
=>经过addslashes()=>$id=\\\\0
=>str_replace()=>$id=\\
(相当于一个反斜杠)
则查询语句就会变为:select * from images where id='\\' or path='{$path}'
id反斜杠转义了'
使得$id='\\' or path='
那么我们就可以在$path
输入我们的注入语句
接下来就是一个常规的二分法盲注
脚本如下:
1 | import requests |
需要注意这道题目用于查询的where单双引号都被waf了 需要bypass
可以用16进制进行绕过
可以得到admin密码为:027e3da10ae66606cef2
之后是一个文件上传 简单上传一个一句话木马
发现后php缀名都被过滤了 随便上传一个文件
提示:I logged the file name you uploaded to logs/upload.4f264cd65c72b60d3bd54f98a8189048.log.php. LOL
他将我们的文件名上传到这个php文件
可以发现这个php文件记录了我们上传的文件名
既然这个记录文件自身就为php文件 可以执行php代码 那么我们就可以通过修改文件名为一句话木马 从而getshell
这里他屏蔽了 php 用短标签bypass就行
不知道为什么有时候上传上去的文件名🐎他不显示 但是可以运行 很奇怪可能是环境问题