资讯专栏INFORMATION COLUMN

Nginx中间件渗透总结

Taonce / 3109人阅读

摘要:正反向代理对外都是透明的。在协议中,与是用两个分隔的,浏览器就是根据这两个使用进行测试来取出内容并显示出来。

简介

Nginx(engine x)是一个高性能的HTTP和反向代理web服务器,同时也提供了IMAP/POP3/SMTP服务器Nginx是由伊戈尔开发,因为它的稳定性、丰富的功能集、实例配置文件和低系统资源的消耗而闻名。

Nginx是一款轻量级的Web服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,在BSD-like协议下发行,其特点是占用内存少,并发能力强,事实上nginx的并发能力确实在同类型的网页服务器中表现较好

中国大陆使用 nginx 的网站用户有:百度、京东、新浪、网易、腾讯、淘宝

Nginx适用于高并发、可以做负载均衡服务器和HTTP服务器、具有代码特点、可以作为代理服务器

【一>所有资源获取<一】
1、200份很多已经买不到的绝版电子书
2、30G安全大厂内部的视频资料
3、100份src文档
4、常见安全面试题
5、ctf大赛经典题目解析
6、全套工具包

Nginx可以用作以下

  1. 静态服务器

首先,Nginx是一个HTTP服务器,可以将服务器上的静态文件(HTML、图片等)通过HTTP协议展现给客户端

Nginx是一款轻量级的Webserver/反向代理server以及电子邮件代理server。并在一个BSD-like协议下发行,特点是占用内存小,并发能力强,Nginx相较于Apache/lighttpd具有占用内存少,稳定性高等优势,并且依靠并发能力强,丰富的模块库以及友好灵活的配置而闻名

Nginx本身也是一个静态资源的服务器当只有静态资源的时候,就可以使用Nginx来做服务器,同时现在也很流行动静分离,可以通过Nginx来实现动静分离是让动态网站里的动态网页根据一定规则把不变的资源和经常变的资源区分开来动静资源做好了拆分以后,我们可以根据静态资源的特点将其作为缓存操作,这就是网站静态化处理的核心思路

  1. 反向代理服务器

客户端本来可以直接通过HTTP协议访问某网站应用服务器,网站管理员可以在中间加上一个Nginx,客户端请求Nginx,Nginx请求应用服务器,然后将结果返回客户端,此时Nginx就是反向代理服务器

用户A向反向代理的命名空间(name-space)中的内容发送普通请求,接着反向代理将推断向何处(原始server)转交请求,并将获得的内容返回给client。而用户A始终认为他访问的是原始server而不是nginx。因为防火墙作用,仅仅同意nginx进出,防火墙和反向代理的共同作用保护了院子内的资源—原始server

如果服务器可以直接HTTP访问,为什么要在中间加一个反向代理,下面的负载均衡、虚拟主机等都基于反向代理实现,当然反向代理的功能也不仅仅是这些

  1. 负载均衡

当网站访问量非常大,网站站长开心赚钱的同时,也摊上事了。因为网站越来越慢,一台服务器已经不够用了。于是将同一个应用部署在多台服务器上,将大量用户的请求分配给多台机器处理。同时带来的好处是,其中一台服务器万一挂了,只要还有其他服务器正常运行,就不会影响用户使用Nginx可以通过反向代理来实现负载均衡

负载均衡的意思就是分摊到多个操作单元上进行执行,例如Web服务器、FTP服务器、企业关键应用服务器和其它关键任务服务器等等,从而共同完成工作任务,简单而言就是当有2台或以上服务器时,根据规则随机的将请求分发到指定的服务器上处理,负载均衡一般都需要同时配置反向代理,通过反向代理跳转到负载均衡,而Nginx目前支持自带3种负载均衡策略,还有2种常用的第三方策略

  1. 虚拟主机

有的网站访问量大,需要负载均衡。然而不是所有的网站都如此出色,有的网站由于访问量太小,需要节省成本,将多个网站部署在同一台服务器上

例如将www.aaa.com和www.bbb.com两个网站部署在同一台服务器上,两个域名解析到同一个IP地址,但是用户通过两个域名却可以打开两个完全不同的网站,互不影响,就像访问两个服务器一样,所以叫两个虚拟主机

  1. 正向代理

正向代理是一个位于用户A和原始server之间的代理server ,为了从原始server取得内容,用户A向代理server发送一个请求并指定目标(原始server)。然后代理server向原始server转交请求并将获得的内容返回给用户,用户必须进行一些特别的设置才能使用正向代理

用途:在防火墙内的局域网用户提供访问Internet的途径。还能够使用缓冲特性降低网络使用率

从安全角度讲:

正向代理同意用户通过它访问任意站点而且隐藏用户自身,因此你必须采取安全措施以确保仅为经过授权的用户提供服务。

正反向代理对外都是透明的。访问者并不知道自己访问的是一个代理。

  1. Nginx vs Apache

Nginx环境

Nginx渗透

文件解析漏洞

漏洞简介:

​ 对于任意文件名,在后面添加 /xxx.php(xxx为任意字符)后,即可将文件作为php解析

漏洞范围:

​ 该漏洞是nginx配置所导致,与版本无关。

漏洞复现:

1.jpg后面加上 /xxx.php ,会将 1.jpg 以PHP解析

注意下图中的访问链接

该漏洞是Nginx配置所导致,与Nginx版本无关,下面是常见的漏洞配置:

server { 	location ~ /.php$ { 		root /work/www/test; 		fastcgi_index index.php; 		fastcgi_param SCRIPT_FILENAME 	$document_root$fastcgi_script_name; 		include fastcgi_params; 	fastcgi_pass unix:/tmp/php-fpm.sock; 	} }

当攻击者访问 /1.jpg/xxx.php 时,Nginx将查看URL,看到它以 .php 结尾,并将路径传递给 PHP fastcgi 处理程序.Nginx传给php的路径为 C:/phpStrudy/WWW/1.jpg/xxx.php ,在phpinf中可以查看 _SERVER[“ORIG_SCRIPT_FILENAME”] 得到

PHP根据URL映射,在服务器上寻找xxx.php文件,但是xxx.php不存在,又由于 cgi.fix_pathinfo 默认是开启的,因此PHP会继续检查路径中存在的文件,并将多余的部分当作 PATH_INFO 。接着PHP在文件系统中找到.jpg文件,而后以PHP的形式执行.jpg的内容,并将 /xxx.php 存储在 PATH_INFO 后丢弃,因此我们在phpinfo中的$_SERVER[‘PATH_INFO’] 看到的值为空(no value),如果继续添加后缀则蠢顺势显示后缀

最后整理一下思路:cgi.fix_pathinfo

php的一个选项:cgi.fix_pathinfo,该选项默认开启,值为1,用于修理路径的

例如:当php遇到文件路径 /yxc.jpg/xxx.php/yxc.sec 时,若 /yxc.jpg/xxx.php/yxc.sec 不存在,则会去掉最后的 /yxc.sec ,然后判断 /yxc.jpg/xxx.php 是否存在,若存在则将 /yxc.jpg/xxx.php 当作文件 /yxc.jpg/xxx.php/yxc.sec ,若 /yxc.jpg/xxx.php 仍不存在,则继续去掉 xxx.php ,以此类推

修复建议:

  1. 配置cgi.fix_pathinfo(php.ini中)为0,并重启php-cgi程序

  2. 如果需要使用到cgi.fix_pathinfo这个特性(例如:wordpress),那么可以禁止上传目录的执行脚本权限或将上传存储的内容与网站分离,即站库分离

  3. 高版本PHP提供了security.limit_extensions 这个配置参数,设置 security.limit_extensions = .php

目录遍历

Nginx 的目录遍历与 Apache一样,属于配置方面的问题,错误的配置可导致目录遍历与源码泄露

先去www目录下随便新建一个文件夹,然后进行访问

修改 C:/phpstudy/nginx/conf/nginx.conf,在下面标示位置中添加 autoindex on ;

重启nginx,再次访问即可

修复建议:on改为off即可

空字节任意代码执行漏洞

影响版本:

​ nginx 0.5.*

​ nginx 0.6.*

​ nginx 0.7 <- 0.7.65

​ nginx 0.8 <- 0.8.37

Nginx在遇到%00空字节时与后端FastCGI处理不一致,导致可以在图片中嵌入PHP代码然后通过访问 xxx.jpg%00.php 来执行其中的代码

复现环境:

​ nginx 0.7.65+php 5.3.2

在nginx-0.7.65/html/目录下创建 1.jpg,内容为:

访问1.jpg,无法访问,所以在URL中输入 1.jpg…php

然后抓包,hex选项下,.的hex编码为2e,将第一个2e改为00

成功绕过

该漏洞不受 cgi.fix_pathinfo 影响,当其为0时,依然解析

高版本不存在该漏洞

CRLF注入漏洞

漏洞产生:

Nginx会将 $uri 进行编码,导致传入 %0a%0d 即可引入换行符,造成CRLF注入漏洞。

错误的配置文件原本的目的是为了让http的请求跳转到https上的,意思就是配置实现了强制跳转的功能,当用户访问nginx服务器时,由于此配置的存在会被强制跳转到以https协议访问之前访问的链接

  1. 配置中的 $url 是我们可以控制的,这样我们就可以在 $url 处填入CRLF ,然后对服务器进行访问实现头部注入

  2. 服务器会返回一个302跳转给用户

漏洞危害:

​ 劫持合法用户会话,利用管理员身份进行恶意操作,篡改页面内容、进一步渗透网站

​ 利用CRLF injection设置一个 SESSION ,造成一个 “会话固定漏洞”

原理:

​ CRLF是“回车 + 换行”(/r/n)的简称。在HTTP协议中,HTTP Header与HTTP Body是用两个CRLF分隔的,浏览器就是根据这两个CRLF(使用payload %0a%0d%0a%0d进行测试)来取出HTTP内容并显示出来。所以,一旦我们能够控制HTTP消息头中的字符,注入一些恶意的换行,这样我们就能注入一些会话Cookie(http://www.xx.com%0a%0d%0a%0dSet-cookie:JSPSESSID%3Dxxx)或者HTML代码(http://www.xx.com/?url=%0a%0d%0a%0d

CRLF + XSS 配合:

%0D%0A%0D%0A%3Cimg%20src=1%20onerror=alert(/xss/)%3E

使用旧版浏览器即可弹窗

CRLF深入:

攻击者操作:

  1. 攻击者打开一个网站,然后服务器会回复他一个session id。比如SID=abcdefg。Attack把这个id记下了

  2. Attack给被攻击者发送一个电子邮件,他假装抽奖或者推销,诱导攻击者点击链接:http://unsafe/?SID=abcdefg,SID后面是Attack自己的session id

  3. 被攻击者被吸引后,点击了http://unsafe/?SID=abcdefg,像往常一样,输入了自己的账号和口令从而登录到银行网站

  4. 因为服务器的session id不改变,现在被攻击者点击后,他就拥有了被攻击者的身份,就可以为所欲为了

文件名逻辑漏洞(CVE-2013-4547)

影响版本:

​ nginx 0.8.41 - 1.4.3 / 1.5.0 - 1.5.7

​ 复现时需要文件名的后面存在空格,而windows是不允许存在此类文件的,因此复现采用vulhub

漏洞复现:

cd vulhub/nginx/CVE-2013-4547

docker-compose build

docker-compose up -d

docker ps

上传1.jpg

内容为:

抓包在后缀名后面加个空格,成功绕过

修改名称为 2.jpg…php ,在hex编码下将jpg后面的两个2e改为20,00,

成功绕过

原理:

修复建议:

​ 升级版本

整数溢出 CVE-2017-7529

漏洞描述:

​ 在nginx的range filter 中存在整数溢出漏洞,可以通过带有特殊构造的range的HTTP头的恶意请求引发这个整数溢出漏洞,并导致信息泄露。

影响版本:

​ Nginx 0.5.6 - 1.13.2

危害程度:

​ 低

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/123671.html

相关文章

  • [ 应急响应 ]服务器(电脑)受到攻击该如何处理?(一)

    摘要:计算机网络安全事件应急响应对象是指针对计算机或网络所存储传输处理的信息的安全事件主体可能来自自然界系统自身故障组织内部或外部的人计算机病毒计算机病毒或蠕虫蠕虫等。 目录 一、应急响应是 安全相关岗位的 必问知识点 我们根据客户的描述,进行判断: 二、那么什么应急响应呢 ??? 计算机网络安全...

    不知名网友 评论0 收藏0
  • 使用docker快速搭建Permeate渗透测试系统实践

    摘要:一背景笔者最近在做一场安全培训,其中需要搭建一套安全测试环境在挑选渗透测试系统的时候发现渗透测试系统比较满足需求,便选择了此系统为了简化这个步骤,笔者将系统直接封装到了当中,同时编写了一套启动文档,希望到时候给学员和读者参考。 一、背景 笔者最近在做一场Web安全培训,其中需要搭建一套安全测试环境;在挑选渗透测试系统的时候发现permeate渗透测试系统比较满足需求,便选择了此系统;为...

    scq000 评论0 收藏0
  • 宝塔Linux面板专业版:收费版Nginx防火墙设置教程

    摘要:宝塔面板专业版的防火墙试用了一下,发现功能还是很丰富的,使用起来也很简单,这篇文章就来说说收费版的防火墙如何设置,算是给初次设置的同学一个参考。直接进入到系统防火墙中。这个专业版的防火墙使用了一圈,突然觉得免费版本的防火墙真香。宝塔Linux面板专业版的nginx防火墙试用了一下,发现功能还是很丰富的,使用起来也很简单,这篇文章就来说说收费版的Nginx防火墙如何设置,算是给初次设置的同学一...

    phpmatt 评论0 收藏0
  • ECS+nginx+wordpress一手搭建完毕

    摘要:先来一段吐槽好朋友校招进百度前端团队了我还在找工作好心塞但是蛮为他高兴的是我的问题技术面铺的太开了,没有深入的一项比较深入的也就是渗透,了吧但是渗透团队要求好高网易跪在了面绿盟进行中工资略低啊技能点大概是星满分星星渗透星星网络安全星,学习能 PS: 先来一段吐槽...好朋友校招进百度前端团队了..我还在找工作ing..好心塞.但是蛮为他高兴的. 是我的问题.技术面铺的太开了,没有深...

    ityouknow 评论0 收藏0
  • 利用nginx日志结合本地包含漏洞GetShell

    摘要:近日施耐德电气爆出的漏洞,首先得到了一个本地包含,在这里作为靶目标使用。配置文件中获得了错误日志的路径,且关闭了访问日志。利用思路整理那么我们可以利用错误日志来构造合法的代码,从而利用包含漏洞。了解何时会向错误日志写入内容。 0前言 在WEB渗透测试中尤其是PHP,经常会挖到LFI漏洞,想要GETSHELL,但无奈没有文件上传的途径,这里给一个思路,抛砖引玉。 近日施耐德电气爆出的漏洞...

    bitkylin 评论0 收藏0

发表评论

0条评论

Taonce

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<