社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  NGINX

Web中间件漏洞总结之Nginx漏洞

船山信安 • 4 月前 • 93 次点击  

解析漏洞

漏洞简介:
对于任意文件名,在后面加上/任意文件名.php后该文件就会以php格式进行解析,是用户配置不当造成的
漏洞复现:
在网站根目录新建test.jpg,里面写入phpinfo(),打开试一下

试一试Nginx的解析漏洞,在后面加上/x.php

对于低版本的php能够直接解析成功,高版本php因为引入了security.limit_extensions,限制了可执行文件的后缀,默认只允许执行.php文件,这里来看看两个与Nginx解析漏洞相关的核心配置
核心配置:cgi.fix_pathinfo
该选项位于配置文件php.ini中,默认值为1,表示开启。当php遇到文件路径/aaa.xxx/bbb.yyy/ccc.zzz时,若/aaa.xxx/bbb.yyy/ccc.zzz不存在,则会去掉最后的/ccc.zzz,然后判断/aaa.xxx/bbb.yyy是否存在,若存在,则把/aaa.xxx/bbb.yyy当做文件/aaa.xxx/bbb.yyy/ccc.zzz解析,若/aaa.xxx/bbb.yyy仍不存在,则继续去掉/bbb.yyy,以此类推。若是关闭该选项,访问 http://192.168.43.13/test/test.jpg/x.php 只会返回找不到文件。但关闭该选项很可能会导致一些其他错误,所以一般是开启的
核心配置:security.limit_extensions
在我的配置文件中,它位于/etc/php-fpm.d/www.conf
这个选项开始是被注释了的也就是默认只允许执行php文件,将;去掉,可以在后面添加其它后缀,比如添加.jpg这样.jpg文件也能够以php来执行,修改了后需要service php-fpm restart重启php

执行效果

或者将.php删除,也就是security.limit_extensions后面留空,这样就是允许任意格式的文件执行

执行效果

修复方法:
1.将php.ini文件中的cgi.fix_pathinfo的值设为0
2.将security.limit_ectensions后面的值设为.php

目录遍历

漏洞简介:
和Apache目录遍历一样属于配置错误,可导致源码泄露与目录遍历
漏洞复现:
访问test目录

核心配置:
修改/usr/local/nginx/conf/nginx.conf,在如下图位置添加autoindex on,默认是没有这一行的

然后访问test目录,成功实现目录遍历

修复方法:
autoindex on改为autoindex off

目录穿越

漏洞简介:
Nginx在配置别名(Alias)的时候,如果忘记加/,将造成一个目录穿越漏洞
配置不当:
在如下配置中设置目录别名时/test配置为/home/的别名,那么当我们访问/test../时,nginx实际处理的路径时/home/../,从而实现了穿越目录

漏洞复现:

修复方法:
Nginx配置文件中的/test改为/test/(闭合)

CRLF注入

漏洞简介:
我对这个漏洞也不是特别了解,所以我还是看看基本定义和利用吧

CRLF是“回车+换行”(\r\n)的简称,其十六进制编码分别为0x0d0x0a。在HTTP协议中,HTTP headerHTTP  Body是用两个CRLF分隔的,浏览器就是根据这两个CRLF来取出HTTP内容并显示出来。所以,一旦我们能够控制HTTP消息头中的字符,注入一些恶意的换行,这样我们就能注入一些会话Cookie或者HTML代码。CRLF漏洞常出现在LocationSet-cookie消息头中。
漏洞复现:
(1)通过CRLF注入构造会话固定漏洞
固定会话漏洞:
如果注册前有一个session id为某个值,注册后发现自己的session id还是为这个值就极有可能存在固定会话漏洞
下面举一个固定会话漏洞利用的例子:
假如有一个网站,你注册了一个账号,注册之前抓包PHPSESSID = ghtwf01,注册成功后发现PHPSESSID依然为ghtwf01,此时是普通用户权限
这个时候就可以社工管理员点击某个链接,比如http://xxx/?PHPSESSID=ghtwf01,这个时候你的账户权限就会变为管理员权限(类似于CSRF)
CRLF注入怎么构造会话固定漏洞呢?
构造链接:http://10.23.88.137%0aSet-Cookie:sessionid=ghtwf01

给管理员点击即可
(2)通过CRLF注入消息头引发反射型XSS漏洞
构造链接:http://10.23.88.137%0d%0a%0d%0a


修复方法:
只需过滤掉\r 、\n之类的换行符就可

参考链接

https://blog.csdn.net/qq_32434307/article/details/79480036
https://article.itxueyuan.com/1DoQ31
https://blog.csdn.net/liuhuaijin/article/details/77449579
https://www.cnblogs.com/0x4D75/p/9790281.html

来源:https://xz.aliyun.com/ 感谢【ghtwf01 

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/166298
 
93 次点击