sqlmap编写tamper脚本

前言

sqlmap是一个开源渗透测试工具,它可以自动检测和利用SQL注入漏洞并接管数据库服务器的过程。它具有强大的检测引擎,针对最终渗透测试仪的众多利基功能,以及广泛的开关,包括数据库指纹识别,从数据库中获取数据,访问底层文件系统以及通过外出在操作系统上执行命令,带内连接。sqlmap是一个开源渗透测试工具,它可以自动检测和利用SQL注入漏洞并接管数据库服务器的过程。它具有强大的检测引擎,针对最终渗透测试仪的众多利基功能,以及广泛的开关,包括数据库指纹识别,从数据库中获取数据,访问底层文件系统以及通过外出在操作系统上执行命令,带内连接。

tamper脚本

我们在下载好的SQLmap文件夹里可以找到文件夹tamper,其中该文件夹有44个脚本分别对57种WAF进行检测。例如360,绿盟WAF,modsecurity.,百度,fortiweb,cloudflare。由此可见老外对国内的WAF也是有了解的,可见他们也会悄悄对国内的WAF进行绕过。

其实一个简单的Tamper能够帮助我们修改Payload,修改请求头中的Header值,从而绕过IDS/WAF的检测。

这里的Payload就是指我们的每一个检测注入的SQL,在注入的时候我们可以加上-v 3参数来查看Payload

分析tamper脚本

选取其中一个脚本lowercase.py作为样本分析

##此处用法为:程序到env设置里查找python的安装路径,再调用对应路径下的解释器程序完成
#!/usr/bin/env python


#多行注释符,此处为三个双引号,因为是其中也有单引号,并且该说明为一般文档说明,故用三个双引号
"""
Copyright (c) 2006-2020 sqlmap developers (http://sqlmap.org/)
See the file 'LICENSE' for copying permission
"""

import re   #导入python中的re 字符替换包,方便下面的字符替换

from lib.core.data import kb #导入sqlmap中lib\core\data中的kb函数,测试 SQL 注入的过程中,使用的配置文件事先全部被加载到了 conf 和 kb
from lib.core.enums import PRIORITY  #导入sqlmap中lib\core\enums中的PRIORITY函数, LOWEST = -100,LOWER = -50,. 详细见enums.py

__priority__ = PRIORITY.NORMAL #定义优先级,此处为级别为【一般】

def dependencies():  #定义dependencies():此处是为了和整体脚本的结构保持一致。
    pass   #pass 不做任何事情,一般用做占位语句。为了保持程序结构的完整性。

def tamper(payload, **kwargs):  #定义tamper脚本,payload, **kwargs 为定义的参数,其中**kwargs为字典存储,类似于 {'a': 1, 'c': 3, 'b': 2} 
    """
    Replaces each keyword character with lower case value (e.g. SELECT -> select) #此处为tamper说明 ,以便使用该脚本。在本例中,该脚本可以

    Tested against:       #用于多种数据库。并且作用于弱防护效果的防火墙
        * Microsoft SQL Server 2005
        * MySQL 4, 5.0 and 5.5
        * Oracle 10g
        * PostgreSQL 8.3, 8.4, 9.0

    Notes:
        * Useful to bypass very weak and bespoke web application firewalls
          that has poorly written permissive regular expressions

    >>> tamper('INSERT')
    'insert'
    """

    retVal = payload  # 将payload赋值给  retVal ,以便中间转换。

    if payload:       # 进行判断payload
        for match in re.finditer(r"\b[A-Za-z_]+\b", retVal):  # 对 retVal 【payload】进行小写查找
            word = match.group()    #将查找到的字母赋值给word

            if word.upper() in kb.keywords:  #如果在攻击载荷中有大写字母
                retVal = retVal.replace(word, word.lower())   #将大写字母转换成小写字母。

    return retVal  #返回小写字母


#到这里,我们可以看出,该脚本实现了将攻击载荷中大写字母转成了小写字母

编写一个tamper脚本

流程:首先向服务器端发送的请求。

将检测目标传递给自动化注入工具的过程

自动化注入工具进行分析、构造合适的Payload。

 

参考链接:

如何编写Sqlmap的Tamper脚本?

 

 

 

 

你可能感兴趣的:(漏洞工具)