SQL常见BYPASS

SQL常见BYPASS
最新回答
尛步格调ゝ

2026-04-29 00:38:01

SQL常见BYPASS方式

在SQL注入攻击中,攻击者常常会遇到各种防御措施,如参数替换、前端判断、空格过滤、黑白名单等。为了绕过这些防御,攻击者会采用各种BYPASS方式。以下是一些常见的SQL BYPASS方式:

  1. 复写

    通过重复书写关键字或特殊字符,绕过对单个字符或关键字的过滤。

    例如,将SELECT复写为SEL/*comment*/ECT。

  2. 大小写

    利用SQL语句对大小写不敏感的特性,将关键字转换为大写或小写,绕过对特定大小写的过滤。

    例如,将select转换为SELECT。

  3. 禁用JS

    在某些情况下,前端JavaScript可能会拦截或修改输入。禁用JavaScript可以绕过这些前端防御。

    通过浏览器设置或插件禁用JavaScript。

  4. +或特殊字符

    使用加号(+)或其他特殊字符(如%00、%23等)来绕过空格过滤或特定字符过滤。

    例如,使用+代替空格,或使用%23(即#)作为注释符。

  5. 参数污染

    通过在URL或表单中多次提交相同的参数,造成参数污染,从而绕过对单个参数的过滤。

    例如,在URL中多次添加?id=1参数。

  6. 逐字拼接

    将SQL语句的关键字或特殊字符逐字拼接,绕过对完整语句的过滤。

    例如,通过多次请求,每次请求只发送SQL语句的一部分,然后在服务器端拼接成完整的SQL语句。

  7. 分段传输

    将SQL语句分成多个部分,通过不同的请求或渠道传输,然后在服务器端重新组合。

    例如,将SQL语句的头部、主体和尾部分别通过不同的HTTP请求发送。

具体情景下的BYPASS示例

  1. 情景一:网站过滤了输入的and

    解决方式:使用大小写变换(如aAndNd、AnD)或复写(如a/*comment*/nd)来绕过过滤。

  2. 情景二:前端拦截敏感字符

    解决方式:禁用JavaScript、抓包修改请求内容或利用参数污染绕过前端拦截。

  3. 情景三:and直接不能用或输入特定字符时被拦截

    解决方式:使用宽字节注入、其他逻辑运算符(如|)或复写技术绕过。

某狗绕过示例

  1. and绕过

    当and 1=1被拦截时,可以尝试使用and -1=-1、xor -1=-1或| 1=1等变体。

  2. order by绕过

    当order by 3被拦截时,可以尝试使用order%23%0Aby或order/*!70000*/by等变体。

  3. union select绕过

    当union select被拦截时,可以尝试使用UNION/*!70000AAA*/%23%0ASELECT%0A+1,2,3等变体。

注意事项

  • 内敛注释:在某些情况下,内敛注释(如/*!70000*/)可以用于绕过过滤。但需要注意的是,内敛注释的适用性取决于具体的数据库和SQL模式。
  • 数字关系:内敛注释中的数字(如70000)是假设条件,表示只有当数据库版本大于或等于该数字时,注释内的内容才会被执行。这有助于绕过对特定数据库版本的过滤。
  • %23%0A:%23是#的URL编码,#是注释符。%0A是换行符。在某些情况下,使用%23%0A可以在注释中插入换行符,从而绕过过滤。
  • 语句的可用性:在绕过防御时,需要确保修改后的SQL语句仍然具有可用性。不能直接将一段语句从中间拆开或随意修改。

SQL小常识

  • 更换传输方式:如果GET请求被拦截,可以尝试使用POST请求。
  • 管理员可能禁用了常用命令:需要尝试不同的SQL语句或技巧。
  • 回显可能与背景颜色相同:需要仔细检查页面内容以发现潜在的回显信息。
  • 批量找注入时可以尝试找一些语句拼接和数据库报错:这些错误信息可能会泄露数据库结构或敏感信息。

总之,在进行SQL BYPASS时,需要充分了解目标系统的防御措施和SQL语句的特性。通过灵活运用各种技巧和变体,可以有效地绕过防御并发现潜在的漏洞。