CVE-2019-7659 CVE-2017-9765 gsoap2.7

CVE-2019-7659

漏洞原理
函数:“ soap_putsetcookies”。该功能的作用是为响应创建“ Set-Cookie”标头。它通过将必要的数据写入函数中的固定长度缓冲区来实现此目的,目的是通过使用名称和值的组合,最多使用4064字节来设置cookie。

Payload:
perl -e ‘print “ASDF 401 HTTP/1.0\r\nCookie: “, “a”x4064, “=b\r\nCookie: “, “a”x4064, “=”, “c”x1000, “\r\n\r\n”; sleep(1);’ | socat – ssl:127.0.0.1:50000,verify=0
参考:
https://outpost24.com/blog/gsoap-vulnerability-identified

CVE-2017-9765

漏洞原理
在soap_get_pi()函数中,缓冲区buf大小为64,变量i的值随着数据写入缓冲区递减。while循环中解析输入的xml数据,但是结束条件是遇到字符”?”或输入数据结尾,而不是判断实际写入缓冲区的数据是否已经达到0x40字节,当i<0时,输入数据不再写入缓冲区,但是每次while循环,–i的操作都在执行,从而导致整型下溢,当i的值溢出为正值以后,可以继续向缓冲区写入数据,从而突破缓冲区大小为64的限制。
漏洞利用时,通过发送0x80000000字节数据,可以导致整型下溢,通过0x40字节数据覆盖缓冲区,另外在覆盖返回地址前还需要0x30字节数据,总共0x80000070字节数据,通过post发送到80端口” /onvif/device_service”。
具体的漏洞触发场景为:

前0x40字节数据,i的值由0x40减为0,所读取的0x40字节数据填充到缓冲区buf中。i的值小于0后,读取的数据不再写入缓冲区;
i的值由0Xffff ffff(-1)递减为负数最小值0x8000 0000;
i的值再减1,将由负数最小值0x8000 0000变成正数最大值0x7fff ffff。因此,总共需要0x8000 0000字节数据,才能使i下溢为正数;
i的值溢出为正数以后,此时可以继续向缓冲区写入数据,直到覆盖返回地址。
Genivia官方在2.8.48版本中修复了该漏洞,由图1可知,在新版本中,依然以读取到的数据是否为“?”作为数据输入结束判断条件,但是将i–操作放在if(i>1)的条件判断中,从而防止整型下溢。
向80端口上的“onvif/device_service”服务发送了一个POST命令,进而接触到漏洞利用点。为了发送0x80000070个字节,我们构造了一个文本文件,文件开头为“POST /onvif/device_service”,在随后新的一行中使用“<?”来表示SOAP消息的开头部分,然后使用垃圾数据填充文件的剩余部分。我们使用如下命令,通过netcat发送这个文件:

nc [camera_ip] 80 < postpwn.txt

我们需要更多的信息才能确定我们是否能够利用这个漏洞,此时此刻,当我们将全部数据发送完毕后,目标服务已经没有任何响应了。在Asix官方支持中心的指引下,我们通过ssh接口成功连接上摄像头。摄像头内置了一个Web服务器,我们转到高级菜单页面,编辑/etc/ocnf.d/ssh,启用了ssh功能。重启摄像头后,我们使用已有的用户名及密码成功连入设备的ssh接口。随后我们发现摄像头已经预先安装了gdbserver,因此我们在本地计算机上使用ARM编译的gdb来观察漏洞触发时服务的工作过程。正如我们预期的那样,当服务处理到我们提供的溢出数据时就会发生崩溃。
参考*:http://blog.nsfocus.net/cve-2017-9765-vulnerability-analysis/
https://www.anquanke.com/post/id/86457

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值