一、php中常见的危险函数和审计要点

  危险函数(功能过于强大)

    参数是否外部可控,有没有正确的过滤。

  PHP获取外界传入参数是通过下面几个全局函数的形式,所以审计参数传入经常要和下面几个变量打交道

  PHP中危险函数有五大特性:

变量 说明
$_GET 数组,存放着所有通过URL参数传递的数据
$_POST 数组,当HTTP POST请求的Content-Type是application/x-www-form-urlencoded或multipart/form-data的部分解析成关联数组
$_FILES 数据,存放着HTTP POST上传的文件信息
$_COOKIE 数组,存放着HTTP头里面cookie段内容
$_REQUEST 数组,默认情况下包含了$_GET, $_POST, $_COOKIE的数据
$_SERVER 数组,包含了HTTP头,服务器环境等信息
$_SESSION 数组,存放当前会话可用的session变量

  参数是否可控

  执行任意代码函数

  1)把传入的字符串直接当成php代码直接执行,如:

  A B C D
1 函数 函数说明 例子 运行结果
2 assert 判断一个断言是否为false assert('print(123)') 输出123
3 eval 把一个字符串当做php代码执行 eval('echo 123') 输出123
4 create_function 用给的一个字符串创建匿名函数 create_function('$a','print($a);')(123) 输出123

   2)通过引入文件的形式执行php代码,如:(利用:查看这些引入文件参数是否外部可控)

  A B C D
1 函数 函数说明 例子 结果
2 include 包含并运行指定文件 include '1.php' 包含文件1.php,并执行里面的代码
3 include_once 包含并运行指定文件 include_once '1.php' 包含文件1.php,并执行里面的打码
4 require 包含并运行指定文件 require '1.php' 包含文件1.php,并执行里面的代码
5 require_once 包含并运行指定文件 require_once '1.php' 包含文件1.php,并执行里面的代码

  3)数据处理函数

  函数 函数说明 例子 结果
1 preg_replace 使用正则替换内容,php7之前的正则表达式参数可以开启\e的模式,执行任意代码 preg_replce("/(.)/e",'print(\1),'123');

php5下输出123

2 array_map 为数组的每个元素应用回调函数 $b=array_map('assert',['print(123)']); php5下输出123
3 array_filter 用回调函数过滤数组中的单元 array_filter(['print(123)'],'assert'); php5下输出123
4 array_walk 使用用户自定义函数对数组中的每个元素做回调处理

$a=['print(123)'];array_walk($a,'assert')

php5下输出123
5 call_user_func 把第一个参数作为回调函数调用 call_user_func('assert','print(123)'); 输出123
         

  4)能够读取网络资源的函数(配置  allow_url_include=1  才可以使用)

  函数 函数说明 例子 结果
1 curl系列 发起网络请求    
2 file_get_contents 原本功能是读取文件,但是支持封装协议,所以可以读取网络上的资源 file_get_contents('https://url.com') 请求url.com
3 file 原本功能是读取文件,但是支持封装协议,所以可以读取网络上的资源 file('https://url.com') 请求url.com
4 fopen 原本功能是读取文件,但是支持封装协议,所以可以读取网络上的资源 fopen('https://url.com') 请求url.com
5

copy

原本功能是复制文件,但是支持封装协议,所以可以读取网络上的资源 copy('https://url.com') 请求url.com,并保存txt文档
         

  5)能够执行系统命令或者调用外部程序的函数

函数 函数说明   例子 结果
exec  执行一个外部程序 exec('touch 1.txt') 在当前目录下生成1.txt

shell_exec

通过shell执行命令,并且将完整的输出以字符串的方式返回 shell_exec('touch 1.txt') 在当前目录下生成1.txt
system 执行外部程序,并显示输出 system('touch 1.txt') 在当前目录下生成1.txt
passthru 执行外部程序,并显示输出 passthru('touch 1.txt') 在当前目录下生成1.txt
popen 打开进程文件指针 popen('touch 1.txt','r') 在当前目录下生成1.txt
proc_open 执行一个命令,并打开用来输入/输出的文件指针 proc_open('touch 1.txt',[],$a) 在当前目录下生成1.txt
`` 反引号包含的内容会当成系统命令执行 `touch 1.txt` 在当前目录下生成1.txt

  6)能够修改运行时候的上下文环境

函数 函数说明 例子 结果
extract 从数组中将变量导入到当前的符号表,审计时候需要判别传输数组是否外部可控 $a='1';extract(['a'=>'2']);echo $a 输出2

parse_str

将字符串解析成多个变量 $a='1';parse_str('a=2');echo $a 输出2
ini_set 修改运行时php配置 ini_set('memory_limit','2048M') 设置运行时最大占用额内存为2048M

PHP审计(一)的更多相关文章

  1. ABP(现代ASP.NET样板开发框架)系列之19、ABP应用层——审计日志

    点这里进入ABP系列文章总目录 基于DDD的现代ASP.NET开发框架--ABP系列之19.ABP应用层——审计日志 ABP是“ASP.NET Boilerplate Project (ASP.NET ...

  2. ABP文档 - 审计日志

    文档目录 本节内容: 简介 关于 IAuditingStore 配置 通过特性启用/禁用 注意 简介 维基百科:“一个审计追踪(也叫审计日志)是一个安全相关的时序记录.记录组.和/或记录源和目标,作为 ...

  3. 解析大型.NET ERP系统 数据审计功能

    数据审计,英语表达是Audit,是追踪数据变化的过程,记录数据变化前后的值,供参考分析.通过设置,ERP可以追踪一个表的所有字段的变化,也可以只记录指定的字段的值变化.欧美企业每年都有独立的审计部门, ...

  4. Linux简单的日志审计

    生产环境日志审计解决方案 所谓的日志审计,就是记录所有系统及相关的用户行为,并且可以自动分析.处理.展示(包括文本或者录像) 1)     :通过环境变量以及rsyslog服务进行全部日志审计(信息太 ...

  5. ABP理论学习之审计日志

    返回总目录 本篇目录 介绍 配置 通过特性开启/关闭 注意 我项目中的例子 介绍 维基百科说: "审计跟踪(也叫审计日志)是与安全相关的按照时间顺序的记录,记录集或者记录源,它们提供了活动序 ...

  6. Oracle 10g安全加固(审计、监听密码)

    环境: Linux 6.4 + Oracle 10.2.0.4 1. Oracle 10g 审计功能 2. 对数据库监听器的关闭和启动设置密码 1. Oracle 10g 审计功能 Oracle 10 ...

  7. Linux系统实战项目——sudo日志审计

    Linux系统实战项目——sudo日志审计   由于企业内部权限管理启用了sudo权限管理,但是还是有一定的风险因素,毕竟运维.开发等各个人员技术水平.操作习惯都不相同,也会因一时失误造成误操作,从而 ...

  8. 利用paramiko模块实现堡垒机+审计功能

    paramiko模块是一个远程连接服务器,全真模拟ssh2协议的python模块,借助paramiko源码包中的demos目录下:demo.py和interactive.py两个模块实现简单的堡垒机+ ...

  9. 数据库DDL审计

    一.为什么需要数据库DDL审计? DDL在生产系统中扮演非常重要的作用. 1)首先从业务角度来说,DDL可能意味着表结构变更,意味着新的版本即将发布,是个重要的时刻. 2)其次从运维角度来说,DDL尤 ...

  10. [转]ORACLE 审计功能

    审计是对选定的用户动作的监控和记录,通常用于: u          审查可疑的活动.例如:数据被非授权用户所删除,此时安全管理员可决定对该 数据库的所有连接进行审计,以及对数据库的所有表的成功地或不 ...

随机推荐

  1. 使用min-content实现容器宽度自适应于内部元素

    前言 设计师可以分为如下两类: 先做好设计,然后将内容放入静态框架中 优秀的设计师充分考虑内容的各个方面及其上下文,并创建适合于内容的设计 HTML原生就是响应式的(HTML内容在视口内流式的分布). ...

  2. canvas制作倒计时效果

  3. <Android开源库 ~ 1> GitHub Android Libraries Top 100 简介

    转载自GitHub Android Libraries Top 100 简介 本项目主要对目前 GitHub 上排名前 100 的 Android 开源库进行简单的介绍, 至于排名完全是根据 GitH ...

  4. python模块详解 time与date time

    模块的分类: a:标准库 内置模块 如sys,os等 b:开源模块 大神封装好的 直接可以拿来用的. c:自定义模块 自己封装的模块 Python中通常表示时间的方式有:时间戳.格式化的日期.元组(九 ...

  5. expres webpack es6 babel 构建多页系统开发架构

    开始写点什么... 只是一个思路........

  6. User Agent字符串列表

    User Agent字符串列表 --之心 User Agent中文名为用户代理,是Http协议中的一部分,属于头域的组成部分,User Agent也简称UA.它是一个特殊字符串头,是一种向访问网站提供 ...

  7. C++指针、引用、const

    ; int *p = &a; //定义指针p指向变量a *p = ; //*p代表a的值 ; p = &b; //p指向变量b *p = ; //此时*p代表b的值 ] = {,,}; ...

  8. 使用ABAP代码创建S/4HANA里的Sales Order

    下图是使用ABAP代码创建的S/4HANA的Sales Order的截图: 其中红色区域的值是我代码里硬编码的,而蓝色是函数SD_SALESDOCUMENT_CREATE自己创建的. 来看下代码: D ...

  9. IOS 搜索条制作(UITextField 封装)

    封装到 HMSearchBar.h / .m #import <UIKit/UIKit.h> @interface HMSearchBar : UITextField + (instanc ...

  10. 【[TJOI2018]异或】

    写板子了,可持久化\(Trie\)的板子了 其实和主席树写法类似,还是存好左右儿子之后存好权值 之后差分去查询就好了 这道题第一问我们直接\(dfs\)序转化成区间 第二问搞成\(x,y,lca(x, ...