Cve-2017-14491复现

Cve-2017-14491

背景:
在2.78之前的dnsmasq中基于堆的缓冲区溢出允许远程攻击者通过精心设计的DNS响应导致拒绝服务(崩溃)或执行任意代码。

原理:
Cve-2017-14491复现_第1张图片
1.攻击者伪造成为dnsmasq的上游DNS服务器。

2.攻击者作为客户端向dnsmasq发送PTR请求,dnsmasq不存在相应PTR记录,便向上游DNS查询,然后获得PTR的查询结果缓存并应答客户端。

3.攻击者再次在客户端向dnsmasq发送PTR请求,dnsmasq便解析之前缓存的PTR记录,由于数据包的构建都在堆上,而且上游的恶意的PTR相应记录的大小超过了堆上分配的内存空间,最后造成了堆溢出。
Cve-2017-14491复现_第2张图片
分析:(详细分析见https://www.anquanke.com/post/id/87085)
第一个cache_insert函数执行后,后续的crec结构体中都把PoC中向前引用的name给完全解析扩展开,这样就一下增大了响应数据包的大小,造成后续的堆溢出
具体跟进add_resource_record函数,可以定位到rfc1035.c:1440行的do_rfc1035_name函数,该函数类似于一个copy操作,就是把解析的域名放入响应数据包的RDATA字段,由于解析域名后的数据包就扩展的很大,超出了分配的堆空间,所以造成了溢出

抓到的流量中
Cve-2017-14491复现_第3张图片
对应着报文格式
Cve-2017-14491复现_第4张图片
可知,rdata被填充为1024字节

复现:
1.伪造上游dns服务器
在这里插入图片描述
2.向攻击者控制的dns服务器启动dnsmasq转发查询
在这里插入图片描述
3.再次向dnsmasq发送请求,命中缓存
在这里插入图片描述
4.dnsmasq产生了溢出
Cve-2017-14491复现_第5张图片
上游服务器的回显
在这里插入图片描述

Poc分析:
主要关注作为伪造的上游服务器返回的内容
第一次响应返回
Cve-2017-14491复现_第6张图片
下一个响应
Cve-2017-14491复现_第7张图片

流量分析:
攻击者在客户端第二次发起PTR请求时
请求部分
Cve-2017-14491复现_第8张图片
Dnsmasq此时会用之前从上游服务器拿的ptr查询结果的缓存进行应答
Cve-2017-14491复现_第9张图片
这些数据正是poc中的填充

你可能感兴趣的:(Cve-2017-14491复现)