關於如何更好的隱藏webshell的幾點建議:
1,盡量藏在那些程序員和管理員都不會經常光顧的目錄中 比如:第三方工具的一些插件目錄,主題目錄,編輯器的圖片目錄以及一些臨時目錄
2,目錄層級越深越好,平時網站不出問題的話,一般四五級目錄很少會被注意到
3,webshell的名字千萬不要太扎眼,比如:hack.php,sb.php,x.php這樣的名字嚴禁出現……,在給webshell起名的時候盡量跟當前目錄的,其他文件的名字相似度高一點,這樣相對容易混淆視聽,比如:目錄中有個叫new.php的文件,那你就起個news.php
4,webshell里面盡量不要用類似eval這種過於敏感的特征,因為awk一句話就能查出來,除了eval,還有,比如:exec,system,passthru,shell_exec,assert這些函數都最好不要用,你可以嘗試寫個自定義函數,不僅能在一定程度上延長webshell的存活時間也加大了管理員的查找難度,也可以躲避一些功能比較簡陋waf查殺,此外,我們也可以使用一些類似:call_user_func,call_user_func_array,諸如此類的回調函數特性來構造我們的webshell,即偽造正常的函數調用
5,靠譜的方法就是直接把一句話插到正常的網站腳本文件里面,當然最好是在一個不起眼的地方,比如:函數庫文件,配置文件里面等等,以及那些不需要經常改動的文件……
6,再或者拿到權限以后,把網站日志中的所有關於webshell的訪問記錄和滲透時造成的一些網站報錯記錄全部刪除
7,嘗試利用靜態文件隱藏一句話,然后用.htaccess 規則進行解析
8,把webshell的屬性時間改為和同目錄文件相同的時間戳,比如linux中的touch就是非常好的工具
9,當然,如果在拿到服務器權限以后,也可以自己寫個腳本每隔一段時間檢測下自己的webshell是否還存在,不存在就創建
10,利用php.ini 配置文件隱藏webshell,把webshell的路徑加入到配置文件中
11,如果是大馬的話,盡量把里面的一些注釋和作者信息全部都去掉,比如intitle字段中的版本信息等等,用任何大馬之前最好先好好的讀幾遍代碼,把里面的shell箱子地址全部去掉推薦用開源的大馬,然后自己拿過來仔細修改,記住,我們的webshell盡量不要用加密,因為加密並不能很好的解決waf問題,還有,大馬中一般都會有個pass或者password字符,建議把這些敏感字段全部換成別的,因為利用這樣的字符基本一句話就能定位到
12,養成一個好習慣,為了防止權限很快丟失,最好再同時上傳幾個備用webshell,注意,每個webshell的路徑和名字千萬不要都一樣更不要在同一個目錄下,多跳幾層,記住,確定shell正常訪問就可以了,不用再去嘗試訪問看看解析是否正常,因為這樣就會在日志中留下記錄,容易被查到
13,在有權限的情況,看看管理員是否寫的有動態webshell監測腳本,務必把腳本找出來,crontab一般都能看見了
14,上傳個精心構造的圖片馬,然后再到另一個不起眼的正常的網站腳本文件中去包含這個圖片馬
15,如果有可能的話,還是審計下目標的代碼,然后想辦法在正常的代碼中構造執行我們自己的webshell,即在原生代碼中執行webshell
16,我這里只是根據個人經驗總結了一些比較常用的,當然,肯定還有更多更好更高級的關於webshell的隱藏方法,歡迎大家一起交流,待續……
//后期會補充一些例子到這里。。
轉載自:https://3xp10it.cc/webshell/2016/07/28/%E9%9A%90%E8%97%8Fwebshell/