代码审计学习(一)


代码审计学习(一)

PHP核心配置

首先需了解 PHP_INI_* 常量的定义

常量 含义
PHP_INI_USER 可在用户的php脚本或者windows注册表中设置
PHP_INI_PERDIR 可在php.ini .htaccess或http.conf中设置
PHP_INI_SYSTEM 可在php.ini 或 http.conf中配置
PHP_INI_ALL 可在任何地方配置
PHP.ini only 可仅在php.ini中配置

  • 常见影响安全的配置

1. register_globals(全局注册变量):
若为on,会直接把用户通过GET、POST传进来的参数注册为全局变量并初始化参数对应的值

 仅在php版本低于5.4.0时可用 

2. allow_url_include(是否运行包含远程文件):
若为on,可以直接包含远程文件。当变量可控时,可用来构造php代码。

allow_url_include在 PHP 5.2.0后默认为off,配置范围是PHP_INI_ALL

3. magic_quotes_gpc(魔术引号自动过滤):
若为on,会自动在GET、POST、COOKIE到的变量中的单引号(’)、双引号(“)、反斜杠(\)及空白字符(NULL)前加上反斜杠(\)。但是在PHP5中的magic_quotes_gpc并不会过滤$_SERVER变量,导致很多漏洞

在PHP5.4之前可用。小于4.2.3时配置范围是PHP_INI_ALL;大于时是PHP_INI_PERDIR

4. magic_quotes_runtime(魔术引号自动过滤):
与magic_quotes_gpc概念差不多,但处理对象不同。只处理从数据库或者文件中获取的数据

只有部分函数受影响,大多为读取数据库或文件的函数

5. magic_quotes_sybase(魔术引号自动过滤):
用于自动过滤字符。当为on,会覆盖掉magic_quotes_gpc=on的配置。处理对象与gpc一致,但处理方式仅仅为转义空字符与把 ‘ 变成 “

PHP 5.4.0前可用,配置范围为PHP_INI_ALL

6. safe_mode(安全模式):
PHP内嵌的安全机制。当为on时,可用的指令为 safe_mode_include_dirsafe_mode_exec_dirsafe_mode_allow_env_varssafe_mode_protected_env_vars

safe_mode指令的配置范围为PHP_INI_SYSTEM PHP5.4之后被取消

所有文件操作函数会受限制(file()、include()..)

通过函数popen()、system()、exec()执行命令或程序会报错

7. open_basedir:
open_basedir指令用来限制PHP只能访问哪些目录

指定的限制是前缀不是文件名

小于 PHP5.2.3时是PHP_INI_SYSTEM,大于时是PHP_INI_ALL

8. disable_functions(禁用函数):
禁止敏感函数的使用

记得把dl()禁掉 否则可利用dl()绕过

配置范围为php.ini only

工具

  • 编辑器:sublime text、UltraEdit
  • 审计工具:Seay源码审计系统、RIPS
  • 漏洞验证工具:burp、Firebug、
  • 辅助工具:编码转换工具、正则调试工具等

代码审计思路

1. 根据敏感关键字回溯参数传递过程

2. 查看可控变量,正向追踪变量传递过程

3. 寻找敏感功能点,通读功能点代码

4. 直接通读全文代码



文章作者: Doublenine
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 Doublenine !
 上一篇
代码审计学习(二) 代码审计学习(二)
代码审计学习(二)SQL注入 由于开发者在编写数据库代码时,直接将外部可控的参数拼接到SQL语句中,没有经过任何过滤就直接放入数据库引擎执行 普通注入 在参数处利用select、union等构造sql注入语句。主要分为int型和st
下一篇 
变量覆盖漏洞学习 变量覆盖漏洞学习
变量覆盖定义 可以用自定义的参数值替换原有变量值的情况称为变量覆盖漏洞 主要情形 $$使用不当 extract()函数使用不当 parse_str()函数使用不当 import_request_variables()使用不当 开启全局
  目录