------ 远程命令执行或者代码执行
,因为RCE这个词的滥用,RCE的范围比较广,只要渗透的最终情况可以实现执行命令或者是代码都属于RCE,例如代码执行、文件包含、反序列化、命令执行,甚至是写文件Getshell都可以属于RCE。
------ RCE漏洞,可以让攻击者直接向后台服务器远程注入操作系统命令或者代码,从而控制后台系统。
------ 应用有时需要调用一些执行系统命令的函数,比如php中的system、exec、shell_exec、passthru、popen等,当用户调用这些函数时,就可以将恶意系统命令拼接到正常命令中,从而造成命令执行攻击,这就是命令执行漏洞。
------ 命令执行产生原因:Web应用的脚本代码在执行命令的时候过滤不严,从而注入一段攻击者能够控制的代码,在服务器上执行恶意指令。
------ 命令执行漏洞是PHP应用程序中最常见的漏洞之一。
------ 命令执行漏洞:直接调用操作系统命令。可以执行系统或应用指令(如CMD命令或bash命令)的漏洞,PHP命令执行漏洞主要基于一些函数的参数过滤不严导致。
常见的命令执行函数:
返回值:返回命令执行结果的最后一行内容,失败时返回 false
echo exec($_POST["q"]);
?>
<?php
print exec($_POST["q"]);
?>
------ 该函数会把执行结果输出,并把输出结果的作为字符串返回。
------ 如果 PHP 运行在服务器模块中,system() 函数,还会尝试在每行输出完毕之后,自动刷新 web 服务器的输出缓存,如果执行失败则返回false。
highlight_file(__FILE__);
system('whoami');
?>
highlight_file() 函数以字符串形式返回 突出显示的代码,
成功返回true,否则返回false。
------ 执行外部程序并且显示原始输出。执行的 Unix 命令输出二进制数据, 并且需要直接传送到浏览器的时候, 需要用此函数。
highlight_file(__FILE__);
passthru('whoami');
?>
------ 通过 shell 执行命令并将完整的输出以字符串的方式返回。
highlight_file(__FILE__);
var_dump(shell_exec('ipconfig'));
?>
------ shell_exec() 函数实际上仅是反撇号 (`) 操作符的变体
echo `whoami`; ?>
这时候whoami会直接被当成命令来执行。
------ 可执行命令的函数: system(), exec(), shell_exec(), passthru() ,pcntl_exec(), popen(),proc_open(),反引号也可以执行命令
如
>D:/2.txt','r'); ?>
------ 一般出现这种漏洞,是因为应用系统从设计上需要给用户提供指定的远程命令操作的接口,比如我们常见的路由器、防火墙、入侵检测等设备的web管理界面上一般会给用户提供一个ping操作的web界面,用户从web界面输入目标IP,提交后,后台会对该IP地址进行一次ping测试,并返回测试结果。
------ 而如果设计者在完成该功能时,没有做严格的安全控制,则可能会导致攻击者通过该接口提交“意想不到”的命令,从而让后台进行执行,从而控制整个后台服务器。
商业应用的一些核心代码封装在二进制文件中,在web应用中通过system函数来调用。
bash破壳漏洞(CVE-2014-6271)
如WordPress中用来处理图片的ImageMagick组件
JAVA中的命令执行漏洞(struts2等)
ThinkPHP命令执行;
dir----查看文件目录
ipconfig----查看Windows的IP地址
arp -a----查看ARP缓存表
calc----在命令行打开计算器
regedit----打开注册表
netstat -ano----查看开放的端口信息
cat /etc/passwd----查看passwd文件
id----查看该用户的ID号
groups----查看用户所属的组
cat /etc/group----查看组信息
whoami----查看当前用户
pwd----查看当前路径
uname -a----查看主机信息
cat /etc/issue----查看主机的配置信息
netstat -pantu----查看开放的端口信息
netstat -nr----查看路由信息
------ 在操作系统中,"&、|、||"都可以作为命令连接符使用,用户通过浏览器提交 执行命令,由于服务器端没有针对执行函数做过滤,导致在没有指定绝对路径的情况下就执行命令。
------ 远程命令执行漏洞,指用户通过浏览器提交执行操作命令,由于服务器端,没有针对执行函数做过滤,就执行了恶意命令。
1&2用来分隔一个命令行中的多个命令。先运行第一个命令1,然后运行第二个命令2。
1&&2,先运行第一个命令1,只有在符号&&前面的命令1运行成功时才运行该符号后面的命令2。
1|2,命令行的管道符号,将命令1的输出立即作为命令2的输入,它把输入和输出重定向结合在一起。(直接执行了后面的语句)
1||2,先运行第一个命令,只有在符号||前面的命令1未能运行成功时,才运行符号||后面的命令2。
------ 攻击者直接继承web用户权限,可以在服务器上执行任意命令,危害特别大。
以下是几种常见的命令执行利用方式:
例如可以写入一句话木马:
?cmd=echo “” > D:\phpstudy\PHPTutorial\WWW\webshell.php
例如可以提交参数 ?cmd=cd 来查看当前路径。
例如:?cmd=type c:\windows\system32\drivers\etc\hosts,来查看系统hosts文件。
例如可以提交参数 ?cmd=echo “” > D:\shell.php