PHP伪协议
PHP伪协议事实上是其支持的协议与封装协议,支持的种类有以下12种。
* file:// — 访问本地文件系统* http:// — 访问 HTTP(s) 网址* ftp:// — 访问 FTP(s) URLs* php:// — 访问各个输入/输出流(I/O streams)* zlib:// — 压缩流* data:// — 数据(RFC 2397)* glob:// — 查找匹配的文件路径模式* phar:// — PHP 归档* ssh2:// — Secure Shell 2* rar:// — RAR* ogg:// — 音频流* expect:// — 处理交互式的流
把握大局
网站结构:浏览源码文件夹,了解程序大致目录。入口文件:index.php、admin.php文件一般是整个程序的入口,详细读一下index文件可以知道程序的架构,运行流程、包含的哪些配置文件,包含了哪些过滤文件以及包含哪些安全过滤文件,了解程序的业务逻辑。
配置文件:类似config.php文件,包含了数据库的配置信息,程序的一些信息。先看看数据库编码,如果是gbk则可能存在宽字节注入。如果变量的值用双引号、则可能存在双引号解析代码执行的问题。过滤功能:通过祥读公共函数文件(lib.php)和安全过滤文件等文件,清晰掌握用户输入的数据,哪些被过滤,哪些没被过滤,在哪里被过滤,如何过滤的,能否绕过过滤的数据。过滤方式是替换还是正则?有没有GPC?有没有使用addslashes()处理。
审计方法
通读全文法:把握大局→根据入口文件进入各个功能进行审计。敏感函数参数回溯法:最高效、最常用的方法。大多数漏洞的产生是因为函数的使用不当导致的。使用软件查找匹配一些高危漏洞、关键函数及敏感关键字,如——Seay源代码审计系统。不推荐使用,误报率太高,但是可以练习一下,熟悉危险函数、关键函数。
定向功能分析法:最主要的方法
使用浏览器逐个访问浏览,看看这套程序有哪些功能。根据相关功能,大概推测可能存在哪些漏洞。
把握大局——定向功能——敏感函数参数回溯
常见功能漏洞:
程序初始安装l 站点信息泄露(日志、备份文件)l 文件上传l 模板、文件编辑l 模板更改(zip)l 数据库备份l 找回密码l 修改配置信息
常见的INI配置
配置文件
php.ini全局配置文件、.user.ini用户配置文件,与Apache的.htaccess类似。http.conf会覆盖php.ini的值。
变量相关
全局变量:register_globals,会造成变量之间的覆盖,例如传递一个一样的参数,post会覆盖掉get的值。
短标签:short_open_tag <? ?>等价于<?php ?>、<?=等价于<? echo。从PHP 5.4.0起。
安全模式
//安全模式:safe_mode,开启system()无法执行,关闭可以。从5.3.0废弃,5.4.0移除。
安全模式下执行程序主目录:safe_mode_exec_dir = /var/www/html
如果PHP使用了该安全模式,system()和其他程序执行函数将拒绝启动不在此目录中的程序。必须使用/作为目录分隔符,包括Windows中。简单来说,就是这个目录下可以执行。
禁用类/函数:disable_classes= ,disable_functions= ,如disabe_function=opendir,readdir,
scandir,fopen,unlink。接受逗号分隔的函数名列表作为参数。只能设置在php.ini中。
上传文件及目录权限
设置上传及最大上传文件大小:file_uploads=on,upload_max_filesize=8M
文件上传临时目录:upload_tmp_dir=
上传临时文件保存的目录,需要可写,如果不设置,则采用系统临时目录。(/tmp、C:\window\Temp)
用户访问目录限制:open_basedir=.:/tmp/,open_basedir=.;c:\windows\temp
使用open_basedir选项能够控制PHP脚本只能访问指定的目录,这样能够避免PHP脚本访问不应该访问的文件,一定程度上限制了phpshell的危害,我们一般可以设置只能访问网站目录,表示允许访问当前目录(既PHP脚本文件所在之目录)和/tmp/目录,有效防止PHP木马跨站运行。
错误信息
错误信息控制:display_error
是否将错误信息作为输出的一部分,站点发布后应该关闭这项功能,以免暴露信息,调试的时候可以开启。
设置错误报告级别:error_reporting = E_all 生产环境既发布环境应设置为0
<?php
error_reporting(E_ALL);
……
?>
将错误级别设置为最高,可以显示所有的问题,方便查错。在php.ini中设置。推荐使用E_ALL|E_STRICT ,即所有级别。
错误日志:
error_log = 错误日志的位置,必须对web用户可写入,如果不定义则默认写入到web服务器的错误日志中去。
log_error = on 将错误日志输出到文件,而不是直接输出到前端。
log_errors_max_length = 1024 错误日志关联信息的最大长度,设置为0表示无线长度。
魔术引号及远程文件
魔术引号:magic_quotes_gpc = on、magic_quotes_runtime = off
为GPC(GET/POST/COOKIE)操作设置magic_quotes状态。当magic_quotes为on,所有的单引号、双引号、反斜杠、NULL被一个反斜杠自动转义
本特性已自PHP 5.3.0起废弃并将自5.4.0移除。
是否允许打开远程文件:allow_url_fopen = on(默认)
本选项激活了URL形式的fopen封装协议使得可以访问URL对象例如文件。默认地封装协议提供ftp和http协议来访问远程文件。
是否允许包含远程文件:allow_url_include =off(默认)
本选项激活允许include、inclu_once、require、require_once等函数使用URL形式的fopen封装协议。简单来说就是可以包含远程文件。
随记
erroe_reporting(0); //关闭网站错误信息(不报错)
Print、echo、print_r()(显示数组内容)、var_dump()(比print_r多显示了参数类型)、exit();
双引号解析变量、单引号不解析变量;
超级全局变量:
$GLOBALS 引用全局作用域中可用的全部变量,但该变量必须是全局作用域。
$_SERVER 服务器和执行脚本环境信息
$_REQUEST 可以引用$_GET、$_POST、$COOKIE变量
$_ENV 环境变量
$_FILES 文件上传变量,注意要有S
笨鸟先飞早入林,笨人勤学早成材。转载请注明出处:撰写人:fox-yu /fox-yu/