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函数进行转义


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM