首页 > Web开发 > 详细

PHP 代码审计基础

时间:2020-03-06 10:31:54      阅读:55      评论:0      收藏:0      [点我收藏+]

代码审计-基础

第一部分 审计流程

  1. 用户请求的处理流程
    1. 获取请求
    2. 全局过滤
    3. 模块文件
    4. C函数内容
    5. M函数内容
    6. V显示
  2. 通读原文
    1. 函数集文件
    2. 配置文件
    3. 安全过滤文件
    4. Index文件
      • 网站目录结构
        • 主目录
        • 模块目录
        • 插件目录
        • 上传目录
        • 模块目录
        • 数据目录
        • 配置目录
        • 配置文件
        • 公共函数文件
        • 安全过滤文件
        • 数据库结构
        • 入口文件
  3. 敏感关键字回溯参数
    1. 优点:
      • 高效的挖掘漏洞
      • 判断敏感触发点的位置以及上下文,追溯参数源头
    2. 缺点:
      • 覆盖不到逻辑漏洞的挖掘
      • 不能了解程序的基本框架
  4. 功能点定向审计
    1. 程序安装
    2. 文件上传
    3. 文件管理
    4. 登录验证
    5. 备份恢复
    6. 找回密码
  • 例子

    • Dami cms

      • 账户功能

        1. 登录

        2. 会员资料

        3. 找回密码

        4. 注册

        5. 修改密码

        6. 我的投稿

        7. 我的订单

    第二部分 PHP核心配置

    • 大小写敏感
      • directive = value(指令=值)
      • foo = bar ≠ FOO = bar
    • 运算符
      • | 、&、~、!
    • 空值的表达方式
      • foo = ;
      • foo = none;
      • foo = “none”;
    • 安全模式
      • safe_mode=off (PHP 5.4移除 )限制文档存取、环境变量的读取以及空值外部程序的运行
      • 限制环节变量的读取
        • safe_mode_allowed_env_vas = string
        • 指定PGP程序可以改变的环境变量的前缀,当值为空的时候,可以改变任何的环境变量
      • 外部程序执行目录
        • safe_mode_exec_dir = “”
    • 禁用危险函数
      • disable_functions
    • com 组件
      • com.allow_dcom=false
      • PHP设置在安全模式下(safe_mode),允许攻击者使用com()函数穿件系统组件来执行任意命令
      • 使用com函数需要在php.ini中配置extension=php_com_dotnet.dll,如果PHP VERSION<5.4.5,则不需要
    • 全局变量注册开关
      • register_globals = off
      • php.ini的register_globals选项的默认值设为off,在4.2版本之前是默认开启的,当register_globals为on时,程序接受来自服务器的环境变量,包括表单提取的变量
      • register_globals = Off,服务器获取数据时候采用**$_GET[‘name‘]** 来获取数据
      • register_globals = On ,服务器采用POST或者GET来提交变量,都会使用全局变量来接受取值
    • 魔术引号自动过滤
      • magic_quotes_gpc=On PHP4.5移除
      • magic_quotes_gpc=Off 在php.ini中默认关闭,会对sql语句中的单引号、双引号、反斜杠和空字符加上反斜杠转义,它会影响HTTP请求的数据(GET POST Cookies),同时可以在php代码中使用addslashes来转义,通过stripslashes来删除转义
    • 远程文件
      • 是否允许包含远程文件
        • allow_url_include = off
          • 设置为On的情况下,可以直接包含远程文件,若包含的变量为可控的情况下,可以直接控制变量来执行PHP代码
      • 是否允许打开远程文件
        • allow_url_open = on
          • 允许本地PHP文件通过URL重写的方式来打开和关闭权限,默认的封装协议提供ftp和http协议访问文件
    • 目录权限
      • HTTP头部版本信息
        • expose_php = off
        • 防止了通过http头部泄露的php版本信息
      • 文件上传临时目录
        • upload_tmp_dir=
        • 上传文件临时保存目录,如果不设置,采用系统的临时目录
      • 用户可以访问目录
        • open_basedir = E:\Local Test\WWW
        • 能够控制PHP脚本只能访问指定的目录。
    • 错误信息
      • 内部错误选项
        • display_errors = on
        • 表明显示php脚本的内部错误,错误回显
      • 错误报告级别
        • error_reporting = E_ALL & ~E_NOTICE
        • 将错误级别调到最高,显示所有的问题,方便排错

第三部分 代码调试及Xdebug的配置使用

  • echo
    • 最简单的输出数据调试方法,一般用来输出变量值或者不确定执行到哪个分支
  • print_r var_dump debug_zval_dump
    • 这个主要输出变量的数据值,但是debug_zval_dump输出结果会有refcount,记录一个变量被引用的次数
  • debug_print_backtrace
    • 可以查看输出的调用栈的信息
  • exit()
    • 停止程序,无法执行后面代码
  • 安装Xdebug 见下篇

PHP 代码审计基础

原文:https://www.cnblogs.com/LtWf/p/12424252.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!