CTF攻防世界小白刷题自学笔记13
1.fileinclude,难度:1,方向:Web
题目来源:宜兴网信办
题目描述:无
给一下题目链接:攻防世界Web方向新手模式第16题。
打开一看给了很多提示,什么language在index.php的第九行,flag在flag.php中,但事情显然不会这么简单,果然无论是输入flag.php还是index.php都是没有用的。
遇事不决,按F12打开开发者工具,果然暗藏了一段PHP语句,
好吧,我又遇到知识盲区了,现在我又打开大佬的writeup来摆烂了,同时借助GPT来分析。
代码分析
-
错误显示设置:
php
if( !ini_get('display_errors') ) { ini_set('display_errors', 'On'); } error_reporting(E_ALL);
- 这部分代码首先检查 PHP 配置中是否打开了错误显示。如果没有,则将其打开。接着设置错误报告级别为
E_ALL
,意味着将报告所有类型的错误。
- 这部分代码首先检查 PHP 配置中是否打开了错误显示。如果没有,则将其打开。接着设置错误报告级别为
-
处理 Cookie:
php
$lan = $_COOKIE['language']; if(!$lan) { @setcookie("language","english"); @include("english.php"); } else { @include($lan.".php"); }
- 该代码获取名为
language
的 Cookie 值。如果该值不存在,则会设置默认语言为english
并包含english.php
文件。 - 如果 Cookie 已存在,则会根据 Cookie 的值包含对应的语言文件(例如
spanish.php
、french.php
等等,具体取决于该 Cookie 的值)。
- 该代码获取名为
-
读取和输出文件内容:
php
$x=file_get_contents('index.php'); echo $x;
- 这部分代码使用
file_get_contents
函数读取当前目录下的index.php
文件的内容,并将其内容输出到页面。
- 这部分代码使用
潜在问题
-
文件包含漏洞:
- 该代码存在潜在的文件包含漏洞,尤其是在
@include($lan.".php");
行。如果$lan
的值不是经过严格验证的,攻击者可能会利用此针对文件包含的漏洞来包含任意文件,甚至可能导致代码执行。 - 例如,如果攻击者能够设置 Cookie 值为
../../../../../etc/passwd
(假设是个类 Unix 系统),就可能导致服务器包含一个敏感文件,进而泄露信息。
- 该代码存在潜在的文件包含漏洞,尤其是在
-
安全性问题:
- 在使用
include
时不应该直接使用来自用户输入的数据,应该对输入进行验证和过滤,防止包含恶意文件。 - 小心使用
@
符号,它会抑制错误信息的输出,可能会掩盖潜在的问题,增加调试难度。
- 在使用
-
不安全的错误显示:
- 虽然在某些情况下显示错误有助于调试,但在生产环境中开启错误显示可能会泄露敏感信息。
说人话就是利用语句中的cookie竟然敢随便接收数据,好好构造一番然后利用下方的包含语句来让flag.php文件内容显示。
php://filter 是php中独有的一个协议,可以作为一个中间流来处理其他流,可以进行任意文件的读取。
大佬原话:
在这里,read=convert.base64-encode
意味着将文件内容进行 Base64 编码,从而使文件内容变成可读的字符串。而 resource=flag
指定了要读取的文件为名为 flag
的文件(这里假设存在这个文件)。
因此,在这种情况下,如果攻击者能够成功将 cookie 的值设置为 php://filter/read=convert.base64-encode/resource=flag
,那么当代码执行到 $_COOKIE['language']
这行时,将会读取(方式:php://filter
) flag 文件的内容,并对其进行 Base64 编码后输出到页面上。
这种攻击方式称为 “PHP 命令注入”,并且它能够导致严重的安全问题,因此在编写代码时要进行必要的输入校验和过滤,以避免此类攻击。
说人话:构造以下的cookie
cookie:language=php://filter/read=convert.base64-encode/resource=flag
这样php语句
@include($lan.".php");
实际上执行的是:
php
@include("php://filter/read=convert.base64-encode/resource=flag.php");
解决过程
使用软件 Burp 对发出去的数据包进行抓取,burpsuite抓包详细操作在笔记8CTF攻防世界小白刷题自学笔记8-CSDN博客,安装详细操作在笔记5CTF攻防世界小白刷题自学笔记5-CSDN博客
解密得到 flag
利用hackbar的解码功能得到flag。hackbar的安装和使用请参考我的笔记6第二题CTF攻防世界小白刷题自学笔记6-CSDN博客
相关文章:

CTF攻防世界小白刷题自学笔记13
1.fileinclude,难度:1,方向:Web 题目来源:宜兴网信办 题目描述:无 给一下题目链接:攻防世界Web方向新手模式第16题。 打开一看给了很多提示,什么language在index.php的第九行,flag在flag.php中,但事情显…...
Rust 模板匹配——根据指定图片查找处于大图中的位置(支持GPU加速)
Rust 模板匹配——根据指定图片查找处于大图中的位置(支持GPU加速) 01 前言 在手搓RPA工具的时候,总会碰到不好定位的情况,那么,就需要根据小图来找到对应屏幕上的位置(以图识图),这个需求也比较简单。想到市面上也有不少RPA工具都有这个功能,那么人家有的,俺也可以…...
JVM详解:类的加载过程
JVM中类的加载主要分为三个部分,分别为加载(loading),链接(linking),初始化(initing)。其中加载负责的主要是讲类文件加载到内存中变为类对象,不过此时只有基…...

Python →爬虫实践
爬取研究中心的书目 现在,想要把如下网站中的书目信息爬取出来。 案例一 耶鲁 Publications | Yale Law School 分析网页,如下图所示,需要爬取的页面,标签信息是“<p>”,所以用 itemssoup.find_all("p&…...

Visitor 访问者模式
1)意图 表示一个作用于某对象结构中的各元素的操作。它允许在不改变各元素的类的前提下定义用于这些元素的新操作。 2)结构 访问者模式的结构图如图 7-48 所示。 其中: Visitor(访问者) 为该对象结构中ConcreteElement 的每一个类声明一个 Vsit 操作。该操作的名字和特征标识…...
Mac解压包安装MongoDB8并设置launchd自启动
记录一下在mac上安装mongodb8过程,本机是M3芯片所以下载m芯片的安装包,intel芯片的类似操作。 首先下载安装程序包。 # M芯片下载地址 https://fastdl.mongodb.org/osx/mongodb-macos-arm64-8.0.3.tgz # intel芯片下载地址 https://fastdl.mongodb.org…...

Springboot采用jasypt加密配置
目录 前言 一、Jasypt简介 二、运用场景 三、整合Jasypt 2.1.环境配置 2.2.添加依赖 2.3.添加Jasypt配置 2.4.编写加/解密工具类 2.5.自定义加密属性前缀和后缀 2.6.防止密码泄露措施 2.61.自定义加密器 2.6.2通过环境变量指定加密盐值 总结 前言 在以往的多数项目中࿰…...
加载shellcode
#include <stdio.h>#include <windows.h>DWORD GetHash(const char* fun_name){ DWORD digest 0; while (*fun_name) { digest ((digest << 25) | (digest >> 7)); //循环右移 7 位 digest *fun_name; //累加…...

K8S如何基于Istio实现全链路HTTPS
K8S如何基于Istio实现全链路HTTPS Istio 简介Istio 是什么?为什么选择 Istio?Istio 的核心概念Service Mesh(服务网格)Data Plane(数据平面)Sidecar Mode(边车模式)Ambient Mode(环境模式)Control Plane(控制平面)Istio 的架构与组件Envoy ProxyIstiod其他组件Istio 的流量管…...

React Query在现代前端开发中的应用
💓 博客主页:瑕疵的CSDN主页 📝 Gitee主页:瑕疵的gitee主页 ⏩ 文章专栏:《热点资讯》 React Query在现代前端开发中的应用 React Query在现代前端开发中的应用 React Query在现代前端开发中的应用 引言 React Query …...

【HAProxy09】企业级反向代理HAProxy高级功能之压缩功能与后端服务器健康性监测
HAProxy 高级功能 介绍 HAProxy 高级配置及实用案例 压缩功能 对响应给客户端的报文进行压缩,以节省网络带宽,但是会占用部分CPU性能 建议在后端服务器开启压缩功能,而非在HAProxy上开启压缩 注意:默认Ubuntu的包安装nginx开…...

PostgreSQL中表的数据量很大且索引过大时怎么办
在PostgreSQL中,当表的数据量很大且索引过大时,可能会导致性能问题。以下是一些优化索引和表数据的方法: 1. 评估和删除不必要的索引 识别未使用的索引:使用pg_stat_user_indexes和pg_index系统视图来查找未被使用的索引&#x…...

【QML】QML多线程应用(WorkerScript)
1. 实现功能 QML项目中,点击一个按键后,运行一段比较耗时的程序,此时ui线程会卡住。如何避免ui线程卡住。 2. 单线程(会卡住) 2.1 界面 2.2 现象 点击delay btn后,执行耗时函数(TestJs.func…...

认证鉴权框架SpringSecurity-1--概念和原理篇
1、基本概念 Spring Security 是一个强大且高度可定制的框架,用于构建安全的 Java 应用程序。它是 Spring 生态系统的一部分,提供了全面的安全解决方案,包括认证、授权、CSRF防护、会话管理等功能。 2、认证、授权和鉴权 (1&am…...
计算器上的MC、MR、M+、M—、CE是什么意思?
在计算器中, MC键叫做memory clear,中文 清除存储,是一个清除寄存器中存储数字的指令。 MS键叫做memory save,中文 存入存储。 而MR键,则是一个读取原先存储在寄存器中的数字的指令。 M键指将当前数值存入寄存器以…...

无人机飞手执照处处需要,森林、石油管道、电力巡检等各行业都需要
无人机飞手执照在多个行业中确实具有广泛的应用需求,包括森林、石油管道、电力巡检等领域。以下是对这些领域无人机飞手执照需求的具体分析: 一、森林领域 在森林领域,无人机飞手执照对于进行高效、准确的森林资源管理和监测至关重要。无人机…...

计算机网络——路由选择算法
路由算法 路由的计算都是以子网为单位计算的——找到从原子网到目标子网的路径 链路状态算法...

【前端】技术演进发展简史
一、前端 1、概述 1990 年,第一个web浏览器诞生,Tim 以超文本语言 HTML 为基础在 NeXT 电脑上发明了最原始的 Web 浏览器。 1991 年,WWW诞生,这标志着前端技术的开始。 前端(Front-end)和后端(…...
深入解析贪心算法及其应用实例
标题:深入解析贪心算法及其应用实例 一、引言 贪心算法(Greedy Algorithm)是一类简单、直观的算法设计策略,广泛应用于优化问题中。其基本思想是每一步都选择当前状态下最优的选择,即在每一步做出局部最优的决策&…...

电子工牌独立双通道定向拾音方案(有视频演示)
现在一些行业的客服人员在面对客户都要求使用电子工牌分别记录客服和顾客的声音,我们利用双麦克风阵列双波束拾音的方案设计了一个电子工牌方案.可以有效分别记录客服和顾客的声音. 方案思路: 我们采用了一个双麦阵列波束拾音的模块A-59,此模块可以利用2个麦克风组成阵列进行双…...
Vim 调用外部命令学习笔记
Vim 外部命令集成完全指南 文章目录 Vim 外部命令集成完全指南核心概念理解命令语法解析语法对比 常用外部命令详解文本排序与去重文本筛选与搜索高级 grep 搜索技巧文本替换与编辑字符处理高级文本处理编程语言处理其他实用命令 范围操作示例指定行范围处理复合命令示例 实用技…...
java调用dll出现unsatisfiedLinkError以及JNA和JNI的区别
UnsatisfiedLinkError 在对接硬件设备中,我们会遇到使用 java 调用 dll文件 的情况,此时大概率出现UnsatisfiedLinkError链接错误,原因可能有如下几种 类名错误包名错误方法名参数错误使用 JNI 协议调用,结果 dll 未实现 JNI 协…...

前端导出带有合并单元格的列表
// 导出async function exportExcel(fileName "共识调整.xlsx") {// 所有数据const exportData await getAllMainData();// 表头内容let fitstTitleList [];const secondTitleList [];allColumns.value.forEach(column > {if (!column.children) {fitstTitleL…...
蓝桥杯 2024 15届国赛 A组 儿童节快乐
P10576 [蓝桥杯 2024 国 A] 儿童节快乐 题目描述 五彩斑斓的气球在蓝天下悠然飘荡,轻快的音乐在耳边持续回荡,小朋友们手牵着手一同畅快欢笑。在这样一片安乐祥和的氛围下,六一来了。 今天是六一儿童节,小蓝老师为了让大家在节…...

【大模型RAG】Docker 一键部署 Milvus 完整攻略
本文概要 Milvus 2.5 Stand-alone 版可通过 Docker 在几分钟内完成安装;只需暴露 19530(gRPC)与 9091(HTTP/WebUI)两个端口,即可让本地电脑通过 PyMilvus 或浏览器访问远程 Linux 服务器上的 Milvus。下面…...
在Ubuntu中设置开机自动运行(sudo)指令的指南
在Ubuntu系统中,有时需要在系统启动时自动执行某些命令,特别是需要 sudo权限的指令。为了实现这一功能,可以使用多种方法,包括编写Systemd服务、配置 rc.local文件或使用 cron任务计划。本文将详细介绍这些方法,并提供…...
VTK如何让部分单位不可见
最近遇到一个需求,需要让一个vtkDataSet中的部分单元不可见,查阅了一些资料大概有以下几种方式 1.通过颜色映射表来进行,是最正规的做法 vtkNew<vtkLookupTable> lut; //值为0不显示,主要是最后一个参数,透明度…...
【HTML-16】深入理解HTML中的块元素与行内元素
HTML元素根据其显示特性可以分为两大类:块元素(Block-level Elements)和行内元素(Inline Elements)。理解这两者的区别对于构建良好的网页布局至关重要。本文将全面解析这两种元素的特性、区别以及实际应用场景。 1. 块元素(Block-level Elements) 1.1 基本特性 …...
今日学习:Spring线程池|并发修改异常|链路丢失|登录续期|VIP过期策略|数值类缓存
文章目录 优雅版线程池ThreadPoolTaskExecutor和ThreadPoolTaskExecutor的装饰器并发修改异常并发修改异常简介实现机制设计原因及意义 使用线程池造成的链路丢失问题线程池导致的链路丢失问题发生原因 常见解决方法更好的解决方法设计精妙之处 登录续期登录续期常见实现方式特…...

【数据分析】R版IntelliGenes用于生物标志物发现的可解释机器学习
禁止商业或二改转载,仅供自学使用,侵权必究,如需截取部分内容请后台联系作者! 文章目录 介绍流程步骤1. 输入数据2. 特征选择3. 模型训练4. I-Genes 评分计算5. 输出结果 IntelliGenesR 安装包1. 特征选择2. 模型训练和评估3. I-Genes 评分计…...