PHP审计基础
php核心配置
| register_globals | 全局变量注册开关 | 设置为on时,把GET/POST的变量注册成全局变量 | PHP 5.4.0中移除 |
| allow_url_include | 包含远程文件 | 设置为on时,可包含远程文件 | PHP 5.2后默认为off |
| allow_url_fopen | 打开远程文件 | ||
| magic_quotes_gpc | 魔术引号自动过滤 | 设置为on时,自动在GET/POST/COOKIE变量中',",\,NULL的前面加上\ | PHP5不会过滤$_SERVER变量,PHP5.4以后移除 |
| magic_quotes_runtime | 魔术引号自动过滤 | 与mq_gpc的区别:mq_runtime只过滤从数据库/文件中获取的数据 | PHP5.4以后移除 |
| magic_quotes_sybase | 魔术引号自动过滤 | 会覆盖掉_gpc;仅仅转义NULL和把'替换成" | PHP5.4以后移除 |
| safe_mode | 安全模式 | 联动配置指令有很多;...... | PHP5.4以后移除 |
| open_basedir | PHP可访问目录 | 用;分割多个目录,且以前缀而非目录划分 | PHP5.2.3以后范围时PHP_INI_ALL |
| disable_functions | 禁用函数 | 如果使用此指令,切记把dl()函数也加入到禁用列表 | |
| display_errors/error_reporting | 错误显示 | d_errors为off时,关闭错误回显,为on时,可配置e_reporting,等级制 | |
| 。。。 |
审计思路
1)敏感关键字
2)可控变量
3)敏感功能点
4)通读代码
SQL注入
经常出现在登录页面/获取HTTP头/订单处理等地方。
防范
1.addslashes函数
过滤的值范围和_gpc时一样的
2.mysql_[real_]escape_string函数
在PHP 4.0.3以上,\x00 \n \r \ ' " \xla受影响
3.intval等字符转化
上面提到的过滤方式,对int类型注入效果并不好。
4.PDO prepare预编译
XSS漏洞
输出函数:print/print_r/echo/var_dump/printf/sprintf/die/var_export
经常出现在文章发表/评论回复/留言以及资料设置等地方。特别是在发表文章的时候,因为这里大多都是富文本,有各种图片引用/文字格式设置等,所以经常出现对标签事件过滤不严格导致的xss。
CSRF漏洞
CSRF主要用于越权操作,所以漏洞自然在有权限控制的地方,像管理后台/会员中心/论坛帖子以及交易管理等。
黑盒挖掘经验:打开几个有非静态操作的页面,抓包看看有没有token,如果没有的话,再直接请求(不带referer)这个页面,如果返回的数据还是一样的话,那说明很有可能有CSTF漏洞了。
白盒挖掘经验:通读代码看看几个核心文件里面有没有验证token和referer相关的代码。核心文件指被大量文件引用的文件。
文件包含漏洞
include/include_once/require/require_once
文件包含漏洞大多出现在模块加载/模板加载以及cache调用的地方,比如传入的模块名参数,实际上是直接把这个拼接到了包含文件的路径中。
文件包含截断:
1.%00;受限于gpc和addslashes,php5.3之后被修复。
2.././....;不受限gpc,同样在PHP5.3之后被修复。windows下240个.或者./能够截断,linux2038个./组合才能截断
文件上传漏洞
move_uploaded_file
1.未过滤或本地过滤
2.黑名单拓展名过滤
3.文件头/content-type验证绕过
代码执行漏洞
eval/assert/preg_replace/call_user_func/call_user_func_array/array_map等,还有PHP东陶函数$a($b)
preg_replace:读字符串进行正则处理,当pattern部分带/e修饰符时,replacement的值会被当成php代码执行。
call_user_func和array_map等数十个函数...
命令执行漏洞
system/exec/shell_exec/passthru/pcntl_exec/popen/proc_open/另外``实际上时调用shell_exec函数
system/exec/shell_exec/passthru会执行命令并直接回显结果
pcntl_exec:pcntl是PHP的多进程处理拓展,在处理大量任务的情况下会使用到
popen/prc_open不会直接回显结果,而是返回一个文件指针:popen('whoami >> D:2.txt','r')
变量覆盖漏洞
extract/parse_str,import_request_variables则是用在没有开启全局变量注册的时候,调用这个函数则相当于开启了全部变量这侧,PHP5.4以后被取消。
$$
extract需要一定条件,没有第二个参数或者第二个参数extract_type为EXTR_OVERWRITE/EXTR_IF_EXISTS时,可覆盖。
parse_str直接覆盖
import_request_variables把GET/POST/COOKIE的参数注册成变量,用在register_globals被禁止时,需要php4.1~5.4。
业务逻辑漏洞
逻辑漏洞很大,这里单说业务逻辑上面的漏洞。
支付/找回密码/程序安装等。
挖掘经验:通读代码,理解业务流程。
值得关注的点:程序是否可重复安装/修改密码处是否可越权修改其他用户密码/找回密码验证码是否可暴力破解以及修改其他用户密码/cookie是否可预测/cookie验证是否可绕过等。
PHP审计基础的更多相关文章
- ssrf解题记录
ssrf解题记录 最近工作需要做一些Web的代码审计,而我Web方面还比较薄弱,决定通过一些ctf的题目打打审计基础,练练思维,在博客上准备开几个专题专门记录刷题的过程. pwn题最近做的也很少,也要 ...
- Linux基础提高_sudo,行为审计,跳板机
sudo 临时给普通用户赋予root权限的一种方式 echo "%wheel ALL=(ALL) NOPASSWD: ALL" >>/etc/ ...
- Linux实战教学笔记06:Linux系统基础优化
第六节 Linux系统基础优化 标签(空格分隔):Linux实战教学笔记-陈思齐 第1章 基础环境 第2章 使用网易163镜像做yum源 默认国外的yum源速度很慢,所以换成国内的. 第一步:先备份 ...
- ABP框架实践基础篇之开发UI层
返回总目录<一步一步使用ABP框架搭建正式项目系列教程> 说明 其实最开始写的,就是这个ABP框架实践基础篇.在写这篇博客之前,又回头复习了一下ABP框架的理论,如果你还没学习,请查看AB ...
- ABP文档 - 审计日志
文档目录 本节内容: 简介 关于 IAuditingStore 配置 通过特性启用/禁用 注意 简介 维基百科:“一个审计追踪(也叫审计日志)是一个安全相关的时序记录.记录组.和/或记录源和目标,作为 ...
- 解析大型.NET ERP系统 数据审计功能
数据审计,英语表达是Audit,是追踪数据变化的过程,记录数据变化前后的值,供参考分析.通过设置,ERP可以追踪一个表的所有字段的变化,也可以只记录指定的字段的值变化.欧美企业每年都有独立的审计部门, ...
- IT基础架构规划方案三(IT基础软件和系统规划)
IT基础软件和系统规划 操作系统选型规划方案 根据对某集团的实际调研,获取了企业业务应用系统的建设情况,随着企业信息化建设的推进,需要对各种信息化管理系统和应用系统的服务器选型进行选型规划,根据不同的 ...
- java必备基础知识点
Java基础 1. 简述Java的基本历史 java起源于SUN公司的一个GREEN的项目,其原先目的是:为家用消费电子产品发送一个信息的分布式代码系统,通过发送信息控制电视机.冰箱等 2. 简单写出 ...
- 数据库DDL审计
一.为什么需要数据库DDL审计? DDL在生产系统中扮演非常重要的作用. 1)首先从业务角度来说,DDL可能意味着表结构变更,意味着新的版本即将发布,是个重要的时刻. 2)其次从运维角度来说,DDL尤 ...
随机推荐
- latex:公式中的文字
公式环境中的说明文字应置于\mbox命令中.如果已经调用了数学工具宏包或者公式宏包,可改为选用一下3条功能更强的文本命令将简短文字插入公式中. \intertext{文本} 由amsmath宏包提供, ...
- Python全局变量的简单使用
对Pyhon实现静态变量全局变量的方法详解 python不能像C++一样直接定义一个static变量或者通过extern来导入别的库的变量而实现数据共享,但是python的思想是通过模块化来解决这个问 ...
- python3+pyqt5+opencv3简单使用
python3+pyqt5+opencv3简单使用(转载) 关于python3下搭建pyqt5(pycharm)参考这条链接. 对于pyqt的使用个人比较建议ui设计与逻辑功能分开开发. 下面介绍下简 ...
- 【Nginx】如何基于主从模式搭建Nginx+Keepalived双机热备环境?这是最全的一篇了!!
写在前面 最近出版了<海量数据处理与大数据技术实战>,详情可以关注 冰河技术 微信公众号,查看<我的<海量数据处理与大数据技术实战>出版啦!>一文. 也有不少小伙伴 ...
- Shader之溶解效果的几种实现方法
这里通过 “是否丢弃像素”的2种方法,写2个shader,效果是一样的,也提到了,丢弃某个像素的3种方式. 是否丢弃: 1.通过脚本控制shader变量判断当前是否丢弃像素,需要额外脚本: 2.sha ...
- [BUUOJ记录] [GXYCTF2019]BabySQli
有点脑洞的题,题目不难,主要考察注入和联合查询的一个小特点 进入题目是一个登录框,看看源代码,在search.php文件中发现了这个 大写的字母和数字很明显是base32,先用base32解码一下,发 ...
- [BUUOJ记录] [ACTF2020 新生赛]Include
本题主要考查了利用php://filter伪协议进行文件包含 进入题目根据Tip进入正题,可以看到URL中存在文件包含(题目名也很直接) 首先考虑 "php://input"伪协议 ...
- Jmeter 断言-检查点
1. http请求/添加/断言/响应断言 2. 输入一个返回数据里没有的参数 3.果然报错了 断言的作用是用来查看接口文档里是否有自己想要的数据!
- blazemeter和jmeter
前言 咸鱼的生活总是那么短暂,年轻还是要多学习 blazemeter BlazeMeter是一款可以记录所有HTTP流量并在10分钟内创建一个负载测试并且与Apache JMeter兼容的chrome ...
- centos 遇到/dev/mapper/cl-root 100% 解决方法
yum安装docker时报错[Errno 2] No usable temporary directory found in ['/tmp', '/var/tmp', '/usr/tmp', '/'] ...