全程干货server error(Server Errornginx)
Nginx 是最常见的 Web 服务器。本文介绍五个常见的配置错误,它们会降低网站的安全性。
作者 | Crowdsource译者 | 王强策划 | 万佳Nginx 是最常见的 Web 服务器本文介绍五个常见的配置错误,它们会降低网站的安全性Nginx 错误配置如果不能及时修正,它会让你的网站陷入网络攻击的风险。
作为互联网上最常用的 Web 服务器之一,Nginx 因轻巧、模块化并且有对用户友好的配置格式而广受欢迎Detectify 使用 Google BigQuery 分析了从 GitHub 下载的近 50000 个不重复的 Nginx 配置文件。
本文主要关注以下常见的 Nginx 错误配置:根目录位置丢失off-by-slash不安全的变量使用原始后端响应读取merge_slashes设置为 off1根目录位置丢失server {root /etc/nginx;
location /hello.txt {try_files$uri$uri/ =404;proxy_pass http://127.0.0.1:8080/; }}root 指令指定 Nginx 的根文件夹。
在上面的示例中,根文件夹是/etc/nginx,这意味着我们可以访问该文件夹中的文件上面的配置没有针对/ (location / {...})的位置,只有/hello.txt的位置因此,root 指令会被设置为全局,这意味着对。
/的请求会将你带到本地路径/etc/nginx像GET /nginx.conf这样简单的请求都能显示存储在 /etc/nginx/nginx.conf中 Nginx 配置文件的内容如果将根设置为/etc。
,则对/nginx/nginx.conf的GET请求将显示配置文件在某些情况下,访问者可能会访问其他配置文件、访问日志甚至 HTTP 基本身份验证的加密凭据在我们收集的近 50000 个 Nginx 配置文件中,最常见的根路径如下:。
经常配置错误的 Nginx 根路径2off-by-slashserver {listen80 default_server;server_name _;location /static {alias /usr/share/nginx/static/;
}location /api {proxy_pass http://apiserver/v1/; }}这个配置错误指的是由于缺少一个斜杠,所以有可能沿路径上移一步OrangeTsai 在 Blackhat 演讲“Breaking Parser Logic!”中让这项技术广为人知。
https://i.blackhat.com/us-18/Wed-August-8/us-18-Orange-Tsai-Breaking-Parser-Logic-Take-Your-Path-Normalization-Off-And-Pop-0days-Out-2.pdf
在这个演讲中,他展示了如何结合一条缺少尾斜杠的location指令与一条alias指令,来读取 Web 应用程序的源代码鲜为人知的是,它还可以与其他指令(例如proxy_pass)一起使用我们来分解一下究竟发生了什么事情,以及为什么它能起作用。
location /api {proxy_pass http://apiserver/v1/; }如果一个 Nginx 服务器运行能在 server 访问的以下配置,则可以假定访问者只能访问
http://apiserver/v1/下的路径http://server/api/user -> http://apiserver/v1//user当请求http://server/api/user时,Nginx 将首先规范化 URL。
然后,它会查看前缀 /api是否与 URL 匹配,本例中是匹配的然后,服务器从 URL 中删除该前缀,保留/user路径再将此路径添加到proxy_passURL 中,从而得到最终 URL http://apiserver/v1//user。
请注意,这个 URL 中存在双斜杠,因为 location 指令不以单斜杠结尾,并且proxy_pass URL 路径以单斜杠结尾大多数 Web 服务器会将http://apiserver/v1//user。
标准化为http://apiserver/v1/user,这意味着即使配置错误,所有内容仍将按预期运行,并且可能不会引起注意请求http://server/api../可以利用这种错误配置,这将导致 Nginx 请求 URL 。
http://apiserver/v1/../,其标准化为http://apiserver/这可能产生的影响取决于利用这种错误配置可以达到的效果例如,这可能导致 Apache 服务器状态通过 URL http://server/api../server-status
公开,或者可能让不希望公开访问的路径可访问Nginx 服务器配置错误的一个迹象是,当 URL 中的一个斜杠被删除时,服务器仍会返回相同的响应例如,如果http://server/api/user和http://server/apiuser
返回相同的响应,则服务器可能容易受到攻击这将导致发送以下请求:http://server/api/user -> http://apiserver/v1//userhttp://server/apiuser -> http://apiserver/v1/user。
3不安全的变量使用一些框架、脚本和 Nginx 配置会不安全地使用 Nginx 存储的变量这可能会导致诸如 XSS、绕过 HttpOnly 保护、信息泄露,甚至在某些情况下的 RCE 之类的问题 SCRIPT_NAME。
像下面这样的配置:location~ \.php$ {include fastcgi_params;fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name
;fastcgi_pass127.0.0.1:9000; }主要问题是 Nginx 会将所有 URL 发送到以.php结尾的 PHP 解释器,即使该文件在磁盘上不存在这是 Nginx 创建的“陷阱和常见错误”文档中提到的,在许多 Nginx 配置中都常见的错误。
https://www.nginx.com/resources/wiki/start/topics/tutorials/config_pitfalls/#passing-uncontrolled-requests-to-php?fileGuid=xVX6hcx8WXCYPVGd
如果这个 PHP 脚本试图基于SCRIPT_NAME定义一个基本 URL,则将发生 XSS