(1) .OS命令
类似于编程语言注入一样,一些应用程序需要去调用一些外部程序
应用在调用这些函数执行系统命令的时候,如果将用户的输入作为系统命令
的参数拼接到命令行中,在没有过滤用户输入的情况下,就会造成命令执行的漏洞
.危害
-继承WEB服务器程序权限,执行系统命令
-继承WEB服务器程序权限,读写文件
-反弹shell
-控制整个网站
-控制整个服务器
.存在原因
用户输入作为拼接
没有安全过滤
.相关函数
【1】 .system()
将字符串作为OS命令进行执行
自动输出
system.php
<meta charset='gb2312'>
<?php
if(isset($_GET['cmd']))
{
system($_GET['cmd']);
}
else
{
echo "please input ?cmd=";
}
?>
【2】.exec()
将字符串作为OS命令进行执行
手动输出
exec.php
<meta charset='gb2312'>
<?php
if(isset($_GET['cmd']))
{
print exec($_GET['cmd']);
}
else
{
echo "please input ?cmd=";
}
?>
【3】.shell_exec()
将字符串作为OS命令进行执行
手动输出
shell_exec.php
<meta charset='gb2312'>
<?php
if(isset($_GET['cmd']))
{
print shell_exec($_GET['cmd']);
}
else
{
echo "please input ?cmd=";
}
?>
【4】.passthru()
将字符串作为OS命令进行执行
自动输出
passthru.php
<meta charset='gb2312'>
<?php
if(isset($_GET['cmd']))
{
passthru($_GET['cmd']);
}
else
{
echo "please input ?cmd=";
}
?>
【5】.popen()
同样执行命令返回结果
返回一个文件指针
popen.php
<meta charset='gb2312'>
<?php
if(isset($_GET['cmd']))
{
popen($_GET['cmd']);
}
else
{
echo "please input ?cmd=";
}
?>
'返回结果写入文件中进行查看'
?cmd=ipconfig >>1.txt
【6】.反引号 ` `
`.php
<meta charset='gb2312'>
<?php
if(isset($_GET['cmd']))
{
print `{$_GET['cmd']}`;
}
else
{
echo "please input ?cmd=";
}
?>
【7】.其他具体看不同编程语言
.......
(2) .漏洞利用
*查看系统文件
system.php?cmd=type c:\windows\
*显当前路径
?cmd=cd
*写文件
?cmd=echo "<?php phpinfo()?>" >D:\\
页面没有报错执行成功
*其他命令
?cmd=ipconfig
?cmd=whoami
?cmd=net user
?cmd=systeminfo
..
(3) .防御方法
1.尽量减少执行函数的使用,并在
php.ini配置文件中
disable_functions=禁用函数名
2.进入命令执行的函数或方法之前,对参数进行过滤
3.参数的值尽量使用引号包裹
并在凭借前调用addslashes进行转义