zoukankan      html  css  js  c++  java
  • PHP代码审计学习之命令执行漏洞挖掘及防御

    【1】可能存在命令执行漏洞的函数:

    00x1:常用的命令执行函数:exec、system、shell_exec、passthru

    00x2:常用的函数处理函数:call_user_func、call_user_func_array、file_get_contents.....更多函数处理函数传递门:http://www.php.net/manual/zh/book.funchand.php

           函数处理函数的使用:<?php $a = "phpinfo()";call_user_func($_GET['id'],$a); ?>访问:127.0.0.1/1.php?assert即可看到效果


    【2】如何预防命令执行漏洞:

    00x1:escapeshellcmd()//该函数过滤的是整条的命令

    00x2:escapeshellarg()//用来保证传入的命令执行函数里面的参数确实是以字符串参数的形式存在的不能被注入!


    实例挖掘一个程序的命令执行漏洞。


    我随便搜索了一个命令执行函数(PS:网站程序是老古董了):

    随笔点开了一个文件,在文件的35行处找到命令执行函数system,两个参数,看看有没有进行过滤。

    从35行很清楚的看到,其使用了一个tex_filter_get_cmd的函数,那么我们找一下这个函数,看下是如何写的。该文件中没有找到定义该函数的,那么必然是被包含了,被包含了两个文件夹,一个是lib.php一个是config.php那么势必是lib.php了,因为config.php是配置文件。

    找到lib.php打开lib.php以后找到这个tex_filter_get_cmd函数,函数内部情况如下所示:

    其实也可以很明显的看到$texexp函数有使用escapeshellarg函数过滤然后赋值给$texexp变量,但是$pathname并没有任何过滤就直接带入44行以及47行执行了。由此导致本次的命令执行漏洞。

    在42行他判断了系统是否为windows如果是windows就执行43到44行的代码。

    44行的$executable变量是由40行的赋值而来的,那么我们再来看看tex_filter_get_executale函数。该函数在这个文件当中。其结构如下所示:

     

    总体的来说就是调用了16行的exe

    那么构造好的EXP就应该是:texed.php?formdata=foo&pathname=foo"+||+ver||+echo+

    防御:

        使用escapeshellcmd($pathname);过滤掉$filename

      

  • 相关阅读:
    XPath使用示例
    CSS3中的弹性布局——"em"的用法
    Sublime Text3快捷键实用总结
    学习笔记——关于HTML(含HTML5)的块级元素和行级(内联)元素总结
    JavaScript中的伪数组理解
    深入理解浏览器兼容性模式
    javascript 中使用instanceof需要注意的一点
    用人工智能学习,凡亿推出PCB问题解答智能搜索机器人:pcb助手
    Altium中坐标的导出及利用坐标快速布局
    Altium中Logo的导入方法及大小调整
  • 原文地址:https://www.cnblogs.com/xishaonian/p/6502970.html
Copyright © 2011-2022 走看看