目录
一. 什么是远程代码执行?
远程代码执行-RCE
- RCE漏洞,可以让攻击者直接向后台服务器远程注入操作系统命令或者代码,从而控制后台系统。
- 远程代码执行:Remote Code Execute
同样的道理,因为需求设计,后台有时候也会把用户的输入作为代码的一部分进行执行,也就造成了远程代码执行漏洞。 不管是使用了代码执行的函数,还是使用了不安全的反序列化等等。
因此,如果需要给前端用户提供操作类的API接口,一定需要对接口输入的内容进行严格的判断,比如实施严格的白名单策略会是一个比较好的方法。
- 远程命令执行:Remote Command Execute
一般出现这种漏洞,是因为应用系统从设计上需要给用户提供指定的远程命令操作的接口。
比如我们常见的路由器、防火墙、入侵检测等设备的web管理界面上。
一般会给用户提供一个ping操作的web界面,用户从web界面输入目标IP,提交后,后台会对该IP地址进行一次ping测试,并返回测试结果。
如果设计者在完成该功能时,没有做严格的安全控制,则可能会导致攻击者通过该接口提交“意想不到”的命令,从而让后台进行执行,从而控制整个后台服务器。
现在很多的甲方企业都开始实施自动化运维,大量的系统操作会通过"自动化运维平台"进行操作。 在这种平台上往往会出现远程系统命令执行的漏洞,不信的话现在就可以找你们运维部的系统测试一下,会有意想不到的"收获"。
漏洞危害
- 获取服务器权限
- 获取敏感数据文件
- 写入恶意文件getshell
- 植入木马病毒勒索软件等
实际漏洞
- CVE-2021-3177 Python RCE漏洞
- CVE-2021-21972 VMWare RCE漏洞
- CVE-2021-25646 Apache Druid RCE漏洞
- CNVD-2020-46552 深信服EDR
- CNVD-2021-30101 网康下一代防火墙
二. PHP RCE涉及函数
命令command注入
函数 作用 system() 执行外部程序,并且显示输出。 exec() / shell_exec() 通过shell环境执行命令,并且将完整的输出以字符串的方式返回。 pcntl_eec() 在当前进程空间执行指定程序。 passthru() 执行外部程序并且显示原始输出。 popen() 打开进程文件指针。 proc_open() 执行一个命令,并且打开用来输入/输出的文件指针
代码code注入
函数 作用 eval() 把字符串code作为PHP代码执行。 assert() 检查一个断言是否为false。 preg_replace() 执行一个正则表达式的搜索和替换。 create_function() 创建一个匿名函数并且返回函数名创。 call_user_func() / call_user_func_array() 把第一个参数作为回调函数调用。 usort() / uasort() 使用用户自定义的比较函数对数组中的值进行排序并保持索引关联。
三. 靶场案例
Windows命令拼接符号
符号 含义 示例 && 左边的命令执行成功,右边的才执行。 ping 127.0.0.1 && echo 'hello' & 简单的拼接。 ping 1111 & echo ’hello‘ | 上一条命令的输出,作为下一条命令参数。 netstat -ano | findstr 3306
|| 左边的命令执行失败,右边的才执行。 ping baidu.com || ping baidu.net
Linux命令拼接符号
符号 含义 示例 ; 没有任何逻辑关系的连接符 && 左边的命令执行成功,右边的才执行 cp 1.txt 2.txt && cat 2.txt | 上一条命令的输出,作为下一条命令的参数。 netstat -an | grep 3306 || 左边的命令执行失败,右边的才执行。 cat 3.txt || cat 2.txt & 任务后台执行,与nohup命令功能差不多 java -jar test.jar > log.txt &
pikachu靶场案例
- 127.0.0.1 & ipconfig
- 127.0.0.1 & whoami
- phpinfo();
- system(ipconfig);
DVWA
- Low
- Medium
- High
- impossable
四. CTF案例
CTFhub-Web-RCE-eval执行
进行蚁剑连接,连接密码为cmd,发现为highlight_file,在根目录下找到flag
CTFhub-Web-RCE-命令注入
首先进行尝试127.0.0.1
然后输入127.0.0.1;cat 162832600664095.php 查看该php文件的内容
ctrl+U查询源代码,获得flag
CTFhub-Web-RCE-过滤cat
除了cat以外 我们还可以尝试less
CTFhub-Web-RCE-过滤空格
CTFhub-Web-RCE-过滤目录分隔符
127.0.0.1;cd flag_is_here;cat flag_14512394428704.php
CTFhub-Web-RCE-过滤运算符
五. 防御措施
- 开源框架,升级到最新版本
- 尽量不要使用命令执行的函数
- 如果必须使用,需要做白名单处理
- 用正则表达式对用户输入的内容进行处理
- 使用WAF