什么是命令注入?
在开发者开发程序过程中,一些高级应用可能需要调用一些外部程序:比如命令行获取信息、exe可执行文件等等。调用的时候会用到一些系统命令函数,通过这些函数,可以在其中注入一些恶意代码
命令注入漏洞产生原因
- 用户输入作为拼接
- 没有足够的安全过滤
危害
- 继承web服务器程序执行系统命令
- 继承web服务器权限,读写文件
- 反弹shell,即服务器主动联系攻击方
- 控制网站
- 控制服务器
相关函数(PHP)
- system() / passthru()函数:可以将字符串参数直接作为系统命令来执行:
<?php
if($_GET['cmd']){
$str=$_GET['cmd'];
system($str);
}
?>
<?php
if($_GET['cmd']){
$str=$_GET['cmd'];
passthru($str);
}
?>
可以这样传递参数,比如:
?cmd=ipconfig
- exec()函数:效果和system()函数一致,但是返回的结果有限,且不打印输出。
- shell_exec()函数:效果和system()一致,但是没有打印输出。
<?php
if($_GET['cmd']){
$str=$_GET['cmd'];
print exec($str);
}
?>
<?php
if($_GET['cmd']){
$str=$_GET['cmd'];
print shell_exec($str);
}
?>
- popen()效果和system()一样,但是不返回结果,返回结果指针
<?php
if($_GET['cmd']