温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

php网络安全中命令执行漏洞怎么预防

发布时间:2023-02-24 11:16:06 来源:亿速云 阅读:125 作者:iii 栏目:开发技术

这篇文章主要介绍了php网络安全中命令执行漏洞怎么预防的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇php网络安全中命令执行漏洞怎么预防文章都会有所收获,下面我们一起来看看吧。

    漏洞的产生原因

    • 代码层过滤不严。应用程序直接或间接使用了动态执行命令的危险函数,并且这个函数的运行参数是可控的

    • 系统的漏洞造成命令注入

    漏洞的本质

    应用有时需要调用一些执行系统命令的函数,当服务器没有严格过滤用户提供的参数时,就有可能导致用户提交恶意代码被服务器执行,从而造成命令执行漏洞。

    涉及到的函数

    • 1.system

    • 2.exec()

    • 3.shell_exec()

    • 4.passthru()

    • 5.popen()

    • 6.反引号

    命令执行漏洞的危害

    • 1.继承Web 服务器程序权限(Web用户权限),去执行系统命令

    • 2.继承Web服务器权限,读写文件

    • 3.反弹Shell

    • 4.控制整个网站

    • 5.控制整个服务器

    命令执行漏洞的防御

    • 1、尽量少使用执行命令函数或者禁用disable_functions

    • 2、在进入执行命令的函数之前,对参数进行过滤,对敏感字符进行转义

    • 3、参数值尽量使用引号包括,并在拼接前调用addslashes进行转义

    命令执行相关函数的使用

    system()

    • 说明:能够将字符串作为OS命令执行,自带输出功能

    • 测试参考代码:

    <?php
    if(isset($_GET['cmd'])){
        system($_GET['cmd']);
    }
    ?>
    payload:?cmd=ipconfig

    exec()

    • 说明:能将字符串作为OS命令执行,但无输出,需要输出执行结果print。

    • exec() 默认只输出最后一行的数据

    • 如果想让他输出全部结果,可以加一个参数,即exec(ifconfig,$arr); print_r($arr);,如一句话木马:<?php exec($_REQUEST[123],$arr);print_r($arr)?>

    • 测试参考代码

    <?php
    if(isset($_GET['cmd'])){
        print exec($_GET['cmd']);
    }
    ?>
    payload:?cmd=whoami

    shell_exec()

    • 说明:执行命令并以字符串的形式,返回完整的信息,但是函数无回显,需要输出执行结果。

    • 测试参考代码

    <?php
    if(isset($_GET['cmd'])){
        print shell($_GET['cmd']);
    }
    ?>
    payload:?cmd=whoami

    passthru()

    • 说明:执行外部命令,与system()类似,但是该函数会直接将结果输出,无需输出执行。

    • 测试参考代码

    <?php
    if(isset($_GET['cmd'])){
        passthru($_GET['cmd']);
    }
    ?>
    payload:?cmd=whoami

    popen()

    • 说明:能够执行OS命令,但是该函数并不是返回命令结果,而是返回一个文件指针

    • 测试参考代码

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

    反引号

    • 说明:反引号[``]内的字符串,也会被解析成OS命令

    • 反引号背后执行的代码其实是调用了shell_exec(),所以禁用了shell_exec()同样反引号也无法使用了。

    • 测试参考代码

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

    关于“php网络安全中命令执行漏洞怎么预防”这篇文章的内容就介绍到这里,感谢各位的阅读!相信大家对“php网络安全中命令执行漏洞怎么预防”知识都有一定的了解,大家如果还想学习更多知识,欢迎关注亿速云行业资讯频道。

    向AI问一下细节

    免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

    php
    AI