一次字符串拼接的sql注入实战
字数 1029 2025-08-20 18:18:40

字符串拼接SQL注入实战教学文档

1. 漏洞背景

在渗透测试过程中发现一个基于Oracle数据库的布尔型SQL注入漏洞,注入点位于account参数处。该注入点对常规的andor操作符进行了过滤,最终通过字符串拼接方法成功实现注入。

2. 初始测试

  1. 使用单引号测试:account=admin',发现输出与正常情况不同,确认存在注入点
  2. 尝试常规闭合方法失败,包括:
    • account=admin' or '1'='1
    • account=admin' and '1'='1
    • 双写关键字绕过(如aandnd

3. 绕过思路

3.1 字符串拼接方法

发现系统使用Oracle数据库后,尝试使用Oracle的字符串连接符||

account=adm'||'i'||'n

成功闭合,系统返回与account=admin相同的结果。

3.2 进阶利用

将固定字符替换为函数调用:

account=adm'||CHR(105)||'n

同样成功执行,其中CHR(105)返回字母i

4. 构造完整注入payload

采用以下形式构造注入语句:

account=adm'||CHR(ASCII(SUBSTR((SELECT user FROM dual),1,1))-N)||'n

其中:

  • SUBSTR函数提取数据
  • ASCII函数获取字符的ASCII码
  • 通过调整N值使得CHR参数等于105(字母i的ASCII码)
  • CHR参数等于105时,整个表达式等价于admin

5. 自动化利用

使用Burp Suite Intruder模块爆破用户名的第一个字符:

  1. 设置payload位置在N值处
  2. 通过观察响应是否与account=admin相同来判断是否正确字符
  3. 成功爆破出第一位字符后,可编写脚本自动化获取完整数据

6. Oracle相关函数说明

  • CHR(n): 返回ASCII码为n的字符
  • ASCII(c): 返回字符c的ASCII码
  • SUBSTR(str,pos,len): 从字符串str的第pos位开始截取len个字符
  • dual: Oracle的系统表,常用于测试查询

7. 防御建议

  1. 使用参数化查询或预编译语句
  2. 实施最小权限原则
  3. 对输入进行严格过滤和转义
  4. 禁用错误信息回显
  5. 使用Web应用防火墙(WAF)

8. 总结

该案例展示了当常规SQL注入方法被过滤时,如何利用字符串拼接技术实现注入。关键在于:

  1. 识别数据库类型(本例为Oracle)
  2. 了解特定数据库的字符串操作函数
  3. 构造确保语法正确的payload
  4. 通过布尔型判断逐步获取数据

这种方法在Oracle环境下特别有效,但原理可应用于其他支持字符串拼接的数据库系统。

字符串拼接SQL注入实战教学文档 1. 漏洞背景 在渗透测试过程中发现一个基于Oracle数据库的布尔型SQL注入漏洞,注入点位于 account 参数处。该注入点对常规的 and 和 or 操作符进行了过滤,最终通过字符串拼接方法成功实现注入。 2. 初始测试 使用单引号测试: account=admin' ,发现输出与正常情况不同,确认存在注入点 尝试常规闭合方法失败,包括: account=admin' or '1'='1 account=admin' and '1'='1 双写关键字绕过(如 aandnd ) 3. 绕过思路 3.1 字符串拼接方法 发现系统使用Oracle数据库后,尝试使用Oracle的字符串连接符 || : 成功闭合,系统返回与 account=admin 相同的结果。 3.2 进阶利用 将固定字符替换为函数调用: 同样成功执行,其中 CHR(105) 返回字母 i 。 4. 构造完整注入payload 采用以下形式构造注入语句: 其中: SUBSTR 函数提取数据 ASCII 函数获取字符的ASCII码 通过调整 N 值使得 CHR 参数等于105(字母 i 的ASCII码) 当 CHR 参数等于105时,整个表达式等价于 admin 5. 自动化利用 使用Burp Suite Intruder模块爆破用户名的第一个字符: 设置payload位置在 N 值处 通过观察响应是否与 account=admin 相同来判断是否正确字符 成功爆破出第一位字符后,可编写脚本自动化获取完整数据 6. Oracle相关函数说明 CHR(n) : 返回ASCII码为n的字符 ASCII(c) : 返回字符c的ASCII码 SUBSTR(str,pos,len) : 从字符串str的第pos位开始截取len个字符 dual : Oracle的系统表,常用于测试查询 7. 防御建议 使用参数化查询或预编译语句 实施最小权限原则 对输入进行严格过滤和转义 禁用错误信息回显 使用Web应用防火墙(WAF) 8. 总结 该案例展示了当常规SQL注入方法被过滤时,如何利用字符串拼接技术实现注入。关键在于: 识别数据库类型(本例为Oracle) 了解特定数据库的字符串操作函数 构造确保语法正确的payload 通过布尔型判断逐步获取数据 这种方法在Oracle环境下特别有效,但原理可应用于其他支持字符串拼接的数据库系统。