Loading

[BUUCTF题解][CISCN2019 总决赛 Day2 Web1]Easyweb

### 知识点

  • SQL注入
  • 文件上传

过程

做题先搜集(扫目录+检查HTTP报文+查看初始页面HTML代码),可以找到存在robots.txt,打开后发现提示存在页面备份。

image-20220326205006606

一个个页面尝试最终找到存在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#

随后就是盲注常见操作了,写脚本依次注库、表、字段名,这里省略掉快进到直接查账户名和密码。

image-20220326212833822

image-20220326213453028

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

image-20220326213547288

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

image-20220326213732332

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

image-20220326215037042

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

image-20220326215115390

image-20220326215121732

posted @ 2022-03-26 22:09  Article_kelp  阅读(611)  评论(0)    收藏  举报