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

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  模板更改(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  http://www.cnblogs.com/fox-yu/

转载于:https://www.cnblogs.com/fox-yu/p/7746394.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/281977.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

全新升级的AOP框架Dora.Interception[4]: 基于表达式的拦截器注册

基于特性标注的拦截器注册方式仅限于将拦截器应用到自己定义的类型上&#xff0c;对于第三方提供的类型就无能为力了。对于Dora.Interception来说&#xff0c;拦截器注册本质上建立拦截器与一个或者多个目标方法之间的映射&#xff0c;所以最笨的方式就是利用反射的方式得到表示…

mysql8.0.12插件_MySQL8.0.12 安装及配置

MySQL8.0.12 安装及配置发布时间&#xff1a;2018-08-07 10:39,浏览次数&#xff1a;274, 标签&#xff1a;MySQL一.安装1.从网上下载MySQL8.0.12版本&#xff0c;下载地址&#xff1a;https://dev.mysql.com/downloads/mysql/2. 下载完成后解压我解压的路径是&#xff1a;D:\J…

python模块之hashlib

hashlib模块实现了多种安全哈希和信息摘要算法的通用接口&#xff0c;包括FIPS中定义的SHA1, SHA224, SHA256, SHA384, SHA512以及RFC 1321中定义的MD5 注意点&#xff1a;1. adler32及crc32哈希由zlib模块提供2. 某些算法已知存在哈希碰撞弱点 哈希算法 每个hash算法都有一个同…

记一次阿里电面经历

昨天下午&#xff08;3/19&#xff09;三点多钟&#xff0c;接到了一个杭州的电话&#xff0c;是阿里的。问我是否方便聊聊。我说我在上课&#xff0c;四点下课。然后他就四点多钟的时候又打了一次过来。项目经历上来就问我有无大型项目的经历。不好意思&#xff0c;我说无。。…

C语言程序设计第三次作业

&#xff08;一&#xff09;改错题 计算f(x)的值&#xff1a;输入实数x&#xff0c;计算并输出下列分段函数f(x)的值&#xff0c;输出时保留1位小数。 输入输出样例1&#xff1a;   Enterr x: 10.0   f(10.0) 0.1 输入输出样例2&#xff1a;   Enter x: 234   f(234.0…

mysql数据库项目化教程郑小蓉_MySQL数据库项目化教程(高等职业教育“十三五”规划教材(软件技术专业))...

《MySQL数据库项目化教程/高等职业教育十三五规划教材(软件技术专业)》是一本介绍MySQL数据库基础知识的入门教材&#xff0c;采用项目驱动方式循序渐进地介绍MySQL各个模块的知识。主要内容包括&#xff1a;Windows下MySQL的安装&#xff0c;MySQL服务的启动与停止&#xff0c…

WPF-09 ManualResetEventSlim信号量

业务场景如下&#xff1a;WPF应用程序后台有个定时任务在接收PLC硬件数据(该线程接收完数据之后, 会重新启动一个新线程继续接收.....)&#xff0c;当应用程序关闭时, 我们得确保接收PLC硬件数据的线程完成之后,再关闭应用程序&#xff0c;否则会造成数据丢失。上面的业务场景是…

【bzoj3033】太鼓达人 DFS欧拉图

题目描述 给出一个整数K&#xff0c;求一个最大的M&#xff0c;使得存在一个每个位置都是0或1的圈&#xff0c;圈上所有连续K位构成的二进制数两两不同。输出最大的M以及这种情况下字典序最小的方案。 输入 一个整数K。 输出 一个整数M和一个二进制串&#xff0c;由一个空格分隔…

Redis 集合处理

学习了列表之后&#xff0c;发现了Redis处理字符串的功能强大。 为了适应不同场景的需求&#xff0c;还有一个用的很多的就是集合。 Redis提供的集合支持的类型是字符串。并且集合中的元素值是唯一的&#xff0c;也就是说不能出现重复数据。 而且&#xff0c;集合的实现是通过哈…

fpga mysql_FPGA的一些琐碎知识整理

1.生产FPGA的厂家有&#xff1a;ALTERAXILINXATCELLatticeps:Altera和Xilinx主要生产一般用途FPGA&#xff0c;其主要产品采用SRAM工艺Actel主要提供非易失性FPGA&#xff0c;产品主要基于反熔丝工艺和FLASH工艺ps: 熔丝&#xff0c;顾名思义&#xff1a;把丝熔掉&#xff0c;反…

使用增量备份修复DG中的GAP

问题描述 oracle中DG出现主备不同步现象&#xff0c;alert日志报警有gap信息&#xff0c;但是v$archive_gap视图查不到任何信息。同时主库上的对应归档已经删除且没有备份 解决方案 1.查询备库的scn SQL> select current_scn from v$database; 这时有可能出来的scn是以科学计…

C# 反射类Assembly用法举例

概述程序运行时&#xff0c;通过反射可以得到其它程序集或者自己程序集代码的各种信息&#xff0c;包括类、函数、变量等来实例化它们&#xff0c;执行它们&#xff0c;操作它们&#xff0c;实际上就是获取程序在内存中的映像&#xff0c;然后基于这个映像进行各种操作。Assemb…

团队作业

团队&组员&#xff1a; 没有组名&#xff0c;大概是因为我们组虽然有10个人&#xff0c;但是好像只起到人多的地方就容易开车搞笑&#xff0c;没有内涵&#xff0c;取出来的都是秋名山吴彦组这样的开车组名&#xff0c;在大家的的强烈建议和玩笑中&#xff0c;决定了没有组…

算法系列【希尔排序】篇

常见的内部排序算法有&#xff1a;插入排序、希尔排序、选择排序、冒泡排序、归并排序、快速排序、堆排序、基数排序等。用一张图概括&#xff1a;关于时间复杂度&#xff1a;1. 平方阶 (O(n2)) 排序各类简单排序&#xff1a;直接插入、直接选择和冒泡排序。2. 线性对数…

sql查询索引语句_sql优化总结--基于sql语句优化和索引优化

概述最近做查询&#xff0c;统计和汇总。由于数据量比较庞大&#xff0c;大部分表数据上百万&#xff0c;甚至有的表数据上千万。所以在系统中做sql优化比较多&#xff0c;特此写一篇文章总结一下关于sql优化方面的经验。导致查询缓慢的原因1、数据量过大2、表设计不合理3、sql…

电商行业运维实践

电商行业运维实践&#xff0d;&#xff0d;&#xff0d;&#xff0d;&#xff0d;&#xff0d;&#xff0d;&#xff0d;&#xff0d;&#xff0d;&#xff0d;&#xff0d;&#xff0d;&#xff0d;&#xff0d;&#xff0d;&#xff0d;&#xff0d;&#xff0d;&#xff0d;…

数据结构小总结(成都磨子桥技工学校数据结构前12题)

[pixiv] https://www.pixiv.net/member_illust.php?modemedium&illust_id34352147 暑假的作业&#xff0c;颓颓的我总算是写完了 线段树 线段树是一个高级玩意&#xff0c;不仅可以求区间和&#xff0c;区间最大等等的简单问题&#xff0c;灵活运用还有好多变种。自从学…

【九章算法免费讲座第一期】转专业找CS工作的“打狗棒法”

讲座时间&#xff1a; 美西时间6月5日18&#xff1a;30-20&#xff1a;00&#xff08;周五&#xff09; 北京时间6月6日09&#xff1a;30-11&#xff1a;00&#xff08;周六a.m&#xff09; 讲座安排&#xff1a; 免费在线直播讲座 报名网址&#xff1a; http://t.cn/R2XgMSH&a…

golang mysql 防注入_Go,Gorm 和 Mysql 是如何防止 SQL 注入的

Go&#xff0c;Gorm 和 Mysql 是如何防止 SQL 注入的SQL 注入和 SQL 预编译技术什么是 SQL 注入所谓SQL注入(sql inject)&#xff0c;就是通过把SQL命令插入到Web表单提交或输入域名或页面请求的查询字符串&#xff0c;最终达到欺骗服务器执行恶意的SQL命令。具体来说&#xff…

wav2midi 音乐旋律提取算法 附可执行demo

前面提及过&#xff0c;音频指纹算法的思路。 也梳理开源了两个比较经典的算法。 https://github.com/cpuimage/shazam https://github.com/cpuimage/AudioFingerprinter 后来一段时间&#xff0c;稍微看了下这两个算法&#xff0c;还有不少可以精简优化的空间。 例如抗噪&…