RCE
RCE(remote code execute):远程命令执行或者代码执行,我们平时说的rce,比如thinkPHP的rce漏洞,即算代码注入漏洞,也算rce漏洞,因为渗透的最终情况可以实现执行命令或者是代码都属于RCE,例如代码执行、文件包含、反序列化、命令执行,甚至是写文件Getshell都可以属于RCE。
命令执行的原理
命令执行漏洞指的是网站的应用程序有些需要调用执行系统命令,当用户能控制这些函数中的参数时,就可以将恶意系统命令拼接到正常命令中,从而造成命令执行攻击。
命令执行的成因
1、代码层过滤不严格:商业应用需要执行命令,商业应用的一些核心代码可能封住在二进制文件当中,在web应用中通过system函数调用。
system("/bin/program --arg $arg")
2、调用第三方组件存在的代码执行漏洞:如wordpress,可以选择imagemagick这个常用的图片处理组件,处理用户上传图片时造成命令执行;还有JAVA中 struts2/elasticsearch groovy等。
命令执行漏洞分类
1、代码层过滤不严
2、系统的漏洞造成命令注入
3、调用的第三方组件存在代码执行漏洞
常见的函数
- system():将字符串作为操作系统命令执行,并返回命令执行结果。
- exec():将字符串作为操作系统命令执行,但只返回执行结果的最后一行(无回显)。
- shell_exec():将字符串作为操作系统命令执行,可以获取命令的完整输出。
- passthru():将字符串作为操作系统命令执行,不返回任何结果,但将命令的运行结果输出到标准输出设备上。
- popen():popen函数用于打开一个指向进程的管道,该进程由command参数指定的 shell 命令启动。
- proc_open():proc_open()函数在功能上与popen()类似,但它提供了更多的控制,可以传递更复杂的参数数组,并可以双向传递数据。
- pcntl_exec():用于替换当前进程映像,即执行一个新程序并覆盖当前进程的内存映像。
- 反引号 ```: 将反引号内的字符串解析为操作系统命令。
利用条件
1、应用调用执行系统命令的函数
2、将用户输入作为系统命令的参数拼接到了命令行中
3、没有对用户输入进行过滤或过滤不严
Windows常用的命令和特殊字符
常用的命令
1、dir----查看文件目录
2、ipconfig----查看Windows的IP地址
3、arp -a----查看ARP缓存表
4、calc----在命令行打开计算器
5、regedit----打开注册表
6、netstat -ano----查看开放的端口信息
特殊字符
1、| 直接执行后面的语句
2、|| 前面出错执行后面的,前面为假
3、& 前面的语句为假则直接执行后面的,前面可真可假
4、&& 前面的语句为假则直接出错,后面的也不执行,前面只能为真
Linux常用的命令和特殊字符
常用的命令
1、cat /etc/passwd----查看
2、passwd文件 id----查看该用户的ID号
3、groups----查看用户所属的组
4、cat /etc/group----查看组信息
5、whoami----查看当前用户
6、pwd----查看当前路径
7、uname -a----查看主机信息
8、cat /etc/issue----查看主机的配置信息
9、netstat -pantu----查看开放的端口信息
10、netstat -nr----查看路由信息
特殊字符
1、; 前面的执行完执行后面的
2、| 管道符,显示后面的执行结果
3、|| 当前面的执行出错时执行后面的
4、& 前面的语句为假则直接执行后面的,前面可真可假
5、&& 前面的语句为假则直接出错,后面的也不执行,前面只能为真
命令执行getshell
1、直接获取getshell
?cmd=echo " <?php @eval($_REQUEST[123]);?> " > D:\phpstudy\PHPTutorial\WWW\webshell.php
2、显示当前路径
例如可以提交参数 ?cmd=cd 来查看当前路径
3、读文件
例如:?cmd=type c:\windows\system32\drivers\etc\hosts,来查看系统hosts文件。
4、写文件
例如可以提交参数 ?cmd=echo "<?php phpinfo();?>" > D:\shell.php
命令执行危害
继承web服务程序权限去执行系统命令或读写文件
反弹shell
控制整个网站甚至控制服务器
进一步内网渗透
命令执行防御
1、禁用部分系统函数:高危系统函数可直接禁用,从根本上避免程序中命令执行类漏洞的出现。
禁用方法:打开PHP安装目录,找到php.ini,查找到disable_functions,添加需禁用的函数名,如:phpinfo()、eval()、passthru()、exec()、system()、chroot()、chgrp()、chown()等
2、严格过滤关键字符(管道命令)
3、严格限制允许的参数类型
4、使用escapeshellarg函数来处理命令函数
5、使用safe_mode_exec_dir指定可执行文件的路径(php.ini)