-
-
[原创]小白分析PCManFTP漏洞 CVE-2013-4730
-
发表于:
2020-11-26 19:23
7622
-
[原创]小白分析PCManFTP漏洞 CVE-2013-4730
软件名称:PCManFTP
软件版本:2.0
漏洞模块:PCManFTPD2.exe
模块版本:2.0.0.0
编译日期:2020-11-24
操作系统:Window 7 专业版(32位)
漏洞编号:CVE-2013-4730
危害等级:高危
漏洞类型:缓冲区溢出
威胁类型:远程
PCMan's FTP Server是洪任谕先生所研发的一套FTP服务器软件。
FTP(File Transfer Protocol,文件传输协议) 是 TCP/IP 协议组中的协议之一。FTP协议包括两个组成部分,其一为FTP服务器,其二为FTP客户端。其中FTP服务器用来存储文件,用户可以使用FTP客户端通过FTP协议访问位于FTP服务器上的资源。在开发网站的时候,通常利用FTP协议把网页或程序传到Web服务器上。此外,由于FTP传输效率非常高,在网络上传输大的文件时,一般也采用该协议。
默认情况下FTP协议使用TCP端口中的 20和21这两个端口,其中20用于传输数据,21用于传输控制信息。但是,是否使用20作为传输数据的端口与FTP使用的传输模式有关,如果采用主动模式,那么数据传输端口就是20;如果采用被动模式,则具体最终使用哪个端口要服务器端和客户端协商决定。
USER <username>
PASS <password>
CWD <dir path>
RETR <filename>
RMD <directory>
RNTO <new path>
HELP <command>
用户名
密码
改变服务器上的工作目录
在服务器上删除指定目录
从服务器上找回(复制)文件
对新路径重命名
返回指定命令信息
PCMan's FTP Server 2.0版本中存在缓冲区溢出漏洞。远程攻击者可借助USER命令中的长字符串利用该漏洞执行任意代码。在recv函数上下断点持续跟踪,发现服务端在接收到登录请求之后,会将受到的信息进行字符串拼接,而在字符串拼接的地方,并未进行长度控制,因此导致缓冲区溢出,即使用sprintf 对于写入buffer的字符数是没有限制的,这就存在了buffer溢出的可能性。解决这个问题,可以考虑使用 snprintf函数,该函数可对写入字符数做出限制。
1)自动生成有序数,并能确定异常点的偏移(可以使用windbg插件Mona2)
2)Mona2环境需要Python 2.7
3)Windbg(用来定位JMP ESP地址)
4)OllyDbg(为了后续测试)
5)Visual Studio2019写测试代码和ShellCode
1)虚拟机win7专业版sp1
2)安装WDK,它自带WinDBG
3)安装Python2.7.2
4)安装Visual C++ 2008运行库
5)安装WinDbg的Python插件Pykd
6)复制mona.py和windbglib.py到WinDbg同目录
7)运行WinDbg随便调试一个程序进行测试以上环境
.load pykd.pyd加载pykd
!py mona 测试Mona
.reload /f加载windbg符号
FTP需要符合标准:RFC959
1)建立Socket连接,连接目标FTP
2)连接FTP服务器的欢迎语
3)发送”USER XXX”到FTP
4)接受请求结果
5)详细代码在后文exploit(poc中4))
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课
最后于 2020-11-27 09:25
被哦哈哈哈哈编辑
,原因: