CVE-2004-2685:CCProxy缓冲区溢出漏洞
为什么esp偏移是4呢
信息
https://www.cve.org/CVERecord?id=CVE-2004-2685
漏洞概述
YoungZSoft CCProxy 6.2及更早版本中存在缓冲区溢出漏洞,远程攻击者可通过向Telnet代理服务发送包含过长地址的ping (p)命令来执行任意代码。
影响版本
YoungZSoft CCProxy 6.2及更早版本
CWE
CWE-119 Improper Restriction of Operations within the Bounds of a Memory Buffer
原理
CCProxy在代理Telnet协议时,可以接受Ping命令
Ping命令格式:ping hostname\r\n
当hostname的长度大于或者等于1010字节时,CCProxy 6.2会发生缓冲区溢出,导致程序崩溃。构造特殊输入可以劫持程序流造成任意代码执行
环境
Windows XP SP3
安装
参考:https://blog.csdn.net/linxinfa/article/details/112768896
下载:https://msdn.itellyou.cn/
1 | ed2k://|file|zh-hans_windows_xp_professional_with_service_pack_3_x86_cd_x14-80404.iso|630239232|CD0900AFA058ACB6345761969CBCBFF4|/ |
打开VMware新建虚拟机。全部默认。注册码的部分全部跳过。漫长的等待…

笑晕了

共享文件夹
添加一个共享文件夹

然后开机,右击我的电脑,点击映射网络驱动器,点浏览,等待出现刚刚设置的文件夹

在我的电脑里可以找到这个网络驱动器

网络
仅主机模式

XP设静态IP

主机VMnet1设静态IP。然后,关闭XP的防火墙!!通了

关闭DEP
忘记做了,目移
CCProxy
安装之后得激活。把注册机挪到安装目录,运行,需要输入machine id和serial
嗯找不到先跳过了,如果后面有问题再看看有没有别的绕过方法
复现
先启动CCProxy。
查看ip。端口好像是默认23。然后就可以在别的机器上telnet连接上CCProxy的端口。
1 | telnet 192.168.101.88 23 |
使用cyclic生成一个2000长的字符串,ping过去

崩溃了,查看错误报告


查看技术报告(并没有看出什么)

噢噢有的,后面有上下文和栈。嘶,但是好像不是崩溃时的寄存器值



用溢出数据看偏移,得到ret的偏移是1012

要在ret处放jmp esp指令,实现跳转。jmp esp指令地址有个通用的是0x7FFA4512
于是程序会跳到esp开始执行,接下来就是esp里面放的啥。同样的方法可以测得esp的偏移是4
所以payload的结构就是
1 | buffer(4) + shellcode + 填充到1012位为止 + 0x7FFA4512(jmp esp地址) |
网上找了个直观的图

shellcode从网上找了一段调计算器的:https://www.cnblogs.com/toorist/p/4428340.html
1 | 4 unsigned char shellcode[68] = { |
exp
1 | from pwn import * |
