[BUUCTF题解][CISCN2019 总决赛 Day2 Web1]Easyweb
### 知识点
- SQL注入
- 文件上传
过程
做题先搜集(扫目录+检查HTTP报文+查看初始页面HTML代码),可以找到存在robots.txt,打开后发现提示存在页面备份。

一个个页面尝试最终找到存在image.php.bak,其源码如下:
<?php
include "config.php";
$id=isset($_GET["id"])?$_GET["id"]:"1";
$path=isset($_GET["path"])?$_GET["path"]:"";
$id=addslashes($id);
$path=addslashes($path);
$id=str_replace(array("\\0","%00","\\'","'"),"",$id);
$path=str_replace(array("\\0","%00","\\'","'"),"",$path);
$result=mysqli_query($con,"select * from images where id='{$id}' or path='{$path}'");
$row=mysqli_fetch_array($result,MYSQLI_ASSOC);
$path="./" . $row["path"];
header("Content-Type: image/jpeg");
readfile($path);
是登录功能的后端验证,虽然进行了过滤,但是可以注意到是对使用过addslashes函数的参数转义,可以构造如\0传入,这样被转义后会变成\\0,随后过滤会把其中的\0替换为空,这样剩下的\就刚好可以转义掉限定参数的',这样就能构造注入了,payload格式如下。
/image.php?id=\0&path=or 1#
随后就是盲注常见操作了,写脚本依次注库、表、字段名,这里省略掉快进到直接查账户名和密码。


账户名为admin密码为password,登录发现为文件上传页面。

但是只保存上传文件的文件名,且允许文件名出现字符串php。

那就用短标签写个一句话放入文件名就好了。

然后连上蚁剑,根目录下找到flag。



浙公网安备 33010602011771号