基本定义 #
命令执行漏洞是指攻击者可以随意执行系统命令,分为远程代码执行和系统命令执行两类。
原理 #
程序应用有时需要调用一些执行系统命令的函数,如PHP:
system() //执行外部程序,并且显示输出 exec() //执行一个外部程序 shell_exec() //通过 shell 环境执行命令,并且将完整的输出以字符串的方式返回 passthru() //执行外部程序并且显示原始输出 pcntl_exec() //在当前进程空间执行指定程序 popen() //打开进程文件指针 proc_open() //执行一个命令,并且打开用来输入/输出的文件指针
当用户能控制这些函数中的参数时,就可以将恶意系统命
令拼接到正常命令中,从而造成命令执行攻击。
两个条件
- 用户能够控制的函数输入
- 存在可以执行代码或者系统命令的危险函数
命令执行漏洞产生的原因
由于开发人员编写源码时,没有针对代码中可执行的特殊函数入口做过滤,导致客户端可以提交恶意构造语句,并提交服务端执行 命令注入攻击中, Web服务器没有过滤类似system、eval和exec等函数,是该漏洞攻击成功的主要原因。
命令执行漏洞带来的危害
继承Web服务程序的权限去执行系统命令(任意代码)或读写文件 反弹shell 控制整个网站甚至控制服务器 进一步内网渗透 等等
列子 #
<?php $test = $_GET['cmd']; system($test); ?>
payload:?cmd=whoami
这样即可执行系统命令
修复方式 #
1、尽量不要使用以上的代码/命令执行函数
2、使用disable_funtion()禁用以上函数
3、过滤所有能当作命令分隔符使用的字符