WEB 容器安全
1 定义及原理
Web服务器:提供Web服务器的软件或主机,即Web服务器软件或带有Web服务器软件的计算机。Web中间件:在系统软件和应用程序软件之间提供连接的软件。 Web中间件是用于提供Web应用程序软件和系统软件之间连接的软件的一般术语。
Web容器:一个容器是一种中间件,它为其中的应用程序组件提供了一个环境,可以直接与容器中的环境变量进行交互,而无需注意其他系统问题。 Web容器用于为其中的应用程序组件提供环境。

2 Apache 安全
2.1 apache 配置错误
2.1.1 原理
Addhandler应用程序/X-HTTPD-PHP .phpAddhandler为相应的文件扩展程序指定处理程序。上面的配置意味着将用扩展名.php的文件交给X-HTTPD-PHP程序进行处理。
Apache认识到文件扩展名是从背面到正面的。如果您遇到未识别的扩展名,则将继续识别它。如果您遇到第一个识别的扩展名作为文件的扩展,则将遇到第一个识别扩展。
2.1.2 配置
2.1.2.1 修改 conf 文件

2.1.2.2 创建 .htaccess

2.1.3 漏洞复现
在多个后缀的情况下,只要包含.php后缀的文件即将被识别为PHP文件,就不必成为最后一个后缀。使用此功能将创建一个可以绕过上传白名单的解析漏洞。环境运行后,请访问http://your-ip/uploadfiles/apache.php.jpeg,您会发现PHPINFO已执行,该文件被解析为PHP脚本。

2.2 apache 换行解析漏洞
漏洞编号:CVE-2017-15715受影响版本:Apache 2.4.10-2.4.29
利用:文件上传
脆弱性名称:断开列漏洞
2.2.1 原理
在其2.4.0〜2.4.29版本中存在解析漏洞。解析PHP时,将根据PHP后缀解析1.php \ x0a,从而绕过一些服务器安全策略。
2.2.2 漏洞复现
12
3
4
5
6
7
8
9
php
if(isset($ _文件['file'])){
$ name=basename($ _ post ['name']);
$ ext=pathinfo($ name,pathinfo_extension);
if(in_array($ ext,['php','php3','php4','php5','phtml','pht'])){
退出(“不良文件”);
}
move_uploaded_file($ _文件['file'] ['tmp_name'],/'。$ name);
}
在1.php后面插入A \ x0a(请注意,它不能为\ x0d \ x0a,它只能是\ x0a),并且不再拦截它:

当我访问/1.php%0a刚刚上传时,我发现它可以成功解析,但是该文件不是PHP后缀,表明目标中存在解析漏洞:

3 Nginx 安全
NGINX是高性能的HTTP和反向代理Web服务器,还提供IMAP/POP3/SMTP服务。中国大陆的NGINX网站的用户包括:Baidu,JD.com,Sina,NetEase,Tencent,ETC。
可以在大多数Unix和Linux上编译Nginx并运行,并且还有Windows端口。
3.1 nginx 配置错误
3.1.1 CRLF 注入
CRLF:是CR和LF,分别代表了托架的返回和换行线。 CR命令将打印头返回左侧。 LF命令让纸张前进。在HTTP消息中,线之间使用CRLF间隔。
一旦攻击者将恶意CRLF注入标题中的请求行或字段,他就可以注入一些标头字段或消息主体并将其输出在响应中,因此它也称为HTTP响应细分漏洞。
在NGINX中的配置文件中,有三个可以接受URL的变量:
$ URI
$ document_uri
$ request_uri
在:
$ URI-获取解码的请求路径
$ document_uri-获取解码的请求路径
$ request_uri-完整的URL没有解码
3.1.1.1 原理
NGINX将解码$ URI,导致%0A%0D传递以引入Newline字符,从而导致CRLF注入漏洞。错误配置文件的示例(原始目的是使HTTP请求跳到HTTPS):
1
2
3
地点/{
返回302 https://$ host $ uri;
}
3.1.1.2 漏洞复现
有效载荷:http://your-ip:8080/%0A%0A%0DSET-COOKIE:%20A=1,可以注入Set-Cookie标头。

3.1.2 目录穿越漏洞
NGINX配置别名(别名),如果忘记添加/,它将导致目录遍历漏洞。错误配置文件的示例(原始目的是允许用户访问/home/directory中的文件):
1
2
3
位置/文件{
别名/家庭/;
}
PAYLOLAL:http://your-ip:8081/FILES ./,成功前往根目录:

3.2 Nginx 越界读取缓存漏洞
漏洞编号:CVE-2017-7529受影响的版本:nginx 0.5.6-1.13.2
脆弱性危害:敏感信息泄漏
3.2.1 原理
3.2.1.1 HTTP Range
HTTP范围允许客户批量索取资源的一部分。如果服务器资源很大,则可以通过范围同时下载。如果访问资源时网络被中断,则可以在打破点后继续传输它。范围设置在HTTP请求标头中,该标题是多个字节范围规格(或后缀范围字节)的集合
例子
范围:字节=0-1024表示访问字节0至1024
范围:字节=500-600、601-999,-300表示访问三个块,即500至600字节,601至600字节,最后300个字节;

3.2.1.2 HTTP-Cache
NGINX可用作缓存Web应用程序服务器返回的内容。如果客户端请求的内容已被缓存,则可以直接返回缓存的内容而无需再次请求应用程序服务器。因此,可以减少应用程序服务器的负载,并可以提高服务响应性能。缓存文件内容:

3.2.1.3 原理分析
NGINX对范围的支持包括标头处理和车身处理,用于解析客户发送的范围标头和裁剪返回的请求数据返回给客户的身体ngx_http_range_header_filter_module负责处理标头数据
ngx_http_range_body_filter_module负责处理身体数据
分析过程:

NGX_HTTP_RANGE_PARSE函数中有这样的循环
该代码是将“ - ”两侧的数字分别分配到开始和结束变量。字符串指针P是字节=之后的内容。

在上面的代码中,有截止和切割的阈值,从字符串阅读时不允许启动或结束
因此,在这里您需要输入后缀=1的分支,因此请使用Rangage:字节=-XXX,即省略初始启动值的形式。
启动等于content_length减去端值,因此,如果传递的末端长于实际长度,则启动可能会成为负数。端的最终值将设置为content_length -1
通过上述设置后,此范围的总长度超过内容长度。 NGINX检查范围的总长度,但注意到大小的值是多部分的全局范围长度。
因此,范围还不够。至少需要两个范围。长度的总和溢出到负数,因此可以绕过总长度的检查。
for循环是一个无条件的循环,其退出条件为=,并且支持start1 -end1,start2 -end2的形式的范围的值构造byt=-x,-y。对于两个大端值,一个大和一个小,您只需要控制第一个端值很小,而下一个端值很大,因此Star t值和尺寸值都为负。将起始值控制到合适的位置,然后您可以成功读取缓存文件的头部。
3.2.2 漏洞复现

可以看出,读取位于“ HTTP返回软件包主体”前面的“文件标头”和“ HTTP返回软件包头”。
3.3 Nginx 文件名逻辑漏洞
漏洞编号:CVE-2013-4547脆弱性危害:文件上传,旁路目录限制
受影响的版本:0.8.41〜1.4.3/1.5.0〜1.5.7
3.3.1 原理
非法角色空间和截止\ 0导致有限状态机器解析uris时,危害是允许攻击者通过非编码空间绕过后缀限制。例如,假设服务器上有一个文件:file.aaa [space],请注意文件名的最后一个字符是一个空间。然后,您可以访问:http://127.0.0.1/file.aaa \ 0.BBB,让Nginx考虑文件file.aaa的后缀为.bbb。
3.3.2 漏洞复现
3.3.2.1 解析漏洞
NGINX与.php结尾的请求匹配,并将其发送到FastCGI进行解析。常用的写作方法如下:1
2
3
4
5
6
7
8
位置〜\ .php $ {
包括fastcgi_params;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param script_filename/var/www/html $ fastcgi_script_name;
fastcgi_param document_root/var/www/html;
}
在正常情况下(当关闭Pathinfo时),只有.php后缀的文件将被发送到FastCGI进行解析。
对于CVE-2013-4547,我们请求1.gif [0x20] [0x00] .php,它可以匹配常规\ .php $并输入此位置块;但是输入后,nginx错误地认为所请求的文件为1.gif [0x20],因此我们将其设置为script_filename并将其发送到fastcgi。
FASTCGI根据Script_filename的值解析,该值最终导致分辨率漏洞。
因此,我们只需要上传一个以空格结尾的文件来使PHP解析。
剥削有两个条件:
nginx 0.8.41〜1.4.3/1.5.0〜1.5.7
php-fpm.conf中的security.limit_extensions是空的,这意味着任何后缀名称都可以解析为php
启动Vulhub环境后,请访问http://your-ip:8080/查看上传页面。
这种环境是黑名单验证。我们无法使用PHP后缀上传,需要使用CVE-2013-4547。让我们上传一个1.GIF,请注意背后的空间:

访问http://your-ip:8080/uploadfiles/1.gif [0x20] [0x00] .php,您会发现PHP已被解析:

请注意,[0x20]是一个空间,[0x00]为\ 0,这两个字符都不需要编码。
3.3.2.2 绕过目录限制
例如,许多网站限制了允许访问背景的IP:1
2
3
4
位置/admin/{
允许127.0.0.1;
否认一切;
}
通过请求以下uri:/test [0x20 ]/./admin/index.php,此URI将不匹配/admin/admin/after位置,该位置绕过其中的IP验证
但是最后一个请求是/test [0x20 ]/./admin/index.php文件,即/admin/index.php,它成功访问了背景。
(这个前提是有一个名为“测试”的目录:这是Linux系统的功能。如果目录不存在,即使它跳到上一层,则将报告不存在的错误。在Windows下没有此类限制)
3.4 Nginx 解析漏洞
漏洞危害:文件上传情感版本:
nginx 1.x最新版本
PHP 7.x最新版本
3.4.1 原理
NGINX将.php结尾的文件移交给FastCGI进行处理。为此,可以构建http://ip/uploadfiles/test.png/.php,其中test.png是我们上传包含PHP代码的图像文件。当FastCGI正在处理.php文件时,发现该文件不存在。此时,CGI.FIX_PATHINFO=1在php.ini配置文件中扮演角色。此配置用于修复路径。如果当前路径不存在,则使用上路。因此,将文件移交给fastcgi的文件在此处为/test.png。
最重要的一点是security.limit_extensions配置项目php-fpm.conf限制了fastcgi解析文件的类型(即,指定的文件类型为代码解析)。允许FastCGI解析此项目为空时,将其解析为.png为代码。
3.4.2 漏洞复现
此漏洞与NGINX和PHP版本无关,并且是由不正确的用户配置引起的解析漏洞。请访问http://your-ip/uploadfiles/nginx.png和http://your-ip/uploadfiles/nginx.png/.php以查看效果。
4 Tomcat 安全
Tomcat是Apache Software Foundation的Jakarta项目的核心项目,该项目由Apache,Sun和其他许多公司和个人开发。Tomcat Server是一款免费的开源Web应用程序服务器,该服务器是一款轻巧的应用程序服务器,可广泛用于中小型系统以及并发访问用户。
实际上,tomcat是Apache服务器的扩展程序,但是它在运行时独立运行,因此,当您运行tomcat时,它实际上是作为一个与Apache独立的过程单独运行的。
4.1 Tomcat 配置错误
漏洞编号:CVE-2017-12615情感版本:apahce tomcat 7.0.0-7.0.79
漏洞描述:当Tomcat在Windows主机上运行并启用HTTP PUT请求方法时,攻击者可以通过精心构造的攻击请求上传包含任意代码的JSP文件,将包含任意代码的JSP文件上传。之后,JSP文件中的代码将由服务器执行。
Tomcat漏洞的性质配置了可写的(ReadOnly=false),这使我们将文件写入服务器:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
servlet
Servlet-NameDefault/Servlet-Name
servlet-classorg.apache.catalina.servlets.defaultservlet/servlet-class
init-param
param-namedebug/param-name
param-value0/param-value
/init-param
init-param
param-namelistings/param-name
param-valuefalse/param-value
/init-param
init-param
param-nemereadonly/param-name
param-valuefalse/param-value
/init-param
开始启动1/启动加载
/servlet
尽管tomcat具有某些文件后缀(无法直接编写JSP),但我们使用了一些文件系统