sqlmap-tamper编写指南

注:最近遇到了一些奇怪的waf,想自己写一些tamper但是发现没有参考材料可以使用,因此在写了这篇文章,一方便进行自定义的tamper编写。笔者笔力有限,如有错误,敬请读者们指正。

0x00 sqlmap tamper简介

sqlmap是一个自动化的SQL注入工具,而tamper则是对其进行扩展的一系列脚本,主要功能是对本来的payload进行特定的更改以绕过waf。

0x01 一个最小的例子

为了说明tamper的结构,让我们从一个最简单的例子开始

# sqlmap/tamper/escapequotes.py

from lib.core.enums import PRIORITY

__priority__ = PRIORITY.LOWEST

def dependencies():
    pass

def tamper(payload, **kwargs):
    return payload.replace("‘", "\\‘").replace(‘"‘, ‘\\"‘)

  

不难看出,一个最小的tamper脚本结构为priority变量定义和dependencies、tamper函数定义。

priority定义脚本的优先级,用于有多个tamper脚本的情况。

dependencies函数声明该脚本适用/不适用的范围,可以为空。

tamper是主要的函数,接受的参数为payload和**kwargs
返回值为替换后的payload。比如这个例子中就把引号替换为了\\‘。

0x02 详细介绍

第一部分完成了一个最简单的tamper架构,下面我们进行一个更详细的介绍

tamper函数

tamper是整个脚本的主体。主要用于修改原本的payload。
举个简单的例子,如果服务器上有这么几行代码

$id = trim($POST($id),‘union‘);
$sql="SELECT * FROM users WHERE id=‘$id‘";

而我们的payload为

-8363‘  union select null -- -

这里因为union被过滤掉了,将导致payload不能正常执行,那么就可以编写这样tamper

def tamper(payload, **kwargs):
    return payload.replace(‘union‘,‘uniounionn‘)

保存为test.py,存到sqlmap/tamper/下,执行的时候带上--tamper=test的参数,就可以绕过该过滤规则

dependencies函数

dependencies函数,就tamper脚本支持/不支持使用的环境进行声明,一个简单的例子如下:

# sqlmap/tamper/echarunicodeencode.py

from lib.core.common import singleTimeWarnMessage

def dependencies():
    singleTimeWarnMessage("tamper script ‘%s‘ is only meant to be run against ASP or ASP.NET web applications" % os.path.basename(__file__).split(".")[0])

# singleTimeWarnMessage() 于在控制台中打印出警告信息

  

kwargs

在官方提供的47个tamper脚本中,kwargs参数只被使用了两次,两次都只是更改了http-header,这里以其中一个为例进行简单说明
# sqlmap/tamper/vanrish.py

def tamper(payload, **kwargs):
    headers = kwargs.get("headers", {})
    headers["X-originating-IP"] = "127.0.0.1"
    return payload

这个脚本是为了更改X-originating-IP,以绕过WAF,另一个kwargs的使用出现于xforwardedfor.py,也是为了改header以绕过waf

0x3 结语

tamper的编写远不止这些,本文只就其最基本的结构进行探讨。作为sqlmap的扩展,在编写tamper时几乎所有的sqlmap内置的函数、变量都可以使用,本文不一一列出。

0x04 一些常用的取值

# sqlmap/lib/enums.py

class PRIORITY:
    LOWEST = -100
    LOWER = -50
    LOW = -10
    NORMAL = 0
    HIGH = 10
    HIGHER = 50
    HIGHEST = 100

class DBMS:
    ACCESS = "Microsoft Access"
    DB2 = "IBM DB2"
    FIREBIRD = "Firebird"
    MAXDB = "SAP MaxDB"
    MSSQL = "Microsoft SQL Server"
    MYSQL = "MySQL"
    ORACLE = "Oracle"
    PGSQL = "PostgreSQL"
    SQLITE = "SQLite"
    SYBASE = "Sybase"
    HSQLDB = "HSQLDB"
时间: 2024-10-08 01:06:28

sqlmap-tamper编写指南的相关文章

sqlmap tamper编写

#!/usr/bin/env python """ Copyright (c) 2006-2017 sqlmap developers (http://sqlmap.org/) See the file 'doc/COPYING' for copying permission """ from lib.core.enums import PRIORITY __priority__ = PRIORITY.LOW def dependencies()

(转载)HTML Email 编写指南

原文地址 今天,我想写一个"低技术"问题. 话说我订阅了不少了新闻邮件(Newsletter),比如JavaScript Weekly.每周收到一封邮件,了解本周的大事. 有一天,我就在想,是不是我也能做一个这样的邮件? 然后,就发现这事不那么容易.抛开后台和编辑工作,单单是设计一个Email样板,就需要不少心思. 因为这种带格式的邮件,其实就是一张网页,正式名称叫做HTML Email.它能否正常显示,完全取决于邮件客户端.大多数的邮件客户端(比如Outlook和Gmail),会过滤

基于Asterisk的VoIP开发指南——(2)Asterisk AGI程序编写指南

原文:基于Asterisk的VoIP开发指南--(2)Asterisk AGI程序编写指南 5. Asterisk AGI程序编写指南 5.1概述 很多时候,我们需要在拨号方案中做某些业务逻辑的判断或者外部数据库的查询,根据具体地需要,有几种做法: 1.使用Asterisk的通道变量.Goto函数.Gotoif函数等实现某些简单跳转,通过几个这样的函数的组合,实现简单的业务. 2.对终端接入用户的呼叫请求中的某些属性,进行简单的数据库增删改查,在Asterisk官方发布的asterisk-add

基于Asterisk的VoIP开发指南——Asterisk 模块编写指南(1)

原文:基于Asterisk的VoIP开发指南--Asterisk 模块编写指南(1) 1 开源项目概述 Asterisk是一个开源的软件包,通常运行在Linux操作系统平台上.Asterisk可以用三种协议来实现VoIP,同时可以与目前电话使用的标准硬件进行交互通信,Asterisk在实现VoIP时,不需要任何附加硬件,本文所采用的也是这种使用方式.但是,如果企业没有与VoIP语音网关运营商建立合作关系,想要自己构建这样的一个平台,那么要和数字电话设备与模拟电话设备进行交互通信,Asterisk

HTML Email 编写指南(转)

作者: 阮一峰 日期: 2013年6月16日 今天,我想写一个"低技术"问题. 话说我订阅了不少了新闻邮件(Newsletter),比如JavaScript Weekly.每周收到一封邮件,了解本周的大事. 有一天,我就在想,是不是我也能做一个这样的邮件? 然后,就发现这事不那么容易.抛开后台和编辑工作,单单是设计一个Email样板,就需要不少心思. 因为这种带格式的邮件,其实就是一张网页,正式名称叫做HTML Email.它能否正常显示,完全取决于邮件客户端.大多数的邮件客户端(比如

Linux守护进程编写指南 (注:文章为转载)

*:first-child { margin-top: 0 !important; } body>*:last-child { margin-bottom: 0 !important; } /* BLOCKS =============================================================================*/ p, blockquote, ul, ol, dl, table, pre { margin: 15px 0; } /* HEAD

测试用例编写指南

l        用例的补充.1.        测试执行阶段产生新的测试思路或者发现的BUG,没有用例覆盖到的,在项目发布后一周内,把用例全部补充上.让每一个BUG都有对应的用例覆盖.由产品线负责人监督 l        公共用例库.2.       公共用例库的目录结构规划要合理,方便后面的项目更新进来,这个最好由产品线负责人先统一规划好.3.       项目发布后一周内,把用例更新到公共用例库,由产品线负责人监督4.       小需求发布后半个月内,更新到公共用例库(考虑到小需求变术太

sqlmap tamper绕过安全狗

可以过5.3版本 放出py #!/usr/bin/env python """ Copyright (c) 2006-2014 sqlmap developers (http://sqlmap.org/) See the file 'doc/COPYING' for copying permission """ from lib.core.enums import PRIORITY __priority__ = PRIORITY.LOW def

SQLMAP tamper WAF 绕过脚本列表注释

sqlmap的tamper目录下有41个用于绕过waf的脚本,网上有文章简要介绍过使用方法,但是只是简单说了其中少数几个的作用.本人通过这41个脚本的文档注释,将它们每一个的作用简单标记了一下,还是像之前一样,先 google translate 再人工润色.其实,文档注释里面都有例子,看一眼就大概知道效果了,比看文字描述速度还快,只不过要用的时候现场翻看还是太麻烦了.我这个列表可以给大家提供参考,来更迅速的定位自己需要的脚本. 本人英文阅读能力有限,有个别词句(其实就2处)实在拿捏不准该如何翻