XSS LABS - Level 14 过关思路

news2024/12/23 13:12:48

关注这个靶场的其他相关笔记:XSS - LABS —— 靶场笔记合集-CSDN博客

0x01:关卡配置

这一关有些特殊,需要链接到外部站点,但是这个站点已经挂了,无法访问:

所以笔者就根据网上的资料,对这一关进行了修复。由于本关需要读取上传图片的 EXIF 信息(这个下面会讲),所以需要更改 PHP 的配置。下面所有的操作都是针对 PhpStudy 进行的。

1. 查看当前站点使用的 PHP 版本,这里我使用的是 php5.3.29nts:

2. 访问 php 环境目录:

3. 找到对应的配置文件 php.ini

4. 在 php.ini 中搜索下面的内容,然后将前面的分号去掉就好,如下(记得保存修改后的内容):

5. 配置完成后,打开小皮面板,重启 Apache 服务即可:

0x02:过关流程

有些网站具有读取并展示图片 EXIF 信息的功能,比如下面这个网站:

EXIF信息查看器无需安装软件,只需上传照片即可查看完整EXIF信息,包括机身、镜头型号、拍摄时间、相机快门次数,支持JPEG、TIFF、CR2、NEF、XMP等多种图片格式。无需下载,比Exif Show, ExifPro更好用的EXIF查看器!icon-default.png?t=N7T8https://exif.tuchong.com/

知识拓展:EXIF 信息

EXIF,即可交换图像文件格式,是一种包含各种元数据的数据,包括相机设置、拍摄日期和时间,如果打开了 GPS,可能还包括位置信息。

简而言之,就是图片中携带了信息,这个信息包括拍摄设备的参数,拍摄的时间,拍摄的地点等等敏感数据(之前是有过泄露的,CTF 也很爱出)。

而这些信息,我们是可以编辑的,回归本题,我们上传一张图片看看效果(笔者上传的时候代码报错了,虽然上传的确实是正常的图片,也不知道为啥,所以各位测试的时候,可以多备几张图片看看):

既然能回显图片的 EXIF 信息,那么每个位置其实都是回显点,下面我们来尝试编辑 EXIF 信息:

随便找个图片,右击,选择属性,然后选择详细信息,将 XSS Payload 随便找个位置写入:

 <script>alert(1)</script>

然后打开靶场,上传这张图片,可以看到攻击成功了,这关也就过啦(有点小众):

0x03:源码分析

下面是 XSS LABS Level14 的后端源码,以及我对其的部分笔记:

 <html>
 ​
 <head>
     <meta http-equiv="content-type" content="text/html;charset=utf-8">
     <title>欢迎来到level14</title>
 </head>
 ​
 <body>
     <h1 align=center>欢迎来到level14</h1>
     <!-- <center><iframe name="leftframe" marginwidth=10 marginheight=10 src="http://www.exifviewer.org/" frameborder=no width="80%" scrolling="no" height=80%></iframe></center> -->
     <center><iframe name="leftframe" marginwidth=10 marginheight=10 src="exifviewer.php" frameborder=no width="80%" scrolling="no" height=80%></iframe></center>
     <center>这关成功后不会自动跳转。成功者<a href=level15.php?src=1.gif>点我进level15</a></center>
 </body>
 ​
 </html>

这个源码没啥,就是通过一个 iframe 框架,引入了一个新的页面(exifviewer.php 就是我后写的用来识别图片 EXIF 的网页)。这里面没有做任何过滤,主要就是提供一个新的思路。

下面是 exifviewer.php 的文件内容(从靶场介绍中可以直接下载我修改后的靶场文件,没必要自己一个一个改,挺麻烦的,靶场介绍我会在当前靶场过关笔记都发布完成后最后发布,别问为啥不先发布,问就是因为存货。)

 // exifviewer.php
 <!-- Level 14 调取页面 -->
 ​
 <!DOCTYPE html>
 <html lang="en">
 ​
 <head>
     <meta charset="UTF-8">
     <meta name="viewport" content="width=device-width, initial-scale=1.0">
     <title>exifviewer</title>
 </head>
 ​
 <body>
     <center>
         <form action="#" method="post" enctype="multipart/form-data">
             <label for="file">请上传一张图片:</label><input type="file" name="file" id="file">
             <input type="submit" name="submit" value="提交">
         </form>
     </center>
 </body>
 ​
 </html>
 <?php
 // 允许上传的图片后缀
 $allowedExts = array("gif", "jpeg", "jpg", "png");
 $temp = explode(".", $_FILES["file"]["name"]);
 $extension = end($temp);
 ​
 // 检查文件扩展名  
 if (!in_array($extension, $allowedExts)) {
     echo "错误:非法的文件格式。";
     exit;
 }
 ​
 // 尝试获取图像尺寸以验证图像  
 $imageInfo = getimagesize($_FILES["file"]["tmp_name"]);
 if (!$imageInfo) {
     echo "错误:上传的不是有效的图像文件。";
     exit;
 }
 ​
 // 检查文件上传错误  
 if ($_FILES["file"]["error"] > 0) {
     echo "错误:上传文件时发生错误: " . $_FILES["file"]["error"] . "<br>";
     exit;
 }
 ​
 // 尝试移动文件  
 $uploadDir = "uploads/"; // 确保此目录存在且可写  
 $targetPath = $uploadDir . basename($_FILES["file"]["name"]);
 if (!move_uploaded_file($_FILES["file"]["tmp_name"], $targetPath)) {
     echo "错误:无法移动文件。";
     exit;
 }
 ​
 // 读取EXIF信息  
 $exif = exif_read_data($targetPath, 0, true);
 if ($exif !== false) {
     echo "<h4>[" . basename($_FILES["file"]["name"]) . "]的EXIF信息:</h4>";
     foreach ($exif as $key => $section) {
         foreach ($section as $name => $val) {
             echo "$key.$name: $val<br />\n";
         }
     }
 } else {
     echo "无法读取EXIF信息。";
 }
 ?>

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

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

相关文章

ARM体系结构和接口技术(十一)定时器中断实验

文章目录 一、实验分析二、RCC章节&#xff1a;找到外设基地址并使能外设控制器时钟源1. RCC2. GICC和GICD3. TIM3 三、TIM3章节&#xff08;一&#xff09;CR1寄存器&#xff08;二&#xff09;DIER寄存器&#xff08;三&#xff09;SR寄存器&#xff08;四&#xff09;PSC寄存…

JS中this的指向问题、JS的执行机制、offset、client、scroll

JS中this的指向问题 1. 在全局环境下 在全局环境中&#xff08;在浏览器中是 window 对象&#xff0c;在Node.js中是 global 对象&#xff09;&#xff0c;this 指向全局对象。 console.log(this window); // 在浏览器中为 true console.log(this.document ! undefined); //…

基于ssm+vue+uniapp的农业电商服务系统小程序

开发语言&#xff1a;Java框架&#xff1a;ssmuniappJDK版本&#xff1a;JDK1.8服务器&#xff1a;tomcat7数据库&#xff1a;mysql 5.7&#xff08;一定要5.7版本&#xff09;数据库工具&#xff1a;Navicat11开发软件&#xff1a;eclipse/myeclipse/ideaMaven包&#xff1a;M…

代码随想录算法训练营第四十一天 | 121. 买卖股票的最佳时机 , 122.买卖股票的最佳时机II , 123.买卖股票的最佳时机III

目录 121. 买卖股票的最佳时机 思路 暴力 贪心 动态规划 1.确定dp数组&#xff08;dp table&#xff09;以及下标的含义 2.确定递推公式 3.dp数组如何初始化 4.确定遍历顺序 5.举例推导dp数组 方法一&#xff1a; 贪心 方法二&#xff1a;动态规划1 方法三&#xf…

使用rqt_console和roslaunch

1.使用rqt_console和rqt_logger_level rosrun rqt_console rqt_console 执行完该命令后有如下界面: 继续执行如下命令: rosrun rqt_logger_level rqt_logger_level 此时有如下新界面: 接下来继续运行如下命令: rosrun turtlesim turtlesim_node 上面第一…

慢sql问题解决,sql优化,数据库(mysql)

文章目录 1、count效率比较2、作者遇到的慢sql问题2.1、使用排序导致变慢问题2.2、使用LEFT JOIN 导致索引失效的问题2.3、子查询导致索引失效 3、explain命令介绍4、阿里云rds数据库&#xff08;mysql的一种&#xff09;主键索引查询很慢问题参考文档 1、count效率比较 所以结…

初识C++(8.27)

用C实现: 提示并输入一个字符串&#xff0c;统计该字符串中字母个数、数字个数、空格个数、其他字符的个数. #include <iostream> #include <string>using namespace std;int main() {string str;cout << "请输入一个字符串: ";getline(cin, str…

uni-app - - - - - 使用uview-plus详细步骤

uni-app - - - - - 使用uview-plus详细步骤 1. 使用HbuilderX创建空白项目2. 安装插件3. uview-plus配置使用3.1 main.js配置3.2 uni.scss配置3.3 App.vue配置3.4 pages.json 4. 重启Hbuilderx 1. 使用HbuilderX创建空白项目 2. 安装插件 工具 > 插件安装 > 前往插件市场…

用Python探究两组变量的相关性_典型相关分析(CCA)模板

典型相关分析&#xff08;Canonical Correlation Analysis, CCA&#xff09;是一种多变量统计分析方法&#xff0c;用于研究两组变量之间的整体相关性。它的基本原理是在两组变量中分别提取有代表性的两个综合变量&#xff08;即两组变量的线性组合&#xff09;&#xff0c;通过…

Java设计模式之工厂模式详细讲解和案例示范

在Java的设计模式中&#xff0c;工厂模式&#xff08;Factory Pattern&#xff09;是最常见和最有用的一种创建型模式。工厂模式的核心思想是将对象的创建与使用分离&#xff0c;从而提供了一种灵活的方式来创建不同类型的对象。这种模式尤其适用于复杂对象的创建过程&#xff…

HTTrack镜像网站实践

目录 前言 Windows下使用HTTrack HTTrack安装 HTTrack使用 Kali linux下使用HTTrack HTTrack安装 HTTrack使用 前言 在特殊时期&#xff0c;不想把真实的网站页面展示给用户&#xff0c;但又不能关停。此刻&#xff0c;可以用镜像网站替换真实网站&#xff0c;降低安全风…

Golang | Leetcode Golang题解之第378题有序矩阵中第K小的元素

题目&#xff1a; 题解&#xff1a; func kthSmallest(matrix [][]int, k int) int {n : len(matrix)left, right : matrix[0][0], matrix[n-1][n-1]for left < right {mid : left (right - left) / 2if check(matrix, mid, k, n) {right mid} else {left mid 1}}retur…

52.给定一个整数 n,实现一个算法返回 n 皇后不同的解决方案的数量

52. N-Queens II 题目 n皇后问题是指将n个皇后放置在一个nn的棋盘上,使得任意两个皇后不在同一行、同一列或同一对角线上。 给定一个整数 n,返回 n 皇后问题不同的解法数量。 示例: 输入: 4 输出: 2 解释: 4皇后问题有如下两个不同的解法: [ [“.Q…”, // 解法 1 “……

LabVIEW反编译与源程序加密破解

最近&#xff0c;不少粉丝咨询如何将生成的 LabVIEW 可执行程序反编译&#xff0c;所以写了这篇文章来详细探讨这个话题。反编译问题引起了广泛的关注&#xff0c;许多开发者希望能够从现有的可执行文件中提取源代码&#xff0c;以便进行修改或重新利用。然而&#xff0c;反编译…

Java基础:什么是多态

什么是多态 多态是面向对象的三大特性之一&#xff08;另外两个是封装和继承&#xff09;&#xff0c;指的是同一个方法能执行不同的行为&#xff0c;在代码上的体现是&#xff1a;声明为父类的对象&#xff0c;可以被不同的实现类赋值&#xff0c;其中实现类必须继承或者实现…

OpenCV图像拼接多频段融合源码重构

OpenCV图像拼接多频段融合源码重构 图像拼接是计算机视觉中的一个常见问题&#xff0c;OpenCV提供了十分完善的算法类库。作者使用OpenCV4.6.0进行图像拼接&#xff0c;其提供了包括曝光补偿、最佳缝合线检测以及多频段融合等图像拼接常用算法&#xff0c;测试发现多频段融合算…

uni-app - - - - - 自定义tabbar

uni-app - - - - - 自定义tabbar 1. 创建页面2. pages.json3. 自定义tabbar4. 隐藏原生tabbar5. 全局注册组件6. 页面使用7. 效果图展示 1. 创建页面 2. pages.json 配置tabbar {"tabBar": {"list": [{"pagePath": "pages/ballroom/ballr…

认知杂谈25

今天分享 有人说的一段争议性的话 I I 《拖延症&#xff0c;谁都有过》 嘿&#xff0c;朋友们&#xff01;咱都来说说&#xff0c;拖延症这玩意儿&#xff0c;好多人都被它给缠上啦。你看哈&#xff0c;本来计划得好好的&#xff0c;今天要把房间收拾得干干净净&#xff0c;可…

SSH弱口令爆破服务器

一、实验背景 1、概述 使用kali的hydra进行ssh弱口令爆破&#xff0c;获得服务器的用户名和口令&#xff0c;通过 ssh远程登录服务器。 2、实验环境 kali攻击机&#xff1a;192.168.1.107 centos服务器&#xff1a;192.168.1.105 二、前置知识 1、centos设置用户并设置弱…

软件设计原则之接口隔离原则

接口隔离原则&#xff08;Interface Segregation Principle, ISP&#xff09;是面向对象设计中的一个重要原则&#xff0c;它属于SOLID原则之一。这个原则强调客户端&#xff08;即接口的调用者&#xff09;不应该被迫依赖于它们不使用的方法。换句话说&#xff0c;一个类对另一…