PHP代码审计(3)

发表于:2013-10-23来源:DoDo作者:DoDo点击数: 标签:php
某些页面使用参数调用功能,没有经过权限验证,比如index.php?action=upload 密码硬编码 有的程序会把数据库链接账号和密码,直接写到数据库链接函数中。

  某些页面使用参数调用功能,没有经过权限验证,比如index.php?action=upload

  密码硬编码

  有的程序会把数据库链接账号和密码,直接写到数据库链接函数中。

  随机函数

  rand()

  rand()最大随机数是32767,当使用rand处理session时,攻击者很容易破解出session,建议使用mt_rand()

  mt_srand()和mt_rand()

  e="text-indent: 0.85cm; margin-bottom: 0cm; line-height: 125%">PHP4和PHP5<5.2.6,这两个函数处理数据是不安全的。在web应用中很多使用mt_rand来处理随机的session,比如密码找回功能等,这样的后果就是被攻击者恶意利用直接修改密码。

  特殊字符和多字节编码

  多字节编码

  PHP危险函数

  缓冲区溢出

  confirm_phpdoc_compiled

  影响版本:

  phpDocumentor phpDocumentor 1.3.1

  phpDocumentor phpDocumentor 1.3 RC4

  phpDocumentor phpDocumentor 1.3 RC3

  phpDocumentor phpDocumentor 1.2.3

  phpDocumentor phpDocumentor 1.2.2

  phpDocumentor phpDocumentor 1.2.1

  phpDocumentor phpDocumentor 1.2

  mssql_pconnect/mssql_connect

  影响版本:PHP <= 4.4.6

  crack_opendict

  影响版本:PHP = 4.4.6

  snmpget

  影响版本:PHP <= 5.2.3

  ibase_connect

  影响版本:PHP = 4.4.6

  unserialize

  影响版本:PHP 5.0.2、PHP 5.0.1、PHP 5.0.0、PHP 4.3.9、PHP 4.3.8 e="font-size: 10pt">、PHP 4.3.7、PHP 4.3.6、PHP 4.3.3、PHP 4.3.2、PHP 4.3.1、PHP 4.3.0、PHP 4.2.3、PHP 4.2.2、PHP 4.2.1、PHP 4.2.0、PHP 4.2-dev、PHP 4.1.2、PHP 4.1.1、PHP 4.1.0、PHP 4.1、PHP 4.0.7、PHP 4.0.6、PHP 4.0.5、PHP 4.0.4、PHP 4.0.3pl1、PHP 4.0.3、PHP 4.0.2、PHP 4.0.1pl2、PHP 4.0.1pl1、PHP 4.0.1

  session_destroy()删除文件漏洞

  影响版本:不祥,需要具体测试

  测试代码如下:

  

  session_save_path(‘./’);

  session_start();

  if($_GET[‘del’]) {

  session_unset();

  session_destroy();

  }else{

  $_SESSION[‘do’]=1;

  echo(session_id());

  print_r($_SESSION);

  }

  ?>

  当我们提交cookie:PHPSESSIONID=/../1.php,相当于删除了此文件

  unset()-zend_hash_del_key_or_index漏洞

  zend_hash_del_key_or_index PHP4小于4.4.3和PHP5小于5.1.3,可能会导致zend_hash_del删除了错误的元素。当PHP的unset()函数被调用时,它会阻止变量被unset。

  信息泄露

  phpinfo

  如果攻击者可以浏览到程序中调用phpinfo显示的环境信息,会为进一步攻击提供便利

  PHP环境

  open_basedir设置

  open_basedir能限制应用程序能访问的目录,检查有没有对open_basedir进行设置,当然有的通过web服务器来设置,例如:apache的php_admin_value,nginx+fcgi通过conf来控制php设置

  allow_url_fopen设置

  如果allow_url_fopen=ON,那么php可以读取远程文件进行操作,这个容易被攻击者利用

  > allow_url_include设置

  如果allow_url_include=ON,那么php可以包含远程文件,会导致严重漏洞

  safe_mode_exec_dir设置

  这个选项能控制php可调用的外部命令的目录,如果PHP程序中有调用外部命令,那么指定外部命令的目录,能控制程序的风险

  magic_quote_gpc设置

  这个选项能转义提交给参数中的特殊字符,建议设置magic_quote_gpc=ON

  register_globals设置

  开启这个选项,将导致php对所有外部提交的变量注册为全局变量,后果相当严重

  safe_mode设置

  safe_mode是PHP的重要安全特性,建议开启

  session_use_trans_sid设置

  如果启用 session.use_trans_sid,会导致 PHP 通过 URL 传递会话 ID,这样一来,攻击者就更容易劫持当前会话,或者欺骗用户使用已被攻击者控制的现有会话。

  display_errors设置

  如果启用此选项,PHP将输出所有的错误或警告信息,攻击者能利用这些信息获取web根路径等敏感信息

  expose_php设置

  如果启用 expose_php 选项,那么由 PHP 解释器生成的每个响应都会包含主机系统上所安装的 PHP 版本。了解到远程服务器上运行的 PHP 版本后,攻击者就能针对系统枚举已知的盗取手段,从而大大增加成功发动攻击的机会。

  参考文档:

  https://www.fortify.com/vulncat/zh_CN/vulncat/index.html

  http://secinn.appspot.com/pstzine/read?issue=3&articleid=6

  http://riusksk.blogbus.com/logs/51538334.html

  http://www.owasp.org/index.php/Category:OWASP_Code_Review_Project

  This entry was tagged php漏洞, 代码审计. Bookmark the permalink.

  Post navigation

  ← lxde+ubuntu on android

  使用google SSL的方法 →

  3 comments

原文转自:http://www.sectop.com/?p=111