做兼职网站的主要参考文献,餐饮业网站建设招标书,有接口怎么做网站,物联网的核心和基础是什么进入正题#xff0c;随着安全意思增强#xff0c;各企业对自己的网站也更加注重安全性。但很多web应用因为老旧#xff0c;或贪图方便想以最小代价保证应用安全#xff0c;就只仅仅给服务器安装waf。
本次从协议层面绕过waf实验用sql注入演示#xff0c;但不限于实际应用…进入正题随着安全意思增强各企业对自己的网站也更加注重安全性。但很多web应用因为老旧或贪图方便想以最小代价保证应用安全就只仅仅给服务器安装waf。
本次从协议层面绕过waf实验用sql注入演示但不限于实际应用时测试sql注入命令执行代码执行文件上传等测试都通用。
原理
先给服务器发送payload数据包使得waf无法识别出payload,当apache,tomcat等web容器能正常解析其内容。如图一所示 实验环境
本机win10xampp某狗web应用防火墙最新版。为方便演示存在sql注入的脚本中使用$_REQUEST[id]来接收get,或者post提交的数据。
waf配置为拦截url和post的and or 注入如图二所示。 发送get请求或利用hackbar插件发送post请求payload均被拦截如图三。 利用pipline绕过[该方法经测试会被某狗拦截]
原理
http协议是由tcp协议封装而来当浏览器发起一个http请求时浏览器先和服务器建立起连接tcp连接然后发送http数据包即我们用burpsuite截获的数据其中包含了一个Connection字段一般值为closeapache等容器根据这个字段决定是保持该tcp连接或是断开。
当发送的内容太大超过一个http包容量需要分多次发送时值会变成keep-alive即本次发起的http请求所建立的tcp连接不断开直到所发送内容结束Connection为close为止。
1. 关闭burp的Repeater的Content-Length自动更新如图四所示点击红圈的Repeater在下拉选项中取消update Content-Length选中。这一步至关重要 2. burp截获post提交
id1 and 11,显示被waf拦截如图五所示。 3. 复制图五中的数据包黏贴到
id1 and 11后面如图六所示。 4. 接着修改第一个数据包的数据部分即将
id1and1%3D1
修改为正常内容id1再将数据包的Content-Length的值设置为修改后的【id1】的字符长度即4最后将Connection字段值设为keep-alive。提交后如图七所示会返回两个响应包分别对应两个请求。 注意从结果看第一个正常数据包返回了正确内容第二个包含有效载荷的数据包被某狗waf拦截说明两数据包都能到达服务器在面对其他waf时有可能可以绕过。无论如何这仍是一种可学习了解的绕过方法且可以和接下来的方法进行组合使用绕过。
利用分块编码传输绕过[该方法可绕某狗]
原理
在头部加入 Transfer-Encoding: chunked 之后就代表这个报文采用了分块编码。这时post请求报文中的数据部分需要改为用一系列分块来传输每个分块包含十六进制的长度值和数据长度值独占一行长度不包括它结尾的也不包括分块数据结尾的且最后需要用0独占一行表示结束。
1. 开启上个实验中已关闭的content-length自动更新。给post请求包加入Transfer-Encoding: chunked后将数据部分id1 and 11进行分块编码注意长度值必须为十六进制数每一块里长度值独占一行数据占一行如图八所示。 2.将上面图八数据包的
id1 and 11
改为
id1 and 12 即将图八中所标的第4块的1改为2。如图九所示没有返回数据payload生效。 注意分块编码传输需要将关键字and,or,select ,union等关键字拆开编码不然仍然会被waf拦截。编码过程中长度需包括空格的长度。最后用0表示编码结束并在0后空两行表示数据包结束不然点击提交按钮后会看到一直处于waiting状态。
利用协议未覆盖进行绕过[同样会被某狗拦截]
原理
HTTP头里的Content-Type一般有application/x-www-form-urlencodedmultipart/form-datatext/plain三种其中multipart/form-data表示数据被编码为一条消息页上的每个控件对应消息中的一个部分。所以当waf没有规则匹配该协议传输的数据时可被绕过。
1.将头部Content-Type改为multipart/form-data; boundary69 然后设置分割符内的Content-Disposition的name为要传参数的名称。数据部分则放在分割结束符上一行。 由于是正常数据提交所以从图十可知数据是能被apache容器正确解析的尝试1 and 11也会被某狗waf拦截但如果其他waf没有规则拦截这种方式提交的数据包那么同样能绕过。
2.一般绕waf往往需要多种方式结合使用如图十的示例中只需将数据部分1 and 11用一个小数点.当作连接符即1.and 11就可以起到绕过作用。当然这只是用小数点当连接符所起的作用而已。 分块编码协议未覆盖组合绕过
1.在协议未覆盖的数据包中加入Transfer-Encoding: chunked 然后将数据部分全部进行分块编码如图十二所示(数据部分为1 and 11)。 注意第2块第3块第7块和第8块。
第2块中需要满足
长度值空行Content-Disposition: nameid空行
这种形式且长度值要将两个空行的长度计算在内空行长度为2。
第3块即数据开始部分需满足
长度值 空行数据
形式且需将空行计算在内。
第7块即分割边界结束部分需满足
长度值空行分割结束符空行
形式且计算空行长度在内。
第8块需满足
0 空行空行
形式。如果不同时满足这四块的形式要求payload将不会生效。
结语
以上是在http协议层面绕过waf因为比较通用所以理论上可以用于平时渗透时的方方面面如命令执行代码注入sql注入等测试。虽然本文中只有分块编码真正做到了绕过某狗但其他两种方法在其他waf绕过中可能仍然可用而且可与其他绕过方法结合使用甚至像四中一样相互组合使用