OS命令注入的相关函数

命令注入

原理以及成因
程序员使用脚本语言(比如PHP)开发应用程序过程中,脚本语言开发十分快速、简介,方便,但是也伴随着一些问题。比如说速度慢,或者无法接触系统底层,如果我们开发的应用,特别是企业级的一些应用需要去调用一些外部程序。当应用需要调用一些外部程序时就会用到一些系统命令的函数。

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

造成命令执行漏洞的原因
1、用户输入作为拼接
2、没有足够的过滤

漏洞危害
1.继承Web 服务器程序权限(web用户权限),去执行系统命令
2.继承Web服务器权限,读写文件
3.反弹Shell
4.控制整个网站
5.控制整个服务器

相关函数有以下几种

  • system( )
    system( )能够将字符串作为OS命令执行,自带输出功能
    测试代码如下
    ----system. php
<?php
$str="ipconfig"
system();
?>

在这里插入图片描述
访问如下图得到相关信息
在这里插入图片描述
然后用提交参数的方法测试
代码如下:

<meta charset='gb2312'>
<?php
if(isset($_GET [ ' cmd ' ] )){
            echo "<pre>";
            system( $_GET[ ' cmd ' ] );
}else{
        echo"?cmd=ipconfig";
}
?>

*exec( )
exec()函数能将字符串作为OS命令执行,需要输出执行结果。测试代码如下
----exec. php-------

<meta charset="gb2312">
<?php
if ( isset($_GET[ ' cmd ' ])){
          echo "<pre>" ;
         print exec($_GET[ ' cmd ']);
}else{
         echo"?cmd=whoami";
}
?>

*shell_exec()
测试代码如下
----shell_exec. php

<?php
if(isset($_GET[ ' cmd '])){
         print shell_exec($_GET[ ' cmd ' ] );
         }else{
                  echo" ?cmd=whoami" ;
}
?>

*passthru( )
测试代码如下-一–passthru . php

<?php
if(isset($_GET[ 'cmd ' ])){
       passthru($__GET[ ' cmd ' ]);
       }else{
                echo" ?cmd=whoami";
}
?>

*popen()
popen()也能够执行0S
命令,但是该函数并回是返回命令结果,而是返回一个文件指针。无论返回什么,我们关心的是命令执行了。
测试代码如下----popen. php

<?php
if( isset($_GET[ ' cmd ' ]))i
       $cmd=$_GET[ ' cmd ' ].">>1.txt" ;popen( $cmd , 'r' );
}else{
      echo" ?cmd=whoami" ;
}
?>

查看1.txt文件
*反引号
反引号[`]内的字符串,也会被解析成0S命令。测试代码如下

<?php
if(isset($_GET[ ' cmd ' ])){
        $cmd=$_GET[ ' cmd ' ];
        print `$cmd `;
 }else{
       echo" ?cmd=whoami" ;
}
?>

漏洞利用
OS命令注入漏洞,攻击者直接继承web
用户权限,在服务器上执行任意命令,危害特别大。以下命令均在windows系统下测试成功。

*查看系统文件
提交参数[?cmd=type c:\windows\system32\drivers\etc\hosts],查看系统hosts 文件。

*显示当前路径
提交参数[?cmd=cd]

*写文件
提交参数[?cmd=echo "<?php phpinfo( ) ; ?>" > C: iphpStudy \ wWw\ Commmandi\shell.php]
页面没有报错,说明文件写入成功。访问shell.php文件。

防御方法
1,尽量减少命令执行函数的使用,并在disable_functions中禁用2.在进入命令执行的函数或方法之前,对参数进行过滤
3.参数的值尽量使用引号包裹,并在拼接前调用addslashes进行转义

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值