[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替换substr0^(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了很多字符串,基本锁死了注入。但是预编译的注入没有过滤setprepareexecute,可以往这个方向考虑

然后读取/var/www/html/user/user.php

用了mysqli_store_result,会导致堆叠注入,结合前面的预编译可以写shell

执行的sql语句

也可以用char函数写shell

还有一种解法是利用二次注入写shell

小结

  1. 遇到SQL过滤时要试试关键字字典

  2. 过滤多的时候可能是堆叠注入或者用load_file

  3. MySQL中转换字符串可以用hex也可以用char

  4. 注入时要判断不同结果对应的页面

最后更新于