文件上传-uploadlab通关手册

开启:http://127.0.0.1/uploadlab/

Pass-01:绕过js验证

1.js验证码分析
文件上传-uploadlab通关手册_第1张图片
在客户端验证文件的后缀名,只允许.jpg,.png.gif文件上传
2.浏览器审计工具剔除JS
对于JS前端验证,直接删除掉JS代码之后就可以绕过JS验证。就是upload-labs的pass-1的删除check,这个是输入前端验证
文件上传-uploadlab通关手册_第2张图片
3.burpsuite抓包修改
上传一个一句话木马,后缀是.jpg的文件
文件上传-uploadlab通关手册_第3张图片
发给repeater模块,然后修改后缀为php,发送获得文件路径
文件上传-uploadlab通关手册_第4张图片
浏览器访问
文件上传-uploadlab通关手册_第5张图片
这时候就拿到shell
也可以简单利用

qqq=system("type flag.php");(linux系统)
qqq=system("cat ../flag.php");
qqq=system("dir");(windows系统)

文件上传-uploadlab通关手册_第6张图片

4.菜刀链接
对于windows linux命令不了解,也可以直接使用菜刀连接
文件上传-uploadlab通关手册_第7张图片
文件上传-uploadlab通关手册_第8张图片
直接可以访问

Pass-02:绕过MIME-Type验证

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

2.验证MIME-Type代码分析
例如:这是是发生在服务端的验证
查看源代码分析 使用$_FILE[‘upload_file’][‘type’]获取上传文件的MIME-Type类型。其中upload_file是在表单中定义的。
文件上传-uploadlab通关手册_第9张图片
3.Burpsuite绕过MIME-Type验证
首先上传文件抓包,利用Burpsuite工具截断HTTP请求,在Repeater重放修改MIME-Type类型绕过验证。image/jpeg
文件上传-uploadlab通关手册_第10张图片
文件上传-uploadlab通关手册_第11张图片

4.访问shell
再上一步修改完成后发给repeater模块
文件上传-uploadlab通关手册_第12张图片

文件上传-uploadlab通关手册_第13张图片
或者使用菜刀远程连接

Pass-03:绕过黑名单

1.基于文件后缀名验证介绍
对于文件上传模块来说,尽量避免上传可执行的脚本文件。为了防止上传脚本需要设置对应的验证方式。最简单的就是设置文件后缀名验证。
基于文件后缀名验证方式的分类:
1、基于白名单验证:只针对白名单中有的后缀名,文件才能上传成功。
2、基于黑名单验证:只针对黑名单中没有的后缀名,文件才能上传成功。

2.基于黑名单验证代码分析
对于黑名单中的后缀名筛选。绕过黑名单可以通过寻找“漏网之鱼”,寻找某些可以被作为脚本执行同时也不在黑名单中。
文件上传-uploadlab通关手册_第14张图片

3.测试
文件上传-uploadlab通关手册_第15张图片
上传一个php一句话木马,发现存在黑名单,大部分情况可以再bp中测试
这里将一个小方法,利用Intruder模块进行枚举后缀名,寻找黑名单中没有过滤的后缀名。不需要自己手工测试。

以pass-3为例,首先抓包,然后以php为添加,加如事先准备好的字典,也就是php,php3,phtml等等,然后攻击,这样可以测试什么后缀可以使用
文件上传-uploadlab通关手册_第16张图片
文件上传-uploadlab通关手册_第17张图片
文件上传-uploadlab通关手册_第18张图片
然后连接shell

Pass-04:绕过黑名单之.htaccess

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

其中.htaccess文件内容:
SetHandler application/x-httpd-php
设置当前目录所有文件都使用PHP解析,那么无论上传任何文件,只要文件内容符合PHP语言代码规范,就会被当作PHP执行。不符合则报错。

2.配置文件http.conf
在Apache中如果需要启动 .htaccess,必须在http.conf中设置 AllowOverride
文件上传-uploadlab通关手册_第19张图片

3.审计黑名单过滤代码
文件上传-uploadlab通关手册_第20张图片
在黑名单中,没有对.htaccess进行过滤,可以直接上传.htaccess来设置使用php解析任意文件。
文件内容:SetHandler application/x-httpd-php
4.测试
步骤
抓包后缀改成.htaccess
把下面的一句话木马改成:
SetHandler application/x-httpd-php

然后改成:一句话木马
把上面的文件名改成:123pinfo.jpg
文件上传-uploadlab通关手册_第21张图片
在这里插入图片描述
在这里插入图片描述

Pass-05:绕过黑名单之大小写绕过

Windows系统下,对于文件名中的大小写不敏感。例如:test.php和TeSt.PHP是一样的。
Linux系统下,对于文件名中的大小写敏感。例如:test.php和 TesT.php就是不一样的。

代码分析
文件上传-uploadlab通关手册_第22张图片
可以清晰的看出,黑名单中增加了.htaccess的验证,但是缺少了对上传文件名获取的小写转换。

文件后缀名不一定必须在Burpsutie截断的HTTP请求中修改,可以直接修改文件后缀名进行上传。Pass-5为例

以pass-5为例
文件名后缀大小写混合绕过

Pass-06:绕过黑名单之空格绕过

1.空格绕过原理
Windows系统下,对于文件名中空格会被作为空处理,程序中的检测代码却不能自动删除空格。从而绕过黑名单。
针对这样的情况需要使用Burpsuite阶段HTTP请求之后,修改对应的文件名 添加空格。

2.代码分析
文件上传-uploadlab通关手册_第23张图片
经过代码分析可以看到代码没有对上传文件的文件名做去空格处理。存在添加空格绕过黑名单问题。

3.Burpsuite绕过验证
以pass-6为例
利用Windows系统的文件名特性。文件名最后增加空格,写成06.php ,上传后保存在Windows系统上的文件名最后的一个空格会被去掉,实际上保存的文件名就是06.php
在这里插入图片描述

Pass-07:绕过黑名单 .号绕过

1.号绕过原理
Windows系统下,文件后缀名最后一个点会被自动去除。
例如:
Windows下新建一个1.php.文件,查看会发现创建的文件是1.php。

2.代码分析
查看代码分析其中缺少去除文件名最后边点的处理,可以利用Windows系统特性,绕过黑名单。
文件上传-uploadlab通关手册_第24张图片
3.验证
以pass-7为例
利用Burpsuite工具截断HTTP请求,上传文件加 . 绕过上传。就是在文件名后面加上. 但是访问的时候依旧访问1.php,因为windows会注释掉.
其他类似上一题

Pass-08:绕过黑名单($DATA绕过)

1.特殊符号绕过原理
Windows系统下,如果上传的文件名中test.php:: D A T A 会 在 服 务 器 上 生 成 一 个 t e s t . p h p 的 文 件 , 其 中 内 容 和 所 上 传 文 件 内 容 相 同 , 并 被 解 析 。 例 如 : 在 W i n d o w s 系 统 下 新 建 一 个 文 件 名 为 1. p h p : : DATA会在服务器上生成一个test.php的文件,其中内容和所上传文件内容相同,并被解析。 例如: 在Windows系统下新建一个文件名为 1.php:: DATAtest.phpWindows1.php::DATA的文件,查看效果。但是在Window下新建的文件名中包含特殊符号不能成功新建。
文件上传-uploadlab通关手册_第25张图片
2.代码分析
分析以下代码,发现没有黑名单过滤没有过滤掉 ::$DATA。
文件上传-uploadlab通关手册_第26张图片

3.验证
以pass-8为例
Windows文件流特性绕过,文件名改成08.php::$DATA,上传成功后保存的文件名其实是08.php
在这里插入图片描述

然后访问的时候不需要带着$DATA
在这里插入图片描述
Pass-09:绕过黑名单验证(路径拼接绕过)
1.路径拼接绕过原理
在没有对上传的文件进行重命名的情况下,用户可以自定义文件名并在服务器中上传新建,就会造成对应的绕过黑名单。
例如:
用户新建 1.php.+空格+.
deldot删除最后一个点之后,不再进行删除,trim删除空格,那么最终上传的文件名为 1.php.。
利用Windows自动去除最后一个点,导致成功上传1.php。
2.代码分析
对代码进行分析,可得上传后的文件没有经过随机化重命名,直接保存在服务器上。
文件上传-uploadlab通关手册_第27张图片
3.验证,以pass-9为例
修改文件名,绕过黑名单验证
原理同Pass-06,上传文件名后加上点+空格+点,改为09.php. .

Pass-10:绕过黑名单之双写绕过

代码编写过程中,只对黑名单中的内容进行空替换,因为只替换一次所以造成双写绕过。
例如:
1.phphpp
文件上传-uploadlab通关手册_第28张图片
str_ireplace() 函数替换字符串中的一些字符(不区分大小写)。
该函数必须遵循下列规则:
如果搜索的字符串是一个数组,那么它将返回一个数组。
如果搜索的字符串是一个数组,那么它将对数组中的每个元素进行查找和替换。
如果同时需要对数组进行查找和替换,并且需要执行替换的元素少于查找到的元素的数量,那么多余元素将用空字符串进行替换
如果是对一个数组进行查找,但只对一个字符串进行替换,那么替代字符串将对所有查找到的值起作用。
注释:该函数不区分大小写。请使用 str_replace() 函数来执行区分大小写的搜索。
注释:该函数是二进制安全的。

3.验证,以pass-10为例
双写文件名绕过,文件名改成10.pphphp等格式
Pass-11:绕过白名单之00截断绕过
1.00截断原理
0x00是十六进制表示方法,是ascii码为0的字符,在有些函数处理时,会把这个字符当做结束符。
系统在对文件名的读取时,如果遇到0x00,就会认为读取已结束。
在PHP5.3之后的版本中完全修复了00截断。并且00截断受限与GPC,addslashes函数。

2.GET型00截断
GET型提交的内容会被自动进行URL解码。
注意:一定要关闭GPC,否则无法成功。
文件上传-uploadlab通关手册_第29张图片
以pass-11为例
GET型的所以在上面拼接,/upload/123.php%00(这一题有一个疑问,虽然他是 GET型的但是抓包上面显示的是POAT,但是他的upload显示再上面)
文件上传-uploadlab通关手册_第30张图片
然后访问
在这里插入图片描述

pass-12:POST型00截断
在POST请求中,%00不会被自动解码,需要在16禁止中进行修改00.
文件上传-uploadlab通关手册_第31张图片
先上传一个.jpg文件,抓包,拼接…/upload/123.php 123pinfo.jpg
然后再hex找到,然后把空格的20改成00因为这是post型的
以pass-12为例
文件上传-uploadlab通关手册_第32张图片
先增加…/upload/123.php 123pinfo.jpg
会显示上传失败然后
文件上传-uploadlab通关手册_第33张图片
然后进行上传

Pass-13:文件头GIF89a或者图片码

方法一文件头绕过
文件上传-uploadlab通关手册_第34张图片
文件上传-uploadlab通关手册_第35张图片
方法二制作图片马
文件上传-uploadlab通关手册_第36张图片
文件上传-uploadlab通关手册_第37张图片
利用文件包含图片马

访问
http://127.0.0.1/uploadlab/include.php?file=./upload/3020220503100523.jpg

Pass-15 类似

Pass-16:二次渲染

二次渲染就是你上传的图片马,再上传到本地时候,中间会对图片进行渲染,也就是你插入的一句话木马会被改变,但是二次渲染对图片的内容会有一部分是不改变的,所以只需要找到没有改变的那部分,然后插入一句话木马,即可。
制作图片马
文件上传-uploadlab通关手册_第38张图片
使用HxD查看图片马
文件上传-uploadlab通关手册_第39张图片

上传图片,发现网页本地目录中存在二次渲染后的图片,这里的图片尽量找很小的,不然后面分析时候内容会很多
上传再后台文件找到
文件上传-uploadlab通关手册_第40张图片

HxD软件打开该二次渲染后的图片会发现我们插入的代码已经消失了
文件上传-uploadlab通关手册_第41张图片
不过二次渲染会保留一些文件内容不会改变,所以我们要找到没有被渲染的部分,将其代码写入其中即可绕过二次渲染
文件上传-uploadlab通关手册_第42张图片

文件上传-uploadlab通关手册_第43张图片

对比发现 文件开始有部分没有被渲染,所以把一句话木马写入
文件上传-uploadlab通关手册_第44张图片
再次上传,成功
文件上传-uploadlab通关手册_第45张图片

Pass-18:条件竞争

1.竞争条件原理
网站逻辑:
1、网站允许上传任意文件,然后检查上传文件是否包含Webshell,如果包含删除该文件。
2、网站允许上传任意文件,但是如果不是指定类型,那么使用unlink删除文件。
在删除之前访问上传的php文件,从而执行上传文件中的php代码。
2.竞争条件代码分析
先进行上传,后进行判断与删除。利用时间差进行webshell上传。
文件上传-uploadlab通关手册_第46张图片
3.测试
直接上传一个php文件,然后进行抓包,再reperter中发现upload等路径
文件上传-uploadlab通关手册_第47张图片

将数据包发送至intruder下,如图操作
文件上传-uploadlab通关手册_第48张图片
全部清除
文件上传-uploadlab通关手册_第49张图片

修改一下线程
文件上传-uploadlab通关手册_第50张图片
然后开始攻击,用另一个浏览器一直访问anbei.php地址,只要在上传的一瞬间,他还没来的及删除、修改就可以了。
文件上传-uploadlab通关手册_第51张图片
成功

Pass-19:二次渲染

Pass-20:%00截断

你可能感兴趣的:(php,前端,web安全)