os命令注入

在开发过程中,一些应用需要去调用一些外部程序(系统命令或exe等可执行文件)。当应用需要调用一些外部程序时,就会用到一些系统命令的函数.

而应用在调用这些函数执行系统命令的时候,如果将用户的输入作为系统命令的参数拼接到命令行中,在没有过滤输出的情况下,就会造成命令执行漏洞。

命令执行漏洞发生的两个主要原因

1.用户输入可以进行拼接

2.没有足够的过滤

危害:

可继承web服务器权限(web用户权限),去执行系统命令,读写文件,也可进一步控制整个网络,整个服务器。

相关函数:

system();

passthru():

能够将字符串作为os命令执行,自带输出功能。

exec():

也能够将字符串作为os命令执行,需要输出执行结果。

shell_exec():

也exec()函数类似

popen()也能执行os命令,但不返回命令结果,而是返回一个文件指针

<?php

if(isset($_GET['cmd']))

{
$cmd=$_GET['cmd'].">>1.txt"

popen($cmd,'r');

}

此函数需要两个参数,并且只返回一个文件指针,从而可以将其导入一个文件中查看。

反引号

反引号["]内的字符串,也会被解析成os命令,需要输出执行结果。

漏洞利用方式

查看系统文件

如?cmd=type c:\windows\system32

在windows中查看文件为type linux为cat

显示当前路劲

如?cmd=cd -->绝对路径

写入一个文件,可为一句话木马等

如?cmd=echo "<?php phpinfo();  ?>" >D:\shell.php-->其中>为覆盖写

防御方法:

1.减少命令执行函数的使用

2.在进行命令执行的函数之前,对参数进行过滤

3.参数值尽可能使用引号包裹,调用addslashes函数进行转义

posted @ 2020-08-18 22:09  LY2333  阅读(842)  评论(0编辑  收藏  举报