一句话地址:http://sjxy.ycu.jx.cn/upfiles/Media/d2.asp 密码:z 普通的菜刀是连接不上滴。
代码如下:
也就是把传入的参数z经过decode函数解码后执行。
把Response.Write(2333333+1)编码后(526573706F6E73652E577269746528323333333333332B3129)执行,效果如图:
![D盾一句话动态代码执行拦截bypass]()
但当我们把菜刀的数据包编码后执行确被无情地拦截掉了:
编码前代码:
编码后:
![D盾一句话动态代码执行拦截bypass]()
数据包中已没有任何关键字,显然D盾的拦截不是在传输的过程中,D盾已可以在代码解码执行时检测到代码对一些敏感方法的调用,如FSO等组件。
但当我不以动态的方式去执行代码时(写到服务器Web目录中),却可以成功获得结果。
![D盾一句话动态代码执行拦截bypass]()
在梳理了整个过程后,可以作出的结论是D盾检查了最终执行的动态代码的内容(无论用户如何[加密]),但同样可以得出的结论是这样的检测会消耗一定的系统资源。那么如何尽可能地减少资源消耗呢?最终的测试显示,D盾检测了用户的每一个请求,但在检测后面的请求时同时会终止对前面所有请求的检查。
因此一个绕过方案就诞生了,我们把第一个请求的包的动态代码构造的足够多,占用些检测时间。保证第一个请求中的动态代码还未被完成检测时,再发出第二个请求(第二个请求不包含任何动态代码GET网站的任意URL即可),那么对第一个请求的检查还未来的及检查完成就被放过去了。(注:我的方法是在动态代码前加很多0A[换行]来消耗检测时间)
第一个请求:
http://sjxy.ycu.jx.cn/upfiles/Media/d2.asp
POST
第二个请求:直接GET请求http://sjxy.ycu.jx.cn/upfiles/Media/d2.asp
直接发送POST被拦截:
![D盾一句话动态代码执行拦截bypass]()
按上面的方法,成功执行了动态代码:
![D盾一句话动态代码执行拦截bypass]()
厂商回应:
危害等级:无影响厂商忽略
忽略时间:2016-03-10 17:19
厂商回复:
D盾 一句话是行为触发,并不是检测字符来做检测的,暂时未知道白帽子使用的 D盾 版本和情况,默认应该不会出现这情况,早期版本第一次加载是没有HOOK好一句话关键位置可能会出现这情况,新版本不应该有这情况发生。
欢迎技术宅指正,用户的安全更重要,如有什么需要更正的,可以和我联系 啊d QQ:
漏洞Rank:8 (WooYun评价)
最新状态:
暂无
评论