OS命令注入
原理以及成因
程序员使用脚本语言开发的过程中需要去调用一些外部应用。当应用调用外部应用时就会用到一些系统命令的函数。应用在调用这些函数执行系统命令的时候,如果将用户的输入作为系统命令的参数拼接到命令行中,在没有过滤用户输入的情况下,就会造成命令执行漏洞。
漏洞危害
1.继承web服务器程序权限,去执行系统命令
2.继承web服务器权限,读写文件
3.反弹shell
4.控制整个网站
5.控制整个服务器
相关函数
system()
调用终端,执行命令并输出
测试代码如下:
<?php
if($_GET['cmd']){
$str=$_GET['cmd'];
system($str);
}
else{
echo '请通过get传参';
}
?>
exec()
类似system,也是调用终端执行命令,但需要print来输出结果,并且有长度限制
测试代码
<?php
if($_GET['cmd']){
$str=$_GET['cmd'];
print exec($str);
}
else{
echo '请通过get传参';
}
?>
shell_exec()同exec()
passthru()自带输出结果
popen()没有回显,但会执行指令
反引号
反引号[ `` ]里面的字符串也会被解析为OS命令
测试代码如下
<?php
if(isset($_GET['cmd'])){
$str=$_GET['cmd'];
print `$str`;
}
else{
echo 'please input ';
}
?>
漏洞利用
OS命令注入漏洞,攻击者直接继承web用户权限,在服务器上执行任意命令
1.查看系统文件
提交参数[ ?cmd=type c:\windows\system32\drivers\etc\hosts ],查看系统host文件
2.显示当前路径
[ ?cmd=chdir ]
3.写文件
echo "<?php phpinfo(); ?>" >> shell.php
防御方法
1.尽量减少命令执行函数的使用,并在php.ini中禁用
2.对用户输入的参数进行过滤
3.参数的值尽量用引号包裹,拼接前调用addslashes进行转义(默认情况下会对单引号,双引号,空字符,反斜杠转义)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· 单线程的Redis速度为什么快?
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码