zoukankan      html  css  js  c++  java
  • php代码审计5审计命令执行漏洞

    命令执行漏洞:通过易受攻击的应用程序在主机操作系统上执行任意命令,用户提供的数据(表单,cookie,http头等)未过滤


    挖掘思路:
    用户能够控制函数输入,存在可执行代码的危险函数


    命令执行和代码执行的区别:
    命令执行 执行效果不受限于语言,语法本身,不受命令本身限制
    代码执行 执行效果完全受限语言本身

    命令执行类型:
    代码层过滤不严,系统的漏洞造成命令注入,调用的第三方组件存在代码执行漏洞


    常见危险函数
    system函数
    string system(string $command[,int &$return_var])
    $command 要执行的命令
    $return_var 如果提供此参数,那么外部命令执行后的返回状态将会被设置到此变量中


    exec函数
    string exec(string $command[,array &$output[,int &$return_var]])
    $command 要执行的命令
    $output 如果提供此参数,会有命令执行的输出填充次数组
    $return_var 如果同时提供$output $return_var参数,命令执行后的返回状态会被写入到此变量


    shell_exec函数
    string sehll_exec(string $cmd)
    $cmd 要执行的命令
    ”反引号()则是调用此函数

    passthru函数
    string passthru(string $command[,int &$return_var])
    $command 要执行的命令
    $return_var 如果提供此参数,Unix命令的返回状态会被记录的次参数


    passthru函数
    string passthru(string $command[,int &$return_var])


    修复方案:

    过滤函数防护
    Escapeshellcmd() 过滤整条命令
    Escapeshellarg() 过滤整个参数

    尽量少用执行命令的函数或者直接禁用参数值,尽量使用引号包括
    在使用动态函数之前,确保使用的函数是指定的函数之一
    在进行执行命令的函数/方法之前,对参数进行过滤,对铭感字符进行转义,尽量少用执行命令的函数
    对于可控点是程序参数的情况下,使用escapeshellcmd函数进行过滤,对于可控点是程序参数值的情况下使用escapeshellarg函数进行过滤
    参数的值尽量使用引号包裹,并在拼接前调用addslashes进行转义
    而针对特定第三方组件引发的漏洞,就是及时打补丁,修改安装时的默认配置

  • 相关阅读:
    七牛图片上传JSSDK
    2015年12月中国航空公司名录
    HTML5 开发框架
    利用HTML5定位功能,实现在百度地图上定位
    openerp7 时区问题
    AS3使用Json 传复杂数据 -------- 用数组而不是向量
    随便写写
    生产环境该如何选择lvs的工作模式,和哪一种算法
    获取Linux权限后安装rootkit
    IT求职经验分享
  • 原文地址:https://www.cnblogs.com/Hydraxx/p/10333547.html
Copyright © 2011-2022 走看看