PHP 代码审计基础

拈花ヽ惹草 提交于 2020-03-25 12:21:47

3 月,跳不动了?>>>

第一部分 审计流程

  1. 1.用户请求的处理流程

获取请求

全局过滤

模块文件

C函数内容

M函数内容

V显示

 

  1. 2.通读原文

函数集文件

配置文件

安全过滤文件

Index文件

  • 3.网站目录结构

主目录

模块目录

插件目录

上传目录

模块目录

数据目录

配置目录

配置文件

公共函数文件

安全过滤文件

数据库结构

入口文件

 

  1. 4.敏感关键字回溯参数
    1. 优点
  • 高效的挖掘漏洞
  • 判断敏感触发点的位置以及上下文,追溯参数源头

缺点:

  • 覆盖不到逻辑漏洞的挖掘
  • 不能了解程序的基本框架

功能点定向审计

    1. 程序安装
    2. 文件上传
    3. 文件管理
    4. 登录验证
    5. 备份恢复
    6. 找回密码
  1. 例子

Dami cms

账户功能

    1. 登录
    2. 会员资料
    3. 找回密码
    4. 注册
    5. 修改密码
    6. 我的投稿
    7. 我的订单

第二部分 PHP核心配置

    • 1.大小写敏感
      • directive = value(指令=值)
      • foo = bar ≠ FOO = bar
    • 2.运算符
      • | 、&、~、!
    • 空值的表达方式
      • foo = ;
      • foo = none;
      • foo = “none”;
    • 3.安全模式
      • 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()
    • 停止程序,无法执行后面代码

 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!