yvette2023-11-16文章来源:SecHub网络安全社区
Nginx+PHP的服务器中,如果PHP的配置里cgi.fix_pathinfo=1
那么就会产生一个漏洞。
当访问:http://192.168.1.101/phpinfo.jpg/1.php
经过解析会将phpinfo.jpg作为PHP文件来解析(虽然上传了一个jpg图片,但是nginx会把该图片当作php来解析)
利用该漏洞,攻击者可以将任意文件类型作为PHP文件解析,攻击者通常利用该漏洞来获取到一个WebShell。
漏洞利用:
假设某一服务器存在该漏洞,攻击者可以通过上传一张包含PHP后门代码的图片来获取WebShell,这是一种常见的攻击方式。
在Nginx配置文件中添加以下代码:
if ( $fastcgi_script_name ~ \..*\/.*php ) {
return 403;
}
这行代码的意思是当匹配到类似phpinfo.jpg/1.php的URL时,将返回403错误代码。
注意: 该漏洞主要出现在alias访问静态资源文件的时候。
# 例如,Nginx配置如下:
location /static {
alias /static/images/;
}
一个 web 应用程序允许用户通过 URL 访问静态文件,如下:http://sec.com/static/images/picture.jpg
攻击者使用目录遍历漏洞来访问应用程序中未授权的目录和文件,他们可通过以下 URL 访问静态文件:
http://www.example.com/static**../../../..**/etc/passwd
上述 URL 的作用是向上遍历至根目录,然后访问 /etc/passwd 文件,从而访问到包含用户凭据等敏感信息的文件。
/static…/表示/static/images/…,因为/static被alias替换成了/static/images/。
主要原因是攻击者可以通过加入…得到/static…/,使得实际请求地址变为/static/images/…然后进行非法访问。
修改也很简单,只需要在location的URI末尾加上/就可以,如下:
location /static**/** {
alias /static/images/;
}
分析:加上/后,URI需要/static/才能被alias替换,无法在里面加入…形成/static…/来访问。
攻击者在对目标服务器进行渗透攻击前,第一步就是信息收集阶段,通过各种手段获取到目标的信息,如获取目标服务器的系统版本、Web服务、中间件、数据库的类型及相关信息,这些信息将直接关系到攻击者下一步采取的攻击手段。
在请求的响应信息中显示Nginx版本信息
攻击者可能使用泄露的版本信息来确定该版本服务器有哪些安全漏洞,据此展开进一步的攻击。
server_tokens是nginx在ngx_http_core_module中提供的一个功能,可以用来隐藏nginx版本号信息。
给nginx新增一个安全相关的配置文件security.conf,文件内新增server_tokens off;
,再reload一下nginx服务即可。
[root@elk ~]# cat /etc/nginx/conf.d/security.conf
server_tokens off; ##隐藏nginx版本信息