漏洞概要 关注数(24) 关注此漏洞
缺陷编号:wooyun-2016-0184744
漏洞标题:白吃黑之KiTTYPortable最新版存在缓冲区溢出漏洞连接我主机可反控黑阔主机
相关厂商:KiTTYPortable
漏洞作者: k0_pwn
提交时间:2016-03-15 00:40
修复时间:2016-06-16 19:00
公开时间:2016-06-16 19:00
漏洞类型:远程代码执行
危害等级:高
自评Rank:20
漏洞状态:已交由第三方合作机构(cncert国家互联网应急中心)处理
漏洞来源: http://www.wooyun.org,如有疑问或需要帮助请联系 [email protected]
Tags标签: 无
漏洞详情
披露状态:
2016-03-15: 细节已通知厂商并且等待厂商处理中
2016-03-18: 厂商已经确认,细节仅向厂商公开
2016-03-21: 细节向第三方安全合作伙伴开放(绿盟科技、唐朝安全巡航、无声信息)
2016-05-12: 细节向核心白帽子及相关领域专家公开
2016-05-22: 细节向普通白帽子公开
2016-06-01: 细节向实习白帽子公开
2016-06-16: 细节向公众公开
简要描述:
说明中对此漏洞进行详细的分析,并提供了exploit,但是这个exploit是一个纯洁的exp,shellcode功能是弹计算器,如果需要可以换成弹shell,绑端口,下载并执行,想怎么玩怎么玩!
我将最新版KiTTYPortable上传到github,或者需要去官网下载最新版,审核大大直接运行我的exp即可
测试环境:windows xp sp3(如果改用win7,win8或者其他版本系统测试需要修改jmp esp地址)
详细说明:
软件说明、环境搭建及漏洞复现:
KiTTYPortable是一个用于SSH,或者Telnet等方式连接的工具,有点像putty,大概黑客经常使用吧,2015年这个软件老版本曾经出现过一个远程代码执行漏洞获得了CVE编号
可不可以麻烦乌云可否尝试申请一个CVE编号呢?谢谢!
此漏洞的最新版本是2016年3月3日更新的**.**.**.**版本,新版本的kittyportable和exp.py已经上传到github,在测试代码部分可以看到
官网地址:http://**.**.**.**/kitty/?page=Download
此版本的kittyportable的kscp.exe存在远程代码执行漏洞。这里我提供PoC的关键部分,只需要将测试代码部分的相同位置替换即可
运行exp.py,测试代码中的test_rsa.key作为SSH交换的密钥需要和exp.py在同一个文件夹下,在另一台主机运行kscp.exe命令
随便输入一个密码,就能看到程序崩溃。
可以看到此时指针指向了41414141这个位置,而这个位置是exp.py发送的数据,证明此位置可控。
漏洞分析:
kscp.exe是KiTTYPortable用于处理linux和windows之间文件传输的工具,此文件的sub_40C050函数中,处理缓冲区的sscanf函数在处理传输过来的文件名字符串时,没有进行长度检查和长度控制,从而导致执行完sscanf之后参数缓冲区被覆盖,从而导致返回地址被覆盖,造成远程代码执行。
首先我们用OD带参数启动kscp.exe
通过F9运行到达程序崩溃位置。
可以看到此时堆栈中已经接收到了畸形字符串
在崩溃位置,我们可以看到堆栈回溯的情况,首先在崩溃位置执行了jmp sscanf,正是漏洞崩溃时关键的函数调用,稍后会提及,在这个函数执行前的位置,可以看到之前的函数调用,通过IDA也能看到这个函数的名称
接下来我们在这个函数的入口处下断点,程序中断后,单步跟进程序过程
在此函数中,涉及到一处循环操作。
此处循环的作用就是接收传过来的文件名称字符串,我们直接结束这个循环,在0040c1ae的位置下断点,这里是循环结束后的汇编指令的位置,这时,观察堆栈数据。
这里已经接收到了exp端发送的畸形数据,这串畸形数据在后面的汇编代码中,会作为sscanf函数的参数,对一个缓冲区进行赋值。通过IDA看看这里的伪代码逻辑。首先是循环赋值操作。
紧接着循环结束后,会在sscanf调用到赋值了畸形字符串的参数,之后会传给sscanf的第一个参数,而在整个函数过程中,没有对这个接收到的字符串进行有效的长度检查和控制。
因此,造成缓冲区溢出,之前我们提到崩溃时地址指向了41414141,因此我们需要精确覆盖ret地址,从而达到执行任意代码的目的。
Exploit构造:
首先我们需要找到PoC中,发送畸形字符串的关键位置,之前我们已经提到,通过调整畸形字符串内容,确定覆盖ret地址改为jmp esp的准确位置,以此方法多次尝试后,我们发现偏移76字节的位置是ret地址将会被覆盖的位置。
关键代码部分:
客户端运行结果:
我们将这个位置修改成jmp esp地址,这里我们使用通用的跳转地址7ffa4512,这个跳转地址针对win xp和win 7都适用。修改完成后,我们需要确定shellcode的覆盖位置,经测试,直接连接在7ffa4512地址之后即可。主要观察\xaa\xbb\xcc\xdd
关键代码:
客户端结果:
确定了shellcode的位置之后,我们就可以直接用shellcode来执行恶意代码了,具体的exp已经在测试代码部分,直接运行即可。
客户端访问主机时,代码执行,弹出计算器
exploit方:
漏洞证明:
修复方案:
在do while循环之后增加长度校验,或在sscanf执行时,对参数长度进行控制,比如%10s
版权声明:转载请注明来源 k0_pwn@乌云
漏洞回应
厂商回应:
危害等级:高
漏洞Rank:12 ×2(经典二进制漏洞 Rank 翻倍)
确认时间:2016-03-18 18:59
厂商回复:
CNVD未直接复现所述情况,暂未建立与网站管理单位的直接处置渠道,待认领。
最新状态:
暂无