-
-
[原创]]腾讯2010安全技术竞赛[第一阶段 第一题]
-
发表于: 2010-10-19 16:22 3180
-
exe文件中谈对话框代码:
004011C0 . 6A 00 push 0
004011C2 . 68 6C604000 push 0040606C ; UNICODE "ExploitMe"
004011C7 . 68 60604000 push 00406060 ; UNICODE "Fail"
004011CC . 6A 00 push 0
004011CE . FF15 10854000 call dword ptr [408510] ; user32.MessageBoxW
004010F5 |. 81FB 84000000 cmp ebx, 84 ; 文件大小超过84h就不行
004010FB |. A3 14854000 mov dword ptr [408514], eax
00401100 |. 77 16 ja short 00401118
所以填充84h个FF ,弹出错误提示:"0x0040116a" 指令引用的 "0xffffffff" 内存。该内存不能为 "read"。
0040116A |. FF12 call dword ptr [edx] ; 弹出"Fail"
这句代码call了 "0xffffffff" 指向的地址。经过定位,正式提交的dat文件的0x80~0x84字节。
下面对exe文件中谈对话框代码进行改造。由于已经取得MessageBoxW,MessageBoxA 的地址,有两种方法可以用。
用MessageBoxA 能省一点字节,但是需要自己构造ASCII字符串"ExploitMe" "Exploit success",还要将call dword ptr [408510] 改成call dword ptr [408514]
用MessageBoxW空间大一点,但是可以利用已有代码,只需要一个Unicode的"Exploit success"。
附件中exploit1.dat 为ASCII版本,exploit9.dat为Unicode版本。
004011C0 . 6A 00 push 0
004011C2 . 68 6C604000 push 0040606C ; UNICODE "ExploitMe"
004011C7 . 68 60604000 push 00406060 ; UNICODE "Fail"
004011CC . 6A 00 push 0
004011CE . FF15 10854000 call dword ptr [408510] ; user32.MessageBoxW
004010F5 |. 81FB 84000000 cmp ebx, 84 ; 文件大小超过84h就不行
004010FB |. A3 14854000 mov dword ptr [408514], eax
00401100 |. 77 16 ja short 00401118
所以填充84h个FF ,弹出错误提示:"0x0040116a" 指令引用的 "0xffffffff" 内存。该内存不能为 "read"。
0040116A |. FF12 call dword ptr [edx] ; 弹出"Fail"
这句代码call了 "0xffffffff" 指向的地址。经过定位,正式提交的dat文件的0x80~0x84字节。
下面对exe文件中谈对话框代码进行改造。由于已经取得MessageBoxW,MessageBoxA 的地址,有两种方法可以用。
用MessageBoxA 能省一点字节,但是需要自己构造ASCII字符串"ExploitMe" "Exploit success",还要将call dword ptr [408510] 改成call dword ptr [408514]
用MessageBoxW空间大一点,但是可以利用已有代码,只需要一个Unicode的"Exploit success"。
附件中exploit1.dat 为ASCII版本,exploit9.dat为Unicode版本。
赞赏
看原图
赞赏
雪币:
留言: