Nginx漏洞
简介
Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,在BSD-like 协议下发行。其特点是占有内存少,并发能力强,事实上nginx的并发能力在同类型的网页服务器中表现较好,中国大陆使用nginx网站用户有:百度、京东、新浪、网易、腾讯、淘宝等。
前置申明
本博客所有内容均为作者的个人学习笔记记录,作者也是小白一枚,如果有什么地方写的不对或者对您带来影响欢迎底部留言或者点击右下角的图标与我联系吧
本博客的所有Security 大类下的文章只能作为
如果喜欢我的文章欢迎各位大佬点击右下角的订阅图标开启浏览器推送吧,这样你只要不清除浏览器缓存就能第一时间收到我的更新通知啦(如果你的网络如果能上Google就用Chrome浏览器订阅,如果不能推荐用微软的Edge浏览器,目前正在寻找解决办法,订阅成功后会有一条提示成功,如果未收到表示网络限制原因未订阅成功)
中华人民共和国网络安全法(2017年6月1日起施行) 第二十二条任何个人和组织不得从事入侵他人网络、干扰他人网络正常功能、窃取网络数据等危害网络安全的活动;不得提供从事入侵网络、干扰网络正常功能、窃取网络数据等危害网络安全活动的工具和制作方法;不得为他人实施危害网络安全的活动提供技术支持、广告、推广、支付结算等帮助。 第三十八条任何个人和组织不得窃取或者以其他非法方式获取公民个人信息,不得出售或者非法向他人提供公民个人信息 第六十三条违反本法规定,给他人造成损害的,依法承担民事责任 第六十四条违反本法规定,构成犯罪的,依法追究刑事责任 中华人民共和国刑法(285286) 第二百八十五条违反国家规定,侵入国家事务、国防建设、尖端科学技术领域的计算机信息系统的处三年以下有期徒刑或者拘役 第二百八十六条违反国家规定,对计算机信息系统功能进行删除、修改、增加、干扰,造成计算机信息系统不能正常运行,后果严重的,处五年以下有期徒刑或者拘役:后果特别严重的,处五年以上有期徒刑。违反国家规定,对计算机信息系统中存储、处理或者传输的数据和应用程序进行删除、修改、增加的操作,后果严重的,依照前款的规定处罚 中华人民共和国刑法修正案7(第九条) 在刑法第二百八十五条中增加两款作为第二款、第三款:“违反国家规定,侵入前款规定以外的计算机信息系统或者采用其他技术手段,获取该计算机信息系统中存储、处理或者传输的数据,或者对该计算机信息系统实施非法控制,情节严重的,处三年以下有期徒刑或者拘役,并处或者单处罚金:情节特别严重的,处三年以上七年以下有期徒刑,并处罚金提供专门用于侵入、非法控制计算机信息系统的程序、或者明知他人实施侵入、非法控制计算机信息系统的违法犯罪行为而为其提供程序、工具,情节严依照前款的规定处罚。
简介
Nginx
Nginx (engine x) 是一个高性能的HTTP和反向代理web服务器,同时也提供了IMAP/POP3/SMTP服务。Nginx是由伊戈尔·赛索耶夫为俄罗斯访问量第二的Rambler.ru站点(俄文:Рамблер)开发的,第一个公开版本0.1.0发布于2004年10月4日。
代理
引用:https://blog.csdn.net/qq_39429962/article/details/83618746
代理技术在nginx中占着举足轻重的地位,这是由于nginx中许多应用都是从代理服务中衍生出来的,如负载均衡。
扩充(流量转发工具): lcx
netcat
EW
NPS
FRP
正向代理
代理也被称为正向代理,是一个位于客户端和目标服务器之间的代理服务器,客户端将发送的请求和制定的目标服务器都提交给代理服务器,然后代理服务器向目标服务器发起请求,并将获得的结果返回给客户端的过程,就上通过代理上 Google
流程如下图:
反向代理
相对于代理服务,反向代理的对象就是服务器,即代理服务代理的时服务器而不是客户端,它的作用现在是代替服务器接受请求,而不在像正向代理那样代理客户端。就像 ping baidu.com
过程图如下:
练习
文件名逻辑漏洞
Nginx 文件名逻辑漏洞:nginx/CVE-2013-4547
启动
影响版本:Nginx 0.8.41~1.4.3 / 1.5.0~1.5.7
1 | # 进入vulhub |
前置说明
这个漏洞其实和代码执行没有太大关系,其主要原因是错误地解析了请求的 URI ,错误地获取到用户请求的文件名,导致出现权限绕过、代码执行的连带影响。
举个例子,比如, Nginx 匹配到 php 结尾的请求,就发送给 fastcgi 进行解析,常见的写法如下
1 | Location ~ \.php$ { |
正常情况下(关闭 pathinfo 的情况下),只有 .php 后缀的文件才会被发送给 fastcgi解析。
而存在CVE-2013-4547的情况下,我们请求1.gif[0×20][0×00].php,这个 URI 可以匹配上正则 .php$,可以进入这个 Location块;但进入后, Nginx却错误地认为请求的文件是1.gif[0x20],就设置其为 SCRIPT FILENAME的值发送给 fastcgi。fastcgi根据 SCRIPT FILENAME 的值进行解析,最后造成了解析漏洞,所以,我们只需要上传一个空格结尾的文件,即可使PHP解析。
再举个例子,比如很多网站限制了允许访问后台的IP
1 | location /admin/ { |
我们可以请求如下 URI: /test[0x20]/../admin/index.php ,这个URI不会匹配上location后面的/ admin/,也就绕过了其中的 IP 验证;但最后请求的是 /test[0x20]/../admin/index.php 文件,也就是 /admin/index.php ,成功访问到后台。(这个前提是需要有一个目录叫 test 这是 Linux 系统的特点,如果有一个不存在的目录,则即使跳转到上一层,也会报文件不存在的错误, Windows下没有这个限制)
复现
上传
访问
访问的时候如果 BurpSuite 没有截到包,可以修改 gif->gix 然后在 BurpSuite 中再改回来
防御方法:升级 Nginx 版本
越界读取缓存漏洞
Nginx 越界读取缓存漏洞: nginx/CVE-2017-7529
启动
1 | # 进入vulhub |
漏洞说明
- Nginx 在反向代理站点的时候,通常会将一些文件进行缓存,特别是静态文件。缓存的部分存储在文件中,每个缓存文件包括“文件头”+“HTTP返回包头”+“HTTP返回包体”。如果二次请求命中了该缓存文件,则Nginx会直接将该文件中的“HTTP返回包体”返回给用户
- 如果我的请求中包含 Range 头,Ngnx将会根据我指定的 start和 end 位置,返回指定长度的内容。而如果我构造了两个负的位置,如(-600 -9223372036854774591),将可能读取到负位置的数据。如果这次请求又命中了缓存文件,则可能就可以读取到缓存文件中位于“HTTP返回包体前的“文件头”、“HTTP返回包头”等内容
- 影响版本:Nginx version 0.5.6 -1.13.2
复现
cur 是常用的命令行工具,用来请求 Web 服务器。它的名字就是客户端 (client) 的 URL 工具的意思。
curl用法:https://www.ruanyifeng.com/blog/2019/09/curl-reference.html
1 | python3 /Users/ada/Desktop/CVE-2017-7529.py http://www.security.ada:8080/ |
1 | #!/usr/bin/env python |
设置了 range 域后返回的信息:可以看到服务器的一些信息,在这个模拟环境中还不能看岀信息的价值,但在某些重要生产环境中,被代理服务器的信息泄露是很严重的漏洞
可见,越界读取到了位于 “HTTP返回包体” 前的 “文件头”、“HTTP返回包头” 等内容