什么是RCE漏洞?
RCE漏洞分为远程命令或远程代码执行漏洞,用户通过该漏洞可以对web服务器,或操作系统进行渗透。简单来讲就是通过受害者的web应用(通常是网站)上面的RCE漏洞,我们可以利用这个漏洞拿到服务器的权限或者操纵系统的权限。
漏洞原理和形成
远程代码执行漏洞,该漏洞形成原因实在程序员编写应用程序文件的时候对请求函数参数过滤不严谨或无过滤,导致用户可以通过请求将代码注入到应用程序的文件中执行。类似于SQL注入,SQL针对的是服务器,而代码执行是将代码注入到应用文件由服务器来执行。
其中eval函数就是会将字符串当作服务器的代码来执行的。
这个是最最最简单的源码
<?php
if (isset($_REQUEST['123'])){
$test=$_REQUEST['123'];
eval ($test);
}
?>
意思是定义一个参数赋值到test变量,使用eval来执行这个变量的值
我通过get请求将123赋值为phpinfo()
代码执行成功
这就是形成一个代码执行漏洞的原因,相关的函数还有很多可以使用,我在此简单列出几个,其余不在深究。。。
assert()
preg_replace()
call_user_func()
$a=* & $b=* $a($b)
远程命令执行漏洞同代码注入大同小异,只不过是执行的OS命令,当应用需要调用一些外部程序的时候就会用到一些系统命令的函数。在调用这些函数的时候,用户将恶意输入作为系统命令来执行,或者拼接命令来执行,并且在没有过滤输入的情况下就会产生命令注入。
路由器上面有一个web网站的管理页面,这个页面一般都会给用户提供ping命令便于来检测IP是否畅通,但是由于未作输入过滤导致可以进行拼接注入。
这个一个靶场,同样有者ping的测试应用
我们输入IP试一试
执行成功。。。不要纠结乱码。。。
那么攻击者不可能说只能查看IP的情况,我们尝试执行其他的命令。
执行失败,大概意思就是说,我是ping命令,你让我ping whoami吗,没有这个地址。
这个时候就会进行命令拼接.
命令执行成功,但是不是每一个网站都会给你ping的命令,就算是有ping命令,别人都会做强大的过滤,所以说这个漏洞很少,但是很强。
windows下同时执行多条命令语法格式命令格式含义
cmd1 & cmd2 先执行cmd1和cmd2,无论command1执行是否成功
cmd1 && cmd2 先执行cmdl,只有cmd1执行成功才执cmd2
cmd1 | | cmd2 先后执行cmd1和cmd2,只有cmd1执行失败才执行cmd2
cmd1 | cmd2 将cmd1的执行结果传递给cmd2
在有就是相关的函数造成的命令注入漏洞。
system()函数
这是造成system函数漏洞的代码
<?php
if($_GET['cmd']){
$test=$_GET['cmd'];
system($test);
}
?>
访问
传参
命令执行成功
相关函数我也列出几个,网上基本都是一找一大把的。
exec() 必须要输出结果利用 print & echo
shell_exec() 必须要输出结果 print & echo