文件上传之upload-labs通过笔记 1-12关

Upload通关笔记:

这篇只是本人在练习文件上传时编写的,每一关的绕过方法有很多种,只例举了一种,大家参考:

只是测试,所以小马文件里只写了一个<?php phpinfo(); ?>语句,并不是一句话小马。

Pass1:------------客户端检测绕过

Step1:先测试此上传点是否可用,上传一张正常的图片;结果显示正常,证明此上传点没有问题;

Step2:再上传一张正常的图片---抓包修改文件后缀为对应网站脚本语言php;判断是否对文件后缀名的检测
可以上传---那么首先后缀没有做过滤;

Step3:再上传一个php文件---发现提示不允许上传;按F9查看网络---发现没有数据包—那么是客户端绕过;将想要上传的php文件后缀改成该网站允许的后缀,然后点击上传抓包修改后缀为.php,点击上传。成功。

1-1.png

1-2.png

Pass2---服务端MIME检测

MIME检测的是数据包content-type字段。常见的图片格式的MIME类型有以
下几种类型:

PNG图像: image/png
GIF图形: image/gif
JPG图形: image/jpeg

因此我们可以抓包修改数据包中content-type类型来绕过MIME类型的检测。

Step1:首先测试该上传点是否正常,上传一张正常的图片,观察;

Step2: 再上传一张正常的图片---抓包修改文件后缀为对应网站脚本语言php;判断是否对文件后缀名的检测
可以上传---那么首先后缀没有做过滤;

Step3: 上传一个php文件---提示文件上传类型不允许上传;
刚刚图片允许上传,但是改成php文件就不允许上传了;
猜测可能是对数据包content-type字段做了修改,或者检测了文件内容;
再上传php文件,抓包修改content-type字段

Step4:打开上传的文件phpinfo.php,发现文件被解析。

2-1.png

2-2.png

Pass3----黑名单绕过---修改后缀名绕过----加点空格点也可以—htaccess文件也可以

前2步和之前一样
Step1:上传一张正常的图片---抓包修改文件后缀为对应网站脚本语言php;判断是否对文件后缀名的检测
不可以上传---那么对后缀做过滤;

Step2:判断是白名单检测还是黑名单检测:再上传一个图片文件然后在后缀上随便加几个字符,如果上传成功证明是黑名单检测,反之是白名单检测;
观察结果:上传成功。
证明对文件名后缀进行了黑名单检测。

3-1.png

Step3:既然判断为黑名单,首先试一试大小写组合是否可以绕过,上传一个图片抓包修改为.Php,上传失败。大小写不可绕过
那我们的思路就是看看它这个黑名单有没有漏洞,比如这个黑名单就没有排除掉.php3此后缀名,上传成功。

3-2.png

3-3.png

Pass4-------------黑名单检测---.htaccess文件攻击-----aaa.php.aaa.ccc Apache解析漏洞也可以

Step1:先上传一张正常图片,然后抓包修改为php为后缀。
观察结果:上传失败。
证明对文件名后缀进行了检测,需要进一步判断是白名单检测还是黑名单检测;

Step2:判断是白名单检测还是黑名单检测:上传一个图片文件然后在后缀上随便加几个字符,上传成功是黑名单检测,

Step3:黑名单绕过:
大小写------失败
00截断-----失败
Windows特性失败
.htaccess文件攻击----成功
编写.htaccess文件,打开记事本,将如下代码写入文本中:

AddType  application/x-httpd-php    .jpg

.htaccess文件里的代码的含义 : 将上传的文件后缀名为.jpg格式的文件以 php格式来解析文件。
先上传.htaccess文件,上传成功后再上传一个php文件改后缀为jpg格式,上传成功后打开发现可以直接解析。

4.png

Pass5-------------黑名单检测---.后缀名大小写绕过

Step1:先上传一张正常图片,然后抓包修改为php为后缀。
观察结果:上传失败。
证明对文件名后缀进行了检测,需要进一步判断是白名单检测还是黑名单检测;

Step2:判断是白名单检测还是黑名单检测:再上传一张照片然后在后缀上随便加几个字符,上传成功证明是黑名单检测

Step3:黑名单绕过:
大小写------成功
上传一个小马文件ma.php,抓包修改文件后缀为ma.PHP

5.png

Pass6------------黑名单检测------在后缀加空格或者点(.php )
Step1:先上传一张正常图片,然后抓包修改为php为后缀。
观察结果:上传失败。
证明对文件名后缀进行了检测,需要进一步判断是白名单检测还是黑名单检测;
Step2:判断是白名单检测还是黑名单检测:再上传一张照片然后在后缀上随便加几个字符,上传成功证明是黑名单检测
Step3:黑名单绕过:
在后缀.php后面添加空格或者.再上传

6.png

Pass7------------黑名单检测---特殊文件名绕过

Step1:先上传一张正常图片,然后抓包修改为php为后缀。
观察结果:上传失败。

证明对文件名后缀进行了检测,需要进一步判断是白名单检测还是黑名单检测;

Step2:判断是白名单检测还是黑名单检测:再上传一张照片然后在后缀上随便加几个字符,
对文件名后缀进行了黑名单检测。

Step3:黑名单绕过:
在Windows下有一个特性就是如果文件后缀以点”.”或者空格” ”结尾,系统在保存文件时会自动去除点和空格。但Unix/Linux下没有这个特性。
上传一个小马文件ma.php,抓包修改后缀,加一个点:“ma.php. ”,再上传,观察结果。

7.png

**Pass8------------黑名单检测—后缀加点空格点-------::$DATA**(必须是那个源文件 php在window的时候如果文件名+"::$DATA"会把::$DATA之后的数据当成文件流处理,不会检测后缀名.且保持"::$DATA"之前的文件名 他的目的就是不检查后缀名....)

Step1:先上传一张正常图片,然后抓包修改为php为后缀。
观察结果:上传失败。
证明对文件名后缀进行了检测,需要进一步判断是白名单检测还是黑名单检测;

Step2:判断是白名单检测还是黑名单检测:再上传一张照片然后在后缀上随便加几个字符,证明是黑名单检测

Step3:黑名单绕过:
在后缀.php后面添加::$DATA

8-1.png

8-2.png

文件路径拼接----成功
上传一个小马文件ma.php,抓包修改后缀为ma.php. .(点+空格+点),在后面添加“点+空格+点”
路径拼接的是处理后的文件名,于是构造ma.php. .(点+空格+点),经过处理后,文件名变ma.php.,即可绕过。

8-3.png

8-4.png

Pass9------------黑名单检测---文件路径拼接问题

Step1:先上传一张正常图片,然后抓包修改为php为后缀。
观察结果:上传失败。
证明对文件名后缀进行了检测,需要进一步判断是白名单检测还是黑名单检测;

Step2:判断是白名单检测还是黑名单检测:再上传一张照片然后在后缀上随便加几个字符,
文件名后缀进行了黑名单检测。

Step3:黑名单绕过:
上传一个小马文件ma.php,抓包修改后缀为ma.php. .(点+空格+点),在后面添加“点+空格+点”
路径拼接的是处理后的文件名,于是构造ma.php. .(点+空格+点),经过处理后,文件名变ma.php.,即可绕过。

9-1.png

9-2.png

Pass10-----黑名单检测-----后缀嵌套

Step1:先上传一张正常图片,然后抓包修改为php为后缀。
观察结果:上传成功,但是打开发现文件后缀名中php被删除了。

10.png

Step2:分析代码:将上传的文件名中含php的字符删去了。

$file_name = str_ireplace($deny_ext,"", $file_name);
str_ireplace(find,replace,string,count)
参数 描述
find 必需。规定要查找的值。
replace 必需。规定替换 find 中的值的值。
string 必需。规定被搜索的字符串。
count 可选。一个变量,对替换数进行计数。

Step3:绕过方法,既然会把含php的字符删去了,那就写两个php嵌套着,一个被删去后还有一个,上传ma.phphpp,打开发现变成了ma.hpp,额,是因为把前面的php去掉了就剩hpp.注意嵌套位置
例如ma.pphphp.(这样就算去掉一个php,也还剩一个php)
上传小马文件抓包修改后缀,观察结果。

10-2.png

果然去掉一个php,那么还剩下一个后缀还有一个php。

10-3.png

Pass11-----白名单检测-----00截断----save-path-GET型
Step1:上传一个图片文件抓包修改后缀为任意字符.aaaaa测试,上传失败----后缀是白名单。
Step2:白名单绕过
url处也多了一个参数

11-1.png

其他关的数据包:

11-2.png

本关的数据包:

11-3.png

发现多了一个参数?save_path-….
看起来像是文件的保存路径在./upload/,那么这个参数可以修改吗?

11-4.png

先上传一张正常图片,上传成功后打开发现路径为/ipload/文件名,那么如果我们修改了?save_path-….会不会影响保存的文件名。。。例如?save_path=../upload/aaa
提示上传失败
如果在添加一个%00,截断后面的是否可以上传呢?可以,上传文件名从aaa后面都删除,以文本信息输出

11-5.png

那么上传一个文件,抓包修改后缀为ma.jpg,在save_path的路径后追加“/1.php%00”后上传,通过修改save_path将上传的文件更改类型。

11-6.png

打开上传的图片路径,这是由于00截断的缘故,文件也找不到了。

11-7.png

把1.php后面的路径都删除就可以了

11-8.png

Pass12-----白名单检测-----00截断----save-path-POST型

Step1:上传文件测试,发现是白名单。

Step2:白名单绕过
和十一关不同的是这次的save_path是通过post传进来的,还是利用00截断,但这次需要在二进制中进行修改,因为post不会像get对%00进行自动解码。
上传一个小马文件,和上一关一样修改包,然后发现包里多了一行../upload/
在这里追加1.php(一个空格)(保存的文件名+一个空格),然后切换到Hex中找到空格对应的二进制的20将他修改为00后上传。

12-1.png

12-2.png

打开上传的图片路径,发现路径很奇怪,这是由于00截断的缘故,文件也找不到了。删除php后面的就可以了。

12-3.png

标签: none

添加新评论