[SUCTF 2018]MultiSQL
[SUCTF 2018]MultiSQL
考点
SQL盲注
mysqli_store_result导致堆叠注入预编译写shell
二次注入写shell
wp
先随便注册登录一下,能用的功能只有用户信息查看和头像上传。头像上传是写死的文件,但是说明favicon/ 这个目录是可写
在用户信息那里是很明显的注入点

URL为http://0a4b5eec-1e86-4b36-9ed6-e19c73dae811.node4.buuoj.cn:81/user/user.php?id=2,并且id=1是admin的账号,直接尝试异或id=0^1,发现返回成功,尝试0^(ascii(substr((select(database())),1,1))>0),发现失败,什么也不返回,应该是ban了字符串,再尝试0^(ascii(substr((database()),1,1))>0),还是失败,再进行函数替换,用mid替换substr,0^(ascii(mid((database()),1,1))>0) ,这次成功了。

可以用脚本试一下,数据库名字是ctf,但是过滤了select,基本上无缘常规注入了
又读取了一下版本,是10.0.34-MariaDB,存在布尔盲注,再去试试其他的东西,比如hex配合load_file 进行文件读取,测试一下
那可以试试hex(load_file(0x2f7661722f7777772f68746d6c2f696e6465782e706870)),相当于hex(load_file('/var/www/html/index.php'))
用盲注脚本跑一下,
然后读取bwvs_config/sys_config.php
/var/www/html/bwvs_config/sys_config.php
/var/www/html/bwvs_config/waf.php 可以看到ban了很多字符串,基本锁死了注入。但是预编译的注入没有过滤set、prepare和execute,可以往这个方向考虑
然后读取/var/www/html/user/user.php
用了mysqli_store_result,会导致堆叠注入,结合前面的预编译可以写shell
执行的sql语句
也可以用char函数写shell
还有一种解法是利用二次注入写shell
小结
遇到SQL过滤时要试试关键字字典
过滤多的时候可能是堆叠注入或者用load_file
MySQL中转换字符串可以用hex也可以用char
注入时要判断不同结果对应的页面
最后更新于