PHP代码审计---基础

时间:2023-01-24 15:11:03

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:// — 处理交互式的流

把握大局

  1. 网站结构:浏览源码文件夹,了解程序大致目录。
  2. 入口文件:index.php、admin.php文件一般是整个程序的入口,详细读一下index文

件可以知道程序的架构,运行流程、包含的哪些配置文件,包含了哪些过滤文件以及包含哪些安全过滤文件,了解程序的业务逻辑。

  1. 配置文件:类似config.php文件,包含了数据库的配置信息,程序的一些信息。先看看数据库编码,如果是gbk则可能存在宽字节注入。如果变量的值用双引号、则可能存在双引号解析代码执行的问题。
  2. 过滤功能:通过祥读公共函数文件(lib.php)和安全过滤文件等文件,清晰掌握用户输入的数据,哪些被过滤,哪些没被过滤,在哪里被过滤,如何过滤的,能否绕过过滤的数据。过滤方式是替换还是正则?有没有GPC?有没有使用addslashes()处理。

审计方法

  1. 通读全文法:把握大局→根据入口文件进入各个功能进行审计。
  2. 敏感函数参数回溯法:最高效、最常用的方法。

大多数漏洞的产生是因为函数的使用不当导致的。使用软件查找匹配一些高危漏洞、关键函数及敏感关键字,如——Seay源代码审计系统。不推荐使用,误报率太高,但是可以练习一下,熟悉危险函数、关键函数。

  1. 定向功能分析法:最主要的方法

使用浏览器逐个访问浏览,看看这套程序有哪些功能。根据相关功能,大概推测可能存在哪些漏洞。

把握大局——定向功能——敏感函数参数回溯

常见功能漏洞:

l  程序初始安装

l  站点信息泄露

l  文件上传

l  文件管理

l  登录认证

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

PHP代码审计---基础的更多相关文章

  1. php代码审计基础笔记

    出处: 九零SEC连接:http://forum.90sec.org/forum.php?mod=viewthread&tid=8059 --------------------------- ...

  2. PHP代码审计基础-高级篇

    高级篇主要讲 1. 熟知各个开源框架历史版本漏洞. 2. 业务逻辑漏洞 3. 多线程引发的漏洞 4. 事务锁引发的漏洞 在高级篇审计中有很多漏洞正常情况下是不存在的只有在特殊情况下才有 PHP常用框架 ...

  3. PHP代码审计基础-中级篇

    初级篇更多是对那些已有的版本漏洞分析,存在安全问题的函数进行讲解,中级篇更多是针对用户输入对漏洞进行利用 中级篇更多是考虑由用户输入导致的安全问题. 预备工具首先要有php本地环境可以调试代码 总结就 ...

  4. PHP代码审计基础-初级篇

    对于php代码审计我也是从0开始学的,对学习过程进行整理输出沉淀如有不足欢迎提出共勉.对学习能力有较高要求,整个系列主要是在工作中快速精通php代码审计,整个学习周期5天 ,建议花一天时间熟悉php语 ...

  5. PHP代码审计基础

    php核心配置 php.ini 基本配置 语法 大小写敏感 运算符 空值的表达式 安全模式 安全模式 safe_mode = off 用来限制文档的存取,限制环境变量的存取,控制外部程序的执行.PHP ...

  6. 【代码审计】PHP代码审计---基础记录

    PHP伪协议 PHP伪协议事实上是其支持的协议与封装协议,支持的种类有以下12种. * file:// - 访问本地文件系统 * http:// - 访问 HTTP(s) 网址 * ftp:// - ...

  7. bugku的一道代码审计基础题:eval

    首先看到 include "flag.php",第一反应就应该是文件包含 直接先?hello=file:////etc, 然后啥也没 那就再检查一下代码,eval(var_dump ...

  8. ref&colon;JAVA代码审计的一些Tips&lpar;附脚本&rpar;

    ref:https://xz.aliyun.com/t/1633/ JAVA代码审计的一些Tips(附脚本) 概述 本文重点介绍JAVA安全编码与代码审计基础知识,会以漏洞及安全编码示例的方式介绍JA ...

  9. Web安全工程师(进阶)课程表

    01-SQL注入漏洞原理与利用 预备知识: 了解HTTP协议,了解常见的数据库.脚本语言.中间件.具备基本的编程语言基础. 授课大纲: 第一章:SQL注入基础 1.1 Web应用架构分析1.2 SQL ...

随机推荐

  1. 高级渲染技巧和代码示例 GPU Pro 7

    下载代码示例 移动设备正呈现着像素越来越高,屏幕尺寸越来越小的发展趋势. 由于像素着色的能耗非常大,因此 DPI 的增加以及移动设备固有的功耗受限环境为降低像素着色成本带来了巨大的压力. MSAA 有 ...

  2. ORA-12519&colon; TNS&colon;no appropriate service handler found 解决&lpar;转&rpar;

    可能是数据库上当前的连接数目已经超过了它能够处理的最大值. select count(*) from v$process --当前的连接数 select value from v$parameter  ...

  3. &lbrack;Ogre&rsqb;&lbrack;地形&rsqb;&lbrack;原创&rsqb;基于OgreTerrain的地形实现

    需要用到的外部图片资源: 在ogre调用时需要多用到的几个外部dll: OgreTerrain_d.dll 需要添加头文件 #include "Ogre\Ogre.h"#inclu ...

  4. Qt之保持GUI响应

    简述 Qter们经常遇到由于耗时操作造成GUI阻塞的问题.其实,这个问题并不难克服,可以采用许多不同的方式,下面我会列举一些可选范围,根据使用情况进行处理. 简述 执行耗时操作 手动事件处理 使用一个 ...

  5. iOS开发笔记 基于wsdl2objc调用asp&period;net WebService

    1.准备 先下载待会要用到的工具 WSDL2ObjC-0.6.zip WSDL2ObjC-0.7-pre1.zip 我用的是WSDL2ObjC-0.6.zip 1.1搭建asp.net WebServ ...

  6. 写程序取自己进程的AEP

    测试程序功能 打印出自己进程的程序入口点地址. 结合OD载入程序,看到的入口点确实是0x004014f0, 说明程序入口点找到了 测试程序 /// @file exam_1_1.c #include  ...

  7. Python交互K线工具 K线核心功能&plus;指标切换

    Python交互K线工具 K线核心功能+指标切换 aiqtt团队量化研究,用vn.py回测和研究策略.基于vnpy开源代码,刚开始接触pyqt,开发界面还是很痛苦,找了很多案例参考,但并不能完全满足我 ...

  8. python&lpar;Django之Logging、API认证&rpar;

    一.Loging模块 用于方便的记录日志的模块 import logging logging.basicConfig(filename='log.log', format='%(asctime)s - ...

  9. AD7729&lowbar;双通道Sigma-Delta ADC

    sigma-delta adc的原理,就是通过一种结构把量化噪声调制到频谱的高端,也即对量化噪声而言,sdm是一个高通滤波器,而对基带信号则等价为一个全通滤波器,这样等价的基带信号的量化噪声就很小了, ...

  10. dll 恐怖的代码调整

    总结一波这998的不得不提的调整代码的心得. 调整代码的背景:现有wps美化代码分散在各个插件里面,导致每次修改一小部分代码,都要全新编译,并且只能跟版本发,所以决定将wps的美化代码整合成一个插件d ...