某些页面使用参数调用功能,没有经过权限验证,比如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