批量拿WordPress 网站Sehll
有两种不同的策略可用于解决问题。垂直策略和水平策略是处理不同访问类型黑客攻击的相反方法。 垂直黑客攻击涉及攻击特定单位或一组单位,例如,按主题或域名查找一组 WordPress 网站并尝试以某种方式影响它们。

首先,你需要找到网站。那么在哪里寻找呢?我在另一篇文章中介绍了一种方法——通过反向 DNS 搜索网页链接。今天我们将探讨另一种方法——解析目录中的链接。因此,我们首先要查找目录。当然还有其他方法,例如,通过 Shodan 搜索 WordPress 网站。
我还想指出,这种垂直攻击方式并非最佳选择。扩大范围,覆盖所有找到的网站,避免使用 CMS 进行拦截,这才是明智之举。但本文将重点关注 WordPress。我们
以 europages[.]com 目录为例,该目录包含 B2B 公司。尝试解析其数据库,然后检查是否存在易受攻击的 WordPress 网站。
接下来,我们来研究一下网站结构并做笔记:
- 目录按照以下结构定位:/en/cpp/A(字母)→/en/cpp/A/1(字母+数字)——最多 100 张名片页。
- 名片页面上有一个访问网站按钮。
- 如果你访问一个不存在号码的页面会发生什么?会显示一片空白的名片。
- 需要解析的文本位于<a href="和.html之间。
我们用 Golang 写了一个脚本。第一阶段,我们解析“links-business cards”
下载地址
https://down.scripthub.cc/drive/s/OAo0x361cOsJjnRO4zVvsz3shKFmht
- 在常量中,我们声明主链接以及将保存结果的文件的名称。
- 打开 parsed_links.txt 文件进行进一步的工作。
- 我们从字母表中的字母开始循环。
- 我们为当前字母和页面形成一个 URL。
- 我们发送 HTTP 请求并读取响应。
- 我们使用正则表达式来查找链接。
- 我们检查链接;如果没有链接,我们就转到下一个字母,中断迭代。
- 我们将找到的链接写入文件。
- 我们延迟移动到下一页,在下一个请求之前添加暂停以避免过载。
我们获得了超过 1.1 万个内部链接。
我们仔细研究了页面,发现在指向网站的链接之前,有一个带有特定类的元素——<a`class`="btn btn--subtle btn--md website-button">。该脚本无需使用 Goroutine 即可运行,尽管使用 Goroutine 可以加快速度。不过,我会选择一种策略,通过在请求之间添加延迟来最大限度地降低阻塞风险
下载地址
https://down.scripthub.cc/drive/s/u0YJii0eBJ2lgn4p9lYSBeqRzWeoH9
- 我们声明一个正则表达式来获取干净的链接,并添加一个新的文本文件来存储这些链接。
- 编译正则表达式。
- 我们逐行阅读带有源链接的文件。
- 我们从链接中删除了 /en/(在之前的脚本中,在形成链接时出现了一个小错误,我们在这个脚本中修复了它)。
- 我们在请求之前随机延迟 1 到 3 秒。
- 我们向当前修改的链接发出请求并读取响应。
- 我们使用正则表达式搜索包含所需类的链接,并将其写入文件。我们记录整个过程。
我们得到了 10,900 个链接。接下来,我们需要检查其中有多少使用了 WordPress。手动检查只需打开页面源代码,并在文本搜索中输入“generator”。这将显示所使用的 CMS 及其版本。
为了自动化此过程,我将使用 WhatWeb 实用程序,它允许您确定网站使用的 CMS,本质上是 Wappalyzer 的免费类似工具。命令非常简单 - whatweb https://example.com。让我们转到 IDE 并编写一个脚本来自动化并加快检查速度。
下载地址
https://down.scripthub.cc/drive/s/i2ODXEEsUDsFGwVI1XDImpUpCuxaio
- 我们设置并行 goroutine 的数量。
- 我们连接互斥锁以确保正确写入文件。我们将使用两个互斥锁:一个用于记录成功的结果,另一个用于使用其他 CMS(或隐藏 WordPress)的网站。
- 我们创建一个信号量来限制 goroutine 的数量。
- 打开包含站点列表的文件。
- 创建一个等待组来等待所有 goroutine 完成。
- 逐行读取文件。锁定信号量。启动 Goroutine 检查站点,并在 Goroutine 完成后释放信号量。
- checkWebsite 函数检查网站是否使用 WordPress,并将结果写入相应的文件。该函数首先运行 whatweb 命令检查网站,然后分析命令输出中是否存在“WordPress”。如果找到,则认为该网站“良好”,否则“糟糕”。
- writeToFile 函数使用互斥锁将字符串写入指定文件以确保线程安全。
检查了 972 个网站后,我们发现有 347 个网站使用了 WordPress,占比 35.8%。难以置信!
接下来,我们将使用 wpscan 实用程序。wpscan 是一款高度专业的 WordPress 扫描工具。使用此实用程序分析网站时,我们将获取有关 WordPress 版本、已安装插件列表、用户、暴力破解准备情况以及配置文件的信息。该实用程序的底层几乎没有任何魔法,主要使用模糊测试,并且所有操作都可以手动重复。
例如,用户列表可以在 /wp-json/wp/v2/users 中找到。这是一个非常古老的漏洞,早在 2018 年就已被描述,在 Exploit DB 数据库中,它被列为 Google dork,GHDB-ID 为 4944。但它仍然有效——只需在 URL:/wp-json/wp/v2/users/ 中执行请求即可。大多数网站都会比我们先被黑客入侵,但有些网站可以通过 JSON“slug”字段查看文件本身,从而获取用户名。
或者,我们来看看 GHDB-ID 4039 中描述的一个更老的漏洞,它已经有近十年的历史了!我们在搜索中输入 inurl:wp-config.php。wp-config.php 文件包含敏感信息,包括数据库的名称、主机、用户名和密码。使用这些数据,您可以连接到数据库并获取用户名和密码哈希值。此外,该文件还包含密钥和盐的设置,WordPress 使用它们来确保用户会话的安全。据我所知,它们用于加密 Cookie 和其他会话数据。网站上会话数据的安全性取决于这些密钥。理论上,它们允许您伪造 Cookie,并通过使用 Cookie 无需密码即可访问帐户。但是,我不确定这是否属实。
要检测此类文件,您需要仔细研究 WordPress 组件并尝试所有选项来查找有趣的文件或目录。
一般来说,WordPress由一个核心+一组由第三方开发人员开发的插件和主题组成:
- 插件是为网站添加功能的扩展程序,例如联系表单、SEO 优化、安全性、社交媒体集成等等。例如,WooCommerce(用于创建在线商店)或 Yoast SEO(用于改进 SEO)就是一个插件示例。
- 主题是 WordPress 网站的视觉风格和设计。主题控制着网站的外观、布局、颜色、字体、图片和其他设计元素。每个主题都包含一组模板(PHP 文件)、样式 (CSS)、图片和其他资源。
插件和主题是最容易出错的地方,因为它们可以由任何开发人员开发。
让我们回到我们的扫描器。要启动它,请使用以下命令:
wpscan --url https://example.com --enumerate vp,vt,u,dbe --api-token API_TOKEN --random-user-agent --plugins-detection combined --force --ignore-main-redirect
更多关于这些标志的信息:
- --url - 指定要扫描的目标 URL。
- --enumerate — 指定应枚举哪些元素:
- - vp — 搜索有漏洞的插件。
- - vt - 搜索易受攻击的话题。
- - u — 搜索 WordPress 用户。
- - dbe - 搜索 WordPress 数据库中的漏洞。
- --api-token — 要获取完整的日志和漏洞的即时消息,您需要一个 API 令牌。您可以在 WPScan 官方网站获取。每日密钥提供 25 次免费扫描,但该网站会将令牌发送到临时邮箱,因此您可以获取数十个密钥,也可以付费使用以获取更多信息。
- --random-user-agent——发送 HTTP 请求时使用随机用户代理。
- --plugins-detection — 设置插件检测方法。**mixed** 选项同时使用被动方法(站点代码分析)和主动方法(端点扫描)。
- --force——强制扫描,忽略警告。
- --ignore-main-redirect——忽略主 URL 重定向。
WPScan 支持多线程扫描。我们可以编写一个脚本,将结果保存到文本文件中,并为每个站点创建一个单独的目录。请注意,一次扫描的输出可能需要一些时间
下载地址
https://down.scripthub.cc/drive/s/ePRMotZhKsUVJSkJZCSK72CRy5Okak
sanitizeDirName 函数会替换不适合文件名的字符。除此之外,该代码与用于检查 CMS 的代码类似。
您很快就会发现,许多发现的 CVE 都需要授权。这不一定非得是具有管理员权限的帐户,但无论如何,都会出现一个问题:如何访问该帐户?答案很简单——使用暴力攻击!
对 WordPress 进行暴力攻击的特殊之处在于,它通常不是通过 Web 表单进行,而是通过 XML-RPC 协议进行。要检查特定资源是否支持 XML-RPC,您需要向https://example.com/xmlrpc.php发出请求。XML
-RPC 是一种允许您与 WordPress 网站远程交互的协议。通过 XML-RPC,您可以发送请求来执行各种操作,包括登录。XML-RPC 使用 XML 格式交换数据,并通过 HTTP POST 请求发送。
该技术的独特之处在于,通常通过网页进行的暴力破解会检查登录名和密码的组合,限制登录尝试次数并根据 IP 地址进行拦截,同时还依赖于登录页面的可用性。而通过 XML-RPC 进行的暴力破解则利用协议一次性发送多个请求的功能,可以绕过登录尝试次数的限制,并且大多数网站默认启用该功能(如果管理员未禁用),因此更难检测。
因此,需要提醒您,可以通过 /wp-json/wp/v2/users/ 访问用户列表。Slug 是系统中的用户名。
对于暴力破解,您将需要一本可以在 GitHub 上找到的字典:
- SecLists/Passwords/Honeypot-Captures/Sucuri-Top-Wordpress-Passwords.txt
- wpxmlrpcbrute/wordlists/1000-most-common-passwords.txt
- rockyou.txt
输入命令:
wpscan --url https://example.com --passwords /path/to/passwords.txt --usernames admin --xmlrpc
其中我们指定用户名、带有密码的文件路径,默认攻击类型是 xmlrpc
让我们来看看几个 CVE 及其工作原理。
横向攻击的原理是搜索漏洞,然后搜索易受攻击的网站,并利用之前发现的漏洞直接攻击它们。
我们先从 CVE-2024-27956 开始。这是一个高危漏洞,无需授权,因此首先我们将尝试弄清楚它的出现原因以及其工作原理,然后我们将尝试利用实际资源,因为这个漏洞可能已经引起了其他研究人员的关注。该
漏洞的本质与“wp-automatic”插件中的 SQL 注入可能性有关。该插件旨在自动在网站上发布内容。安装统计数据通常在官方插件目录中提供,但该插件是付费的,我找不到使用它的网站数量数据。不过,其中一个网站显示该插件的购买量超过 4 万次。安装量低于 5 万次的插件通常存在更多漏洞,因为它们不在 WordPress 漏洞赏金计划的范围内。
我们发现了一个用 Python 编写的漏洞利用代码:GitHub - diego-tella/CVE-2024-27956-RCE:CVE-2024-27956 中的 SQL 注入 PoC。
该漏洞是由于 wp-automatic 插件中 csv.php 脚本的服务器输入验证不足造成的,导致任意 SQL 代码执行。该代码使用 b'\0' 值(零字节),绕过了原始授权检查。服务器不会检查用户是否有权执行请求,而是依赖于哈希值,而哈希值在本例中与用户及其会话无关。makeRequest 函数向服务器发出请求,注入 SQL 有效载荷。第一次调用该脚本时,它会将新用户“eviladmin”添加到 wp_users 表;第二次调用时,它会在 wp_usermeta 表中插入一条记录,授予“eviladmin”用户管理员角色。
我们检查脚本本身是否存在“书签”。请注意,在第一个请求之后,会检查“DATE”是否不在response.text中;这可能是一个相当薄弱的环节,通过响应代码进行检查可能更有意义,尽管这种检查可能是最正确的。此外,哈希值可能无效,但我没有在脚本中发现任何明显的“书签”,而且看起来一切正常。
我们搜索网站。在GitHub上一些较旧的PoC CVE中,你可以找到搜索引擎的dork,并了解如何为其他CVE编写它们。我们为Fofa编写了一个dork。如果我们讨论的是插件中的漏洞,那么模板将如下所示:body="/wp-content/plugins/PLUGIN_NAME"。我们替换我们的插件,得到body="/wp-content/plugins/wp-automatic"。
我们按照GitHub上的说明,检查目标,很快就发现漏洞利用是有效的。
我们检查了网站,发现那里的情况稍微复杂一些。我不会详述细节,但服务器确实有一些保护措施。不过,我们可以肯定地说,该漏洞有效。
另一个与 SQL 注入相关的插件高危漏洞是 CVE-2024-1071。该漏洞允许访问数据库。我们在 GitHub 上找到了该漏洞,以了解其具体工作原理:CVE-2024-1071-SQL-Injection/CVE-2024-1071.py at main fa-rrel/CVE-2024-1071-SQL-Injection GitHubb。check_version函数
会检查插件版本,并仅针对存在漏洞的插件版本运行后续代码。然后调用 get_nonce。Nonce 是插件用来防御 CSRF 攻击的一次性安全令牌。该函数会尝试从页面 /index.php/register/ 的代码中获取
Nonce。get_directory_id 函数用于在存在漏洞的 Ultimate Member 插件中查找有效的目录 ID。此 ID 是成功利用 SQL 注入漏洞的必要条件。如果所有检查都通过,函数将输出成功结果和一条 Sqlmap 命令。
我们从存储库中获取 Fofa 的 dork。结果数量超过 9 万条。我们检查了 10 个站点。在脚本中,需要稍微修正 ascii_art 变量。在这 10 个站点中,只有 2 个站点检测到了漏洞。
让我们进一步考虑另一种类型的 CVE - CVE-2024-27954。这也是一个插件漏洞,同样存在于 wp-automatic 中。它允许您使用受信任的插件浏览目录,因此是一个 SSRF 漏洞。
我们找到了漏洞利用代码 — GitHub - Quantum-Hacker/CVE-2024-27954。我们发现它是为我在本文中提到的 Nuclie 编写的。该漏洞利用代码只需访问 URL:example.com/p=3232&wp_automatic=download&link=file:///etc/passwd,并检查我们是否真的获取到了所需的文件。据我所知,这类漏洞可以通过模糊测试检测出来。
如果您不想下载 Nuclie,可以用 Go 语言重写该脚本,代码如下:
下载地址
https://down.scripthub.cc/drive/s/hiq8mIFZEt9ANBAyzpVR4MCOiicsrd
接下来,我们访问 Fofa 并手动检查链接。在第一个链接上,我们被防火墙阻止,而在第二个链接上,我们可以看到文件。我们还可以打开目录中的其他文件。/etc/passwd 文件包含系统用户的信息。拥有指定 shell 的用户可以通过 SSH 访问系统。您还可以尝试通过将 SSH 密钥替换到 file:///home/user/.ssh/id_rsa 行中来获取 SSH 密钥。用户名可用于对 SSH/FTP 服务进行暴力破解,例如使用 Hydra。我在本文中对此进行了更详细的介绍。
并非所有 PoC 都如此明显。让我们以最新的 CVE-2024-50483 为例,并在 GitHub 上公开其 PoC:GitHub - RandomRobbieBF/CVE-2024-50483: Meetup <= 0.1 - 通过账户接管绕过身份验证。
该漏洞的本质是绕过身份验证并接管用户账户。问题在于,facebook_register() 函数允许绕过传统的身份验证机制。通常,要登录,用户必须提供有效的凭据(例如密码)来确认其身份。在本例中,该插件不会执行此操作,而是仅依赖电子邮件地址。
然而,问题在于,从漏洞描述中无法明确我们讨论的是哪个插件。我没有找到版本在 0.1 左右的 Meetup 插件。我们讨论的很可能是 Import Meetup Events 插件,尽管它的版本完全不同。但是,它似乎包含 facebook_register() 方法。让我们尝试搜索:body="wp-content/plugins/import-meetup-events"。有时可以在我们熟悉的 /wp-json/wp/v2/users 目录中找到电子邮件地址,但这并非总是如此。在其中一个网站上,使用 LinkedIn 的数据,有 99.9% 的概率可以找到管理员的电子邮件地址。让我们编写一个 CVE 漏洞利用程序:
下载地址
https://down.scripthub.cc/drive/s/FTPzt4EF4PzmTTPd46yqNsbkf4HQ3N
- 让我们形成一个包含所需参数的 POST 请求。
- 让我们发送一个 POST 请求。
- 让我们设置必要的标题。
- 让我们检查响应是否包含成功登录的确认。
我运行了脚本,但没有得到成功响应。最后,我甚至不确定这是否是插件的问题。我们先不谈这个 CVE 漏洞。
最后,我们来看看导致远程代码执行 (RCE) 的 CVE。CVE-2024-25600 是一个影响 Bricks Builder 插件的漏洞。它允许你注入并执行 PHP 代码。漏洞利用代码和详细说明可以在 GitHub 上找到:GitHub - K3ysTr0K3R/CVE-2024-25600-EXPLOIT:CVE-2024-25600 的 PoC 漏洞利用 - WordPress Bricks Builder 远程代码执行 (RCE)。
检查代码后,很明显插件 API 接受来自客户端的请求并在没有进行适当验证的情况下处理它们。此外,根据漏洞利用代码,可以通过加载到网页上的 JavaScript 获取用于防范 CSRF 攻击的随机数。fetch_nonce 函数就是用来做这件事的。该漏洞利用程序随后会打开一个shell并执行一条随机命令,并分析响应以确定漏洞利用是否成功。该脚本还实现了多线程编程技术,允许并发处理链接。
然而,问题来了:一旦获得了WordPress网站管理面板或运行WordPress网站的服务器的访问权限,究竟能执行哪些代码呢?
如果漏洞允许远程执行代码,则可能意味着可以打开shell。shell是远程计算机上的终端。例如,Metasploit 有一个针对旧漏洞 CVE-2019-8943 的漏洞利用程序。其代码可以在 Exploit-DB 网站上找到 - WordPress Core 5.0.0 - Crop-image Shell Upload (Metasploit) - PHP 远程漏洞利用程序。Fofa 的 dork 是 app="WordPress-5.0",该漏洞至今仍被数百个网站利用。通过 Metasploit 打开 shell,您可以访问服务器,然后在之前熟悉的 wp-config.php 文件中找到凭据,我们通过 Google dork 访问了该文件。然后,您可以对服务器执行所有可以执行的操作,例如提升权限。
但您不必为此使用 Metasploit。我们可以自己打开一个反向 shell。为此,请登录 WordPress 管理面板,转到“外观”部分并编辑模板,获取页面的 PHP 代码(例如,您可以获取 404 页面)。然后,您需要在那里添加反向 Shell 代码(您可以从以下网站获取:反向 Shell 速查表 | pentestmonkey),将 IP 地址替换为您要接受连接的计算机的地址。之后,您需要打开站点上的 404 页面,并在接收方计算机上运行 Netcat。
您还可以通过管理面板更改站点的外观,完全或部分替换它。
另一种后利用方法是设置 301 重定向。301 重定向是简单地重定向到另一个页面。用户点击搜索中的链接,但被重定向到另一个站点。这可以通过多种方式实现;有很多插件可以做到这一点,但最好的方法是更改 functions.php 文件中的模板代码。我们将在此 PHP 脚本中进行简单的伪装。搜索机器人可以通过用户代理 (User-Agent) 识别,而要向管理员隐藏脚本,您可以通过 IP 地址进行识别。这些标签可以扩展,从而延长隐藏代码的生命周期。PHP
下载地址
https://down.scripthub.cc/drive/s/258fMoN5OAyDCFxFjViONaLLkVkyKN
分享
你的反应是什么?






