乘风原创程序

  • 代码审计-php命令执行
  • 2020/7/29 12:03:17
  • 作者:小刚
    一位苦于信息安全的萌新小白帽,记得关注给个赞,谢谢
    本实验仅用于信息防御教学,切勿用于其它用途

    前言

    近期在学习php的代码审计,推一下这本书啊代码审计 企业级Web代码安全架构_尹毅著
    前篇文章介绍过代码执行了,现在写写命令执行。
    命令执行就是执行命令,执行win和Linux的系统命令
    php中有好几个可以执行系统命令的函数,我大体分了两类(有返回结果和无返回结果)

    返回执行结果

    直接传入命令并函数返回执行结果

    system($_GET['cmd']);//直接回显结果打印输出
    
    echo exec($_GET['cmd']);
    
    passthru($_GET['cmd']);
    
    echo shell_exec($_GET['cmd']);
    
    echo `$_GET['cmd']`;//反引号也执行命令,原理是调用shell_exec()
    

    无返回执行结果

    不返回执行结果,返回文件指针,但是命令执行了

    popen($_GET['cmd'],'w');//r,w代表读写
    popen('whoami >> D:/2.txt','r');//将信息写入文件
    
    proc_open($_GET['cmd']);
    

    命令执行小技巧

    1.在命令执行过程中,我们会遇到空格被删除或者替换的情况

    在Win中:用=代替空格

    $cmd="type=../1.txt";
    system($cmd);
    

    linux中:用<代替空格

    $cmd="cat<../2.txt";
    system($cmd);
    

    2.在命令执行过程中,我们会进行多条命令执行

    在Win中:
    连续运算符 &,前面执行正常或者错误,后面都能执行。
    && 前面执行错误,后面就不能执行命令。

    $cmd="ipconfig&whoami";
    system($cmd);
    

    在Linux中:
    分号; 是连续运算符,连接执行的语句

    $cmd="ifconfig;whoami;";
    system($cmd);
    

    防范措施

    php有自带的命令防注入函数escapeshellcmd()escapshellarg()
    escapshellcmd()过滤整条命令
    escapshellarg()是保证传入命令执行函数里的参数以字符串参数形式存在
    注意escapeshellcmd() 和 escapeshellarg 一起使用,会造成特殊字符逃逸。

    本文地址:https://blog.csdn.net/weixin_43221560/article/details/107614670