Nginx 整数溢出漏洞 CVE-2017-7529
影响范围
- Nginx 0.5.6 - 1.13.2
漏洞类型
整数溢出
操作系统限制
无
配置要求
Nginx 开启了缓存功能
漏洞利用
信息泄露
利用原理
Nginx 处理 Range 请求的模块计算请求范围时候使用了 64 位有符号整数,在计算多段请求时候,Nginx 会计算总的返回长度,攻击者通过给出接近 64 位整数机选大数字,两个负数相减或正数相加,结果超过 64 位整数能表示的最大范围,这个数值在计算机内部发生了溢出。当 Nginx 开启了缓存,存文件的格式不是纯文本,而是包含 KEY、过期时间、后端服务器信息,后端返回的原始头信息,以及真正的网页内容,由于漏洞导致的整数溢出(没做边界检验),攻击者构造负数起始位置,在通过整数溢出使得请求变得合理(大整数与负数相加后整数溢出变成极小的数,极小的数小于实际文件总长,使服务器认为请求合理),Nginx 内部计算的原始读取位置发生了偏移,可以让出错的指针刚好落到缓存头区域,进而读到缓存的内容
漏洞复现
现成的 vulhub 来拉取镜像
1 | #下载vulhub源代码 |

写攻击脚本
1 | import requests |

运行脚本,返回 200 且看到泄露的内容
1 | python3 exploit.py |

本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 Johan的秘密小窝!
评论