【Web安全】PHP安全

news2024/11/25 23:13:19

一、文件包含漏洞

严格来说,文件包含就是代码注入的一种。代码注入,其原理就是注入一段用户能控制的脚本或代码并让服务器端执行。代码注入的典型代表就是文件包含。文件包含可能会出现在JSP、PHP、ASP等语言中,常见函数如下:

PHP:include()、include_once()、require()、require_once()、fopen()、readfile()……

JSP/Servlet:ava.io.File()、java.io.FileReader()……

ASP:include file 、include virtual……

PHP当使用include()、include_once()、require()、require_once()这四个函数包含一个新文件时,该文件会被当做PHP代码执行,且不在意被包含的文件是什么类型。

想要成功利用文件包含漏洞,需要满足两个条件:
include()等函数通过动态变量的方式引入需要包含的文件
用户能够控制该动态变量

1.1 本地文件包含

可以温习一下dvwa的文件包含

DVWA文件包含漏洞

通常控制参数的值为../../etc/password,代表php将访问/etc/password文件

字符串截断也是文件包含中常用的技巧

%00截断:可以用0字节(\x00)作为字符串结束符

长度截断:目录字符串,在Windows下256字节、Linux下4096字节时会达到最大值,最大值长度之后的字符串会被丢弃

可构造:./././././././././././././abc

/abc

../1/abc/../1/abc/../1/abc

通过../../../这种方式返回上层目录,这种方式又被称为”目录遍历

可以通过不同编码方式来绕过

但是当PHP配置了open_basedir时,会使得目录遍历失效。

open_basedir的作用是限制在某个特定目录下PHP能打开的文件,其作用与safe_mode是否开启无关。

主要注意的是,open_basedir的值是目录的前缀

如果open_basedir = /home/app/aaa

那么以下目录都是合理的

/home/app/aaa
/home/app/aaa123
/home/app/aaabbb

1.2 远程文件包含

如果PHP的配置选项allow_url_include=ON,则include和require函数可以加载远程文件

1.3 本地文件包含的利用技巧

  1. 包含用户上传的文件

如果文件内容包含PHP代码,则这些代码会被include()加载后执行
  1. 包含data://或php://input等伪协议

前提是allow_url_include=ON

可以参考之前的文章:php文件包含常用伪协议

  1. 包含Session文件

PHP默认生成的Session文件往往放在/tmp目录下
/tmp/sess_SESSIONID
  1. 包含日志文件,比如Web Server的access log

服务器一般会往Web Server的access log里记录客户端的请求信息,在error_log里记录出错请求。因此攻击者可以间接地将PHP代码写到日志文件中,在文件包含时,只需要包含日志文件即可。
  1. 包含/proc/self/environ文件

http://www.website.com/view.php?page=../../../../../proc/self/environ
通常在User-Agent里注入PHP代码最终完成攻击
  1. 包含上传的临时文件

  1. 包含其他应用创建的文件,比如数据库文件、缓存文件、应用日志等

二、变量覆盖漏洞

2.1 全局变量覆盖

PHP中使用变量不需要初始化,当register_globals=ON时,变量来源于各个不同的地方,很可能会导致安全问题。

类似的,通过¥GLOBALS获取的变量,也可能导致变量覆盖

2.2 extract()变量覆盖

extract() 函数从数组中将变量导入到当前的符号表。

extract(array,extract_type,prefix)

该函数使用数组键名作为变量名,使用数组键值作为变量值。针对数组中的每个元素,将在当前符号表中创建对应的一个变量。

第二个参数 type 用于指定当某个变量已经存在,而数组中又有同名元素时,extract() 函数如何对待这样的冲突。最常见的两个值是”EXTR_OVERWRITE“和”EXTR_SKIP“。

当值为”EXTR_OVERWRITE“时,如果变量名冲突则覆盖已有变量,值为”EXTR_SKIP“则表示跳过不覆盖。默认是”EXTR_OVERWRITE“。

2.3 遍历初始化变量

常见的一些以遍历的方式释放变量的代码,可能会导致变量覆盖。

$chs = '';
if($_POST && $charset != 'utf-8'){
    $chs = new Chinese('UTF-8',$charset";
    foreach($_POST as $key => $value){
        $$key = $chs->Convert ($value);
    }
    unset($chs);

若提交参数chs,则可能覆盖变量”$chs“的值。

2.4 import_request_variavles变量覆盖

bool import_request_variables ( string $types [, string $prefix ] )

import_request_variavles()将GET、POST、Cookie中的变量导入到全局,使用这个函数只需要简单地指定类型即可。第二个参数是为导入的变量添加的前缀,若没有指定,则将覆盖全局变量。

2.5 parse_str()变量覆盖

parse_str(string,array)

该函数用于解析URL的query string,但是当参数值能被用户控制时,可能导致变量覆盖

如果指定了第二个参数,则会将query string中的变量解析后存入该数组变量中。因此在使用该函数时,应该养成指定第二个参数的好习惯

针对覆盖变量的安全建议
1.确保register_globals = OFF
2.熟悉可能造成变量覆盖的函数和方法,检查用户能否控制变量来源
3.养成初始化变量的好习惯

三、代码执行漏洞

3.1 危险函数执行代码

危险函数,例如popen()、system()、passthru()、exec()等都可以执行系统命令

eval()函数也可以执行PHP代码

3.2 文件写入执行代码

可以参考vulhub漏洞复现的文章

CVE-2016-3088 ActiveMQ任意文件写入漏洞

3.3 其他执行代码方式

直接执行代码的函数

PHP:eval()、assert()、system()、exec()、shell_exec()、passthru()、escapeshellcmd()、pcntl_exec()等

文件包含函数

PHP:include()、include_once()、require()、require_once()

本地文件写入函数

file_put_contents()、fwrite()、fputs()等

preg_replace()代码执行

如果是/e模式,则允许代码执行(也可能通过%00截断注入/e)
可参考 Thinkphp 2.x 任意代码执行的漏洞复现: Thinkphp 2.x 任意代码执行

动态函数执行

调用函数直接导致代码执行,create_function()也具有此能力

Curly Syntax

PHP的Curly Syntax也能导致代码执行,它将执行{……}间的代码,并将结果替换回去
如:
<?php
$var = "I was innocent until ${'ls'} appeared here";
?>
ls命令将列出本地目录的文件并将结果返回

回调函数执行代码

很多函数都可以执行回调函数,当回调函数用户可控时,将导致代码执行

unserialize()导致代码执行

unserialize()就是反序列化函数,它能将序列化的数据重新映射为PHP变量。但是unserialize()在执行时如果定义了__destruct()函数或wakeup()函数,这两个函数将执行。
unserialize()代码执行有两个条件,一是 unserialize()的参数用户可控,这样可以构造出需要反序列化的数据结构;二是 存在__destruct()函数或wakeup()函数,这两个函数决定执行的代码。

四、定制安全的PHP环境

推荐php.ini中一些相关安全参数的配置

  • reguster_globals=OFF

  • open_basedir在设置目录时应该在最后加上”/",否则会被认为是前缀

  • allow_url_include=OFF

  • allow_uel_fopen=OFF

  • display_errors=OFF

  • log_errors=ON

  • magic_quotes_gpc=OFF

  • cgi.fix_pathinfo=0

  • session.cookie_httponly=1

  • session.cookie_secure=1

  • ……

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

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

相关文章

好记又实用的获取电脑型号方法

个人常用的方法 方法二最好记又好用。 方法一 dxdiag命令 按下键盘WINR调出运行在输入框输入dxdiag命令后&#xff0c;按下回车&#xff1b;进入DirectX诊断工具&#xff0c;便可查看系统型号等信息。 这里就会显示系统型号。 方法二 设备和打印机 控制面板-查看方式-小图…

Kubernetes学习(二)Pod

创建Pod kubectl创建nginx pod 编写 nginx pod的yaml文件 apiVersion: v1 kind: Pod metadata:name: my-nginxlabels:name: my-nginx spec:containers:- image: nginxname: my-nginxresources:limits:memory: "128Mi"cpu: "500m"ports:- name: nginx-po…

周期性温度和压力波的PID自动控制解决方法

摘要&#xff1a;目前各种PID控制器仪表常用于简单的设定点&#xff08;Set Point&#xff09;和斜坡&#xff08;Ramp&#xff09;程序控制&#xff0c;但对于复杂的正弦波等周期性变量的控制则无能为力。为了采用标准PID控制器便捷和低成本的实现对正弦波等周期性变量的自动控…

TiDB Serverless 和技术生态全景

数据库不是单一软件&#xff0c;而是一个生态体系。成为一款好用的数据库&#xff0c;除了产品自身的能力外&#xff0c;繁荣的技术生态体系也至关重要&#xff0c;既可以提升使用体验&#xff0c;又可以降低使用门槛。 PingCAP 在 2022 年 11 月 1 日正式发布了 TiDB Cloud Se…

浏览器的渲染过程解析

文章目录浏览器渲染进程有哪些&#xff1f;浏览器的渲染过程浏览器渲染进程有哪些&#xff1f; GUI线程&#xff1a;负责渲染浏览器页面&#xff0c;解析html&#xff0c;css&#xff0c;构建DOM树&#xff0c;CSS规则树&#xff0c;渲染树和绘制页面&#xff0c;当界面需要重…

Unity使用webSocket与服务器通信(一)搭建一个简单地服务器和客户端

你想在unity WebGL里面使用TCP通信吗&#xff0c;那么你可以用一用webSocket。当然&#xff0c;桌面端也可以使用webSocket&#xff0c;这样Unity多平台发布的时候&#xff0c;业务层的通信代码可以使用一套&#xff0c;而不是桌面用socket&#xff0c;网页用http… 一、什么是…

精选博客系列|VMware 帮助服务提供商构建零碳未来

当谈到可持续发展的未来时&#xff0c;你首先想到的是哪些技术&#xff1f;大多数人会说电动汽车、太阳能电池板或风电场。但是&#xff0c;我们越来越需要将另一种技术放在列表的首位&#xff1a;通信网络。 领先的通信服务提供商 (CSP) 越来越多地致力于环境可持续性的前沿。…

IDCF DevOps黑客马拉松挑战赛(北京 上海 广州 杭州 大连)

IDCF DevOps黑客马拉松&#xff1a;“打造端到端的DevOps人才”&#xff01; “在36小时内从0到1打造并发布一款产品&#xff01;” DevOps实践与敏捷开发正在席卷IT公司&#xff0c;精益创业、设计思维、增长黑客等硅谷创新思维与方法&#xff0c;正在被越来越多具有真知灼见…

RestTemplate使用HttpClient连接池

文章目录RestTemplate使用HttpClient连接池ClientHttpRequestFactorySimpleClientHttpRequestFactorySimpleClientHttpRequestFactory 设置超时时间HttpURLConnection的缺点HttpComponentsClientHttpRequestFactoryPoolingHttpClientConnectionManager配置连接池HttpClient总结…

【教学典型案例】26.nacos的命名空间名字和id不一致

一&#xff1a;背景介绍 由于dev和localhost使用的同一个命名空间&#xff0c;我们多个服务相互调用的时候&#xff0c;由于开发人员本地启动把本地服务注册到和dev同一个命令空间下&#xff0c;导致dev环境部分功能不能使用&#xff08;在线人员列表无法加载出数据&#xff0…

DatenLord前沿技术分享 No.19

达坦科技专注于打造新一代开源跨云存储平台DatenLord&#xff0c;致力于解决多云架构、多数据中心场景下异构存储、数据统一管理需求等问题&#xff0c;以满足不同行业客户对海量数据跨云、跨数据中心高性能访问的需求。GPU编程可以大幅提升计算速度和效率&#xff0c;从而使得…

门诊患者正在流失?如何打造差异化服务,成功破局,留住患者?

无论是诊所还是医院&#xff0c;长久经营发展始终是围绕品牌、医生、技术、服务这些核心要素来进行运营。 尤其是民营医疗机构&#xff0c;要让患者满意认可&#xff0c;除了医生与诊疗技术&#xff0c;医疗服务也尤为重要。 但是很多民营医疗机构往往更注重前者&#xff0c;而…

新号涨粉22w,搞笑博主再次爆火,小红书近期创作趋势是什么?

2月借势元宵、情人节&#xff0c;小红书平台又涌现出哪些黑马博主&#xff1f;品牌在投放种草方面有何亮眼表现&#xff1f;为洞察小红书平台的内容创作趋势及品牌营销策略&#xff0c;新红推出2月月度榜单&#xff0c;从创作者及品牌两方面入手&#xff0c;解析月榜数据&#…

maven镜像源及代理配置

在公司使用网络一般需要设置代理&#xff0c; 我在idea中创建springboot工程时&#xff0c;发现依赖下载不了&#xff0c;原以为只要浏览器设置代理&#xff0c;其他的网络访问都会走代理&#xff0c;经过查资料设置了以下几个地方后工程创建正常&#xff0c;在此记录给大家参考…

分享5款用了一段时间,个人觉得非常nice的软件

大家在使用Windows办公、学习的时候&#xff0c;有没有觉得自己的电脑差了点意思&#xff1f;比如&#xff1a;电脑桌面上太杂乱、装满了各类五花八门的软件、桌面壁纸不美观等。今天&#xff0c;给大家分享五款个人用了段时间后&#xff0c;觉得非常nice的软件。 1.鼠标可视化…

【PPT】《我去!还有这种网站?》-知识点目录

《我去&#xff01;还有这种网站&#xff1f;》 1. Vega AI 输入提示&#xff1a; girl&#xff0c;粉头发2. 物理画线&#xff1a;休闲小游戏 3. Dialogue&#xff1a;影视台词搜索 4. Can you run it&#xff1a;游戏设备要求查询 5. Deviceshots&#xff1a;使用设备边…

Linux:ip addr命令分析

运行命令 [rootlocalhost ~]# ip addr 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00inet 127.0.0.1/8 scope host lovalid_lft forever preferred_lft foreveri…

关于【网格结构】岛屿类问题的通用解法DFS(深度遍历)遍历框架+回溯+剪枝总结

最近在刷力扣时遇见的问题&#xff0c;自己总结加上看了力扣大佬的知识总结写下本篇文章&#xff0c;我们所熟悉的 DFS&#xff08;深度优先搜索&#xff09;问题通常是在树或者图结构上进行的。而我们今天要讨论的 DFS 问题&#xff0c;是在一种「网格」结构中进行的。岛屿问题…

FIFO IP Core

FIFO IP Core 先进先出的缓存器常常被用于数据的缓存&#xff0c;或者高速异步数据交互&#xff08;跨时钟信号传递&#xff09;和RAM和ROM的区别是没有地址线&#xff0c;无法指定地址 写时钟(Write Clock Domain)&#xff0c;读时钟写复位&#xff08;wr_rst)&#xff0c;读…

JAVA开发(史上最完整追本溯源JAVA历史、发展和学习)

(第二次世界大战1931-1945) 世界上最先进的技术往往是由于战争催生&#xff0c;在第二次世界大战中除了飞机&#xff0c;坦克和大炮的武器较量外&#xff0c;在隐秘战线的情报工作其实更为重要&#xff0c;在军队将领来往的电报中&#xff0c;为了防止军事情报的泄漏&#xff…