[SWPU2019]Web4
打开页面发现一个登录框,输入账号和密码后没有反应
我们f12打开页面源码,发现js代码
js主要功能是将username和password以json格式然后发给index.php?r=Login/Login。
我们进行抓包
我们不难发现username中加入单引号会报错,但在单引号后加上分号就不会了,这个情况我们考虑堆叠注入
由于过滤了select,if,sleep,substr等大多数注入常见的单词,但是注入又不得不使用其中的某些单词。那么在这里我们就可以用16进制+mysql预处理来绕过。
预制语句的SQL语法基于三个SQL语句:
1 | set @a="xxx" |
我们找个脚本来进行提交
1 | #author: c1e4r |
前端应用逻辑的基础在controller文件夹下面,而其他文件都是基于basecontroller.php,所以我们打开basecontroller.php文件进行代码审计
1 | /Controller/BaseController.php |
extract
传入 viewdata
数组造成变量覆盖,发现利用 loadView
方法的并且第二个元素可控的地方只有 UserController.php
1 | /Controller/UserController.php |
$listData是从REQUEST提取出来的,完全可控。而其对应的/View/userIndex.php中存在一个文件读取
1 | ....... |
这里的$img_file的值可利用前面的逻辑进行覆盖,传入img_file=./../flag.php即可,而有英文下面的路由控制
1 | // 路由控制跳转至控制器 |
上面可以知道我们传入的路由 r-User/Index
我们构造payload
GET:index.php?r=User/Index
POST: img_file=/../flag.php
我们发现图片url里含有个base64解码
得到flag