命令执行漏洞利用条件:
- 应用调用执行系统命令的函数
- 将用户输入作为系统命令的参数拼接到了命令行中
- 没有对用户输入进行过滤或过滤不严
漏洞分类:
- 代码过滤不严
- 系统漏洞:bash破壳漏洞
- 调用的第三方组件存在代码执行漏洞:
WordPress用来处理图片的ImageMagick组件
JAVA中的命令执行漏洞(struts2/ElasticsearchGroovy)
ThinkPHP命令执行漏洞
命令执行绕过技巧:
- 使用通配符
- 连接符
- 未初始化的bash变量
命令执行函数
- system():将字符串当做OS命令执行,自带输出功能
<?php
if(isset($_GET['cmd'])){
echo "<pre>";
system($_GET['cmd']);
}
?>//?cmd=ipconfig
- exec():将字符串当做OS命令执行,需要输出执行结构,输出内容有限
<?php
if(isset($_GET['cmd'])){
echo "<pre>";
print exec($_GET['cmd']);
}
?>//?cmd=ipconfig
- shell_exec():将字符串当做OS命令执行,需要输出执行结构
<?php
if(isset($_GET['cmd'])){
print shell_exec($_GET['cmd']);
}
?>//?cmd=ipconfig
- passthru()
<?php
if(isset($_GET['cmd'])){
passthru($_GET['cmd']);
}
?>//?cmd=ipconfig
- popen(),返回文件指针
<?php
if(isset($_GET['cmd'])){
$cmd=$_GET['cmd'];
popen($cmd,'r');
}
?>//?cmd=ipconfig >>1.txt
- `反引号
<?php
if(isset($_GET['cmd'])){
print `$_GET['cmd']`;
}
?>//?cmd=ipconfig
漏洞危害
- 继承web服务器程序权限(web 用户权限),去执行系统命令
- 继承web服务器权限,读写文件
- 反弹shell
- 控制整个网站
- 控制整个服务器
防御方法
- 尽量少使用可执行系统命令的函数,并用disable_functions禁用
- 在进入命令执行的函数或方法之前,对参数进行过滤
- 参数的值尽量使用引号包裹,并在拼接前调用addslashes转义