CVE-2013-4730分析学习·1

本文对PCMan’s FTP Server 2.0进行漏洞分析,分析环境为Win7pro系统,使用Python 2.7.15和WinDbg调试器。运行POC后发现溢出已发生但未覆盖函数返回值,经分析确定为格式化字符串漏洞。还进行了Exploit构造分析,并开展直接二进制修改测试。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

分析环境:

操作系统: Win7pro (winxp的符号配置到自闭)
环境配置: python 2.7.15(配置winxp环境时 如果出现已知无法更改环境变量成功可以尝试重启)
漏洞软件: PCMan’s FTP Server 2.0.0.0
调试器: WinDbg

POC:

https://www.exploit-db.com/exploits/26471
或者可以用简版如下:

import   socket

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

s.connect(("127.0.0.1",   21))

s.recv(1024)

User   = 'anonymous'

Password='A'*8000

s.send("USER"   + User + "\r\n")

print   s.recv(1024)

s.send("PASS"   + Password + "\r\n")

print   s.recv(1024)

POC运行结果

在这里插入图片描述
在这里插入图片描述
kb 显示的参数 从左到右分别为 ebp, ret ,arg1, arg2,返回值被AAAA覆盖,此时esp之前是返回上层函数的地址,在0012ed6c之前下硬件写入条件断点,重开windbg附加进程调试,命令如下:

ba w4 0012ed5c ".if(poi(0012ed5c)=0x41414141){}.else{gc}"

再次执行poc,程序在004173af处断下,溢出已经发生,但未覆盖函数返回值。
在这里插入图片描述
在IDA中搜索此地址 可知指令处于wirte_char函数中。
在这里插入图片描述
OD硬件断点下载004173af处 即可回溯出上层调用函数地址00417403
在这里插入图片描述
在这里插入图片描述
通过IDA的Ctrl+X 依次往上可以追溯调用函数依次为write_char<——output<——sprintf函数。查看sprintf函数的上层调用,发现在sub_403E60中可能触发堆栈溢出,记录sprintf函数地址00412CBF,使用硬件断点进行追踪。
在这里插入图片描述

第一次中断写入数据
在这里插入图片描述
第二次写入数据
在这里插入图片描述
第三次写入数据
在这里插入图片描述
第四次调用写入数据
在这里插入图片描述
第五次写入数据
在这里插入图片描述
第六次调用sub_403E60函数
在这里插入图片描述
进入Sprintf函数前参数记录
在这里插入图片描述
调用Sprintf函数分析 由填充格式和内存中的数据结果分析可知,Sprintf函数在传入Password的时候 采用%s方式传入,出现格式化字符串漏洞。
在这里插入图片描述
对比进入函数前堆栈截图可知此时返回地址已被覆盖掉
在这里插入图片描述

Exploit构造分析

 结合截图中所出现几个关键信息有以下构造思路:
  从IDA分析和动态调试中可以看到,此漏洞为格式化字符串漏洞,那么从理论上讲构造参数中的Name参数和Password参数都可以进行返回地址攻击(RETN 0x4)。此处使用Password参数进行构造,
目标图3
Password填充起始地址为0019E4FD,函数返回EIP指向0019ECD8所储存的值,返回后ESP值为0019ECE0,同时根据调用Sprintf函数的结束图可知最后的填充地址为0019F442(出现00截断),不开辟空间情况下可以使用的shellcode填充大小为 0019F442-(0019ECD8+4)=0x766。前置填充的垃圾数据大小为0019ECD8-0019E4FD=0x7DB。

Exploit·1 直接进行二进制修改测试

在这里插入图片描述
在这里插入图片描述

重点关注参数传递 是什么参数构成了填充溢出 如何构造

参考资料 https://bbs.pediy.com/thread-217036.htm

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值