代码审计学习笔记

0x01 PHP核心配置讲解

PHP_INI_*常量的定义

  • PHP_INI_USER
    该配置可在用户的PHP脚本或window注册表设置
  • PHP_INI_PERDIR
    该配置可在php.ini .htaccess或httpd.conf中设置
  • PHP_INI _SYSTEM
    该配置可在php.ini 或httpd.conf中设置
  • PHP_INI _ALL
    该配置可在任何地方设置
  • PHP.INI ONLY
    该配置仅可在php.ini中设置

register_globals(全局变量注册开关)

  • 设置为on的情况下,会直接把用户GET,POST等方式提交上来的参数设置为全局变量并初始化为参数对应的值,使得提交参数可以直接在脚本中使用
  • php版本小于等于4.2.3时设置为on,5.3.0被废弃,php版本5.4.0时移除该项

allow_url_include(是否允许包含远程文件)

  • 当存在include($var)且$var可控时,可直接控制$var变量来执行php代码。此配置在php5.2.0后默认关闭。与之类似配置有allow_url_fopen,配置是否允许打开远程文件

magic_quotes_gpc(魔术引号自动过滤)

  • 配置为on时,会自动在GET,POST,COOKIE变量中的 (单引号)’ 、(双引号)" 、(反斜杠) 、空字符(NULL)的前面加上反斜杠()
    但php5中的magic_quotes_gpc不会过滤$_SERVER变量,导致client-ip、referer一类漏洞能够利用(如XFF注入)
  • PHP5.3后不推荐使用,PHP5.4后被取消

magic_quotes_runtime(魔术引号自动过滤)

  • 与前面一个函数相似,但区别是它只对从数据库或文件中获取的数据进行过滤,同样在PHP5,4后取消

magic_quotes_sybase(魔术引号自动过滤)

  • 为on时,会覆盖magic_quotes_gpc的配置,与gpc配置类似,但此配置仅仅转义空字符和把单引号变成双引号,也在5.4版本移除

safe_mode(安全模式)

  • 一种安全机制,php5.4后取消
  • 为on时
    • 所有文件操作函数(如unlink()、file()、include())等都受限制
    • 通过函数popen(),system()以及exec()等函数执行命令或程序会提示错误

open_basedir PHP可访问目录

  • 用来限制php只能访问哪些目录,若需加载外部脚本,需把脚本路径加到open_basedir指令中,多个目录以分号分割,例如:open_basedir=/www/a/
  • 在<=php5.2.3时是PHP_INI _SYSTEM,大于时为PHP_INI _ALL

disable_function(禁用函数)

  • 禁用一些敏感函数使用,配置范围是php.ini only

display_errors和error_reporting错误显示

  • 第一个表示是否显示php脚本内部错误,为on时,还可配置指令error_reporting,这个选项用来配置错误显示的级别

审计辅助工具

代码编辑器
  • notepad++
代码审计工具
  • Seay源代码审计系统(php)
  • Fortify SCA(收费的,但是支持最多编程语言的审计软件)
  • RIPS(php)
    ……
  • 除此之外的审计工具在小迪写的文章里总结的比较好
    https://t.zsxq.com/fMfuNJa

审计思路

  1. 根据敏感关键词回溯参数传递过程
  2. 查找可控变量,正向追踪变量传递过程
  3. 寻找敏感功能点,通读功能点代码
  4. 直接通读全文代码
原文地址:https://www.cnblogs.com/yida223/p/12229320.html