XSS LABS - Level 14 过关思路

关注这个靶场的其他相关笔记: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信息。";
 }
 ?>
  • 16
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

SRC_BLUE_17

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值