今天继续给大家介绍渗透测试相关知识,本文主要内容是RCE漏洞简介。
免责声明:
本文所介绍的内容仅做学习交流使用,严禁利用文中技术进行非法行为,否则造成一切严重后果自负!
再次强调:严禁对未授权设备进行渗透测试!
一、RCE漏洞简介与危害
所谓RCE漏洞,即Remote Code/Command Execution,远程代码执行和远程命令执行漏洞。
在很多Web应用中,开发人员会使用一些函数,这些函数以一些字符串作为输入,功能是将输入的字符串当作代码或者命令来进行执行。当用户可以控制这些函数的输入时,就产生了RCE漏洞。
RCE漏洞是非常严重的安全漏洞,一旦出现,就意味着攻击者可以获取服务器的命令执行权限,从而对服务器安全造成极大的影响。
二、代码执行和命令执行区别
代码执行和命令执行的区别在于一个是执行的脚本代码,一个是执行的系统命令。以PHP代码为例,常见的命令执行函数有:
system()、exec()、shell_exec()、pcntl_exec()、popen()、proc_popen()、passthru()等。
我们可以使用system()函数执行Windows系统下的dir命令,代码如下所示:
<?php
system("dir");
?>
该页面访问结果如下所示:
我们可以使用system()函数执行Windows系统下的ping命令,代码如下所示:
<?php
system("ping www.baidu.com");
?>
该页面访问结果如下所示:
尽管在上述页面中,浏览器出现了乱码,但是我们可以使用火狐浏览器修改编码格式,就可以得到正常的回显了,如下所示:
常见的代码执行函数有:
eval()、assert()、preg_replace()、create_function()、array_map()、call_user_func()、call_user_func_array()、array_filter()、uasort()等。
我们可以使用eval()函数执行PHP代码中的phpinfo()函数,代码如下所示:
<?php
eval("phpinfo();");
?>
该页面访问结果如下所示:
我们可以使用eval()函数执行PHP代码中的echo命令,代码如下所示:
<?php
eval("echo 123;");
?>
该页面访问结果如下所示:
从以上示例中可以看出,代码执行执行的PHP代码而命令执行执行的是Windows系统命令(如果服务器运行在Linux操作系统上,执行的就是Linux系统命令)。漏洞究竟是代码执行还是命令执行,是根据网站源代码中使用的函数决定的。我们不能用命令执行漏洞来执行PHP代码,因为system()等函数不能将输入的字符串转换为PHP代码来执行。但是,我们可以通过另一种手段,间接的将代码执行漏洞来替换成命令执行漏洞,代码如下所示:
<?php
eval("system('dir');");
?>
该页面访问结果如下所示:
可以看出,我们在eval()函数中增添了system()函数,就可以将本来的代码执行转化为命令执行,从而执行Windows脚本代码了。
三、RCE漏洞产生与防护
尽管上述内容说明了代码执行和命令执行的区别,但是其实由于用户不能够控制这些RCE函数中的输入,因此在上述示例中RCE漏洞并不存在。RCE漏洞产生的必要条件有两个,一是存在RCE函数,二是用户可以通过不同的手段,控制RCE函数中的全部或者部分字段。
实际上,除了在源码中由于开发人员不慎产生的RCE漏洞外,有些RCE漏洞还产生于中间件平台以及其他环境中,这样的RCE漏洞,并不是代码配置产生的漏洞,而是由于环境产生的漏洞。例如,Tomcat、Apache Struts2、Redis等平台产生的RCE漏洞等。
针对网站开发引起的RCE漏洞,要慎重使用相关RCE函数,如果业务环境中不需要使用RCE函数,则应该在PHP配置中禁用这些函数。如果业务环境必须要使用RCE函数,那么就应该对用户输入的部分进行过滤,避免用户输入恶意命令或代码。此外,使用WAF也可以在一定程度上防止RCE漏洞。
针对中间件和框架产生的RCE漏洞,则要求网站管理员多关注框架或环境版本迭代,以及安全事件。当中间件或框架产生漏洞后,要及时打官方补丁,对当前系统环境进行升级,如果漏洞已经产生,但是还没有发布相应的官方补丁,则可以使用WAF,针对exp针对性的进行防护。
原创不易,转载请说明出处:https://blog.csdn.net/weixin_40228200