CCProxy 6.2 溢出分析

前天去上海比赛,有个CCProxy的溢出题目,当时现场没能调出来,回来后,发现其实是线程的栈空间分配的问题,也就是说:当用OD打开和用OD附加时,线程分配的堆栈地址是不一样的。关于线程的堆栈的关系,不清楚的同学可以网上搜搜资料。现在给出解题过程:

这个软件在网上有POC,大家可以去看看,或者用msf实验一遍:

http://www.exploit-db.com/exploits/16689/

同样先用ollydbg 打开CCProxy.exe, 按F9运行,查看导入表,找到相关的Socket函数:


跟进,加上断点:


然后用python发送数据,根据exploit-db上给出的代码可知,登录CCproxy telnet后,ping 一个超长的字符串而导致溢出,

s = socket(AF_INET, SOCK_STREAM)

host = "192.168.10.128"
port = 23
s.connect((host, port))
s.send('p '+'A'*1016+'\r\n')
发送后,按F9,发现程序出错。长度先根据exploit-db上给出的,之后再分析。

再次用OD打开,发送,在WSARecv处停下,然后跟进,由于程序太大了,用IDA静态分析一遍,看看程序执行的流程,

找到相关的函数为:00417260



执行到这个函数,经过多次的跟进,在执行sub_4124E0后溢出,接着,跟进去,到004304A0 处:


这个函数是执行ping 命令后的返回结果用的,ida看看此函数,



name为传进来的host字段,也就是说我们传进来的 AAAAAAAAAA......... 字段


而buf字段只有0x404 的空间,也就是说这里就是溢出点,但是实际情况要自己观察堆栈:

sprintf函数执行前后堆栈的变化



也就是说我们把013A66F0处覆盖成我们需要的地址就里成功就差不多了。

溢出分析到这里就差不多了,shellcode有几个坏字节'\x00\x07\x08\x0a\x0d\x20'编码一下就行了。


测试环境为:win xp3,DEP未开启。


本篇文章没什么技术含量,仅仅是重现下漏洞而已,大牛勿喷。




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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值