web漏洞之命令注入

漏洞概述

  • 使用脚本语言开发程序过程中,脚本语言开发十分快速、简介,方便,但是也伴随着一些问题。比如说速度慢,或者无法接触系统底层,如果我们开发的应用,特别是企业级的一些应用需要去调用一些外部程序(系统命令或者exe等可执行文件)。当应用需要调用一些外部程序时就会用到一些系统命令数。
  • 命令注入与远程代码执行(RCE)不一样。它们的区别是 ,通过RCE,执行的是代码 ;而在命令注入的时 ,执行的是一个(OS)命令。

漏洞成因

  • 将用户输入作为拼接

  • 没有对用户输入过滤


漏洞危害

  • 继承Web服务器程序(web用户)权限,去执行系统命令

  • 继承Web服务器权限,读写文件

  • 反弹Shell

  • 控制整个网站

  • 控制整个服务器


漏洞原理

PHP中能够执行系统命令的函数

system()


if(isset($_GET['cmd'])){
    system($_GET['cmd']);
}else{
    echo "????";
}
?>

exec()


if(isset($_GET['cmd'])){
    print exec($_GET['cmd']);
}else{
    echo "????";
}
?>

passthru()


if(isset($_GET['cmd'])){
    pssthru($_GET['cmd']);
}else{
    echo "????";
}
?>

popen()


if(isset($_GET['cmd'])){
    $cms=$_GET['cmd'].">>popen.txt";
    popen($cmd,'r');
}else{
    echo "????";
}
?>

反引号()


if(isset($_GET['cmd'])){
    $cmd=$_GET['cmd'];
    print `$cmd`;
}else{
    echo "????";
}
?>

漏洞挖掘

使用无害命令测试

windows

[命令] & [注入命令]
[命令] && [注入命令]
[命令] | [注入命令]
[命令] || [注入命令]

Linux

[命令] && [注入命令]
[命令] || [注入命令]
[命令] ; [注入命令]

漏洞利用

查看系统文件

?cmd=type c:\windows\system32\drivers\etc\hosts

显示当前路径

?cmd=pwd

写文件

?cmd=echo "" > C:phpstudy\www\shell.php

防御绕过

  • 大小写绕过
  • 双写绕过
  • 编码绕过

漏洞防御

  • 尽量减少命令执行函数的使用,并在disable_ functions中禁用用
  • 在进入命令执行的函数或方法之前,对参数进行过滤
  • 参数的值尽量使用引号包裹,并在拼接前调用addslashes 进行转义
  • 使用安全工具进行防范,如使用WAF,IDS,IPS等进行防御

你可能感兴趣的:(web漏洞,网络安全)