0x00 前言

记录下tamper脚本编写的学习过程

0x01 Tamper的作用

在检测和利用注入的过程中,往往会遇到WAF/IPS等防御设备对发送的Payload进行拦截。Sqlmap本身已经自带了很多用以绕过WAF的脚本,可以通过--tamper=脚本名称 的方式,来使用。
但是不同厂商的WAF 会对应不同的防御规则,已有的tamper脚本虽然可以支持大多数的场景,但有些奇葩的环境下 可能也会略显不足。
所以,作为渗透人员需要先针对WAF的拦截规律进行手工探测,然后结合具体SQL版本的功能语法特性,来进行绕过。

当探测到绕过方式后,也可以手工注入进行攻击但极其耗费时间。由此,可以通过编写相应的tamper 配合sqlmap来使用

0x02 Tamper的简单结构

自带的所有tamper脚本位于 sqlmap目录的tamper子目录中.
先来cat 一个unionalltounion.py脚本,查看其书写格式:

60535243.png

这个脚本的作用,是将"UNION ALL SELECT" 替换为"UNION SELECT"

也可以看到tamper脚本主要格式:

#!/usr/bin/env python

"""
Copyright (c) 2006-2016 sqlmap developers (http://sqlmap.org/)
See the file 'doc/COPYING' for copying permission
"""

from lib.core.enums import PRIORITY
__priority__ = PRIORITY.LOW # 当前脚本的调用优先等级

def dependencies(): # 声明当前脚本适用/不适用的范围,可以为空。
    pass

def tamper(payload, **kwargs): # 用于篡改Payload、以及请求头的主要函数
    return payload

tamper函数起到主要的作用,是将原始的payload进行加工,返回可以绕过防御规则的payload
要完成一个tamper的编写,只需要手工探测出绕过的规则,并可以使用Python编写代码,来完成操作字符串的过程
另外注意,tamper函数的两个参数:payload和**kwargs 无需关心如何传入,因为sqlmap会自动传值

了解这些基础知识,就可以编写简单的tamper脚本了

0x03 Tamper编写

一个最简单的tamper,将 空格 替换为 /**/

#!/usr/bin/env python

"""
Copyright (c) 2006-2016 sqlmap developers (http://sqlmap.org/)
See the file 'doc/COPYING' for copying permission
"""

from lib.core.enums import PRIORITY
__priority__ = PRIORITY.LOW 

def dependencies(): 
    pass

def tamper(payload, **kwargs): 
    payload = payload.replace(' ','/**/'))
    return payload

可以通过sqlmap -v 3 实时查看payload内容

77323686.png

另外,可以修改kwargs参数来修改请求头内容

kwargs['headers']['User-Agent']="Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36" # 修改User-Agent

实现更复杂的tamper需要更深入的了解正则Http协议及Python相关的基础

0x04 参考文章

如何编写Sqlmap的Tamper脚本?

标签: none

添加新评论