upload通关

pass-01

根据提示:本pass在客户端使用js对不合法图片进行检查

第一种方法:就是通过插件禁用前端js,直接上传php文件

禁用后就可以上传了

第二种方法:先将php文件的后缀更改为网页能接收的形式 ,比如我们这里将其更改为jpg格式

 

 上传时对其抓包

我们将这里的2.jpg的后缀再更改回去,之后关闭代理并丢包

可以看到,上传成功

pass-02

根据提示:本pass在服务端对数据包的MIME进行检查

所以我们只需要在抓包时更改content-type即可

抓包后发送到repeater,可以更改为image/jpeg

成功上传

pass-03

根据提示:本pass禁止上传.asp|.aspx|.php|.jsp后缀文件

通过查询源代码我们发现:Pass-03进行了如下防护操作:1.黑名单为.asp .aspx.php.jsp 2.删除文件名首尾空格 3.删除文件名末尾的点 4.将后缀名转为小写 5.去除::$DATA数据流标记 6.使用随机数重命名文件

那么我们就可以使用php的的别名进行绕过,如phtml

上传成功

pass-04

本pass禁止上传.php|.php5|.php4|.php3|.php2|php1|.html|.htm|.phtml|.pHp|.pHp5|.pHp4|.pHp3|.pHp2|pHp1|.Html|.Htm|.pHtml|.jsp|.jspa|.jspx|.jsw|.jsv|.jspf|.jtml|.jSp|.jSpx|.jSpa|.jSw|.jSv|.jSpf|.jHtml|.asp|.aspx|.asa|.asax|.ascx|.ashx|.asmx|.cer|.aSp|.aSpx|.aSa|.aSax|.aScx|.aShx|.aSmx|.cEr|.sWf|.swf后缀文件

通过查看源代码,我们发现此网页几乎禁止了全部后缀,但却没有通过循环判断此文件是否只有多个后缀,所以我们可以构造文件名使最后经过滤的文件后缀名仍为.php

所以我们可以将后缀名加上:点+空格+点,这样一来,在上传时检测不到以php后缀结尾的文件,且在最后过滤时将空格删掉,Windows会自动删除文件名最后的点,最后保存下来的就是.php后缀的文件

上传成功

pass-05

根据提示:上传目录存在php文件(readme.php)

这个提示有没有区别不大,查看源码后发现可使用与pass-04同样的绕过方法,不多赘述

pass-06

根据提示:本pass禁止上传.php|.php5|.php4|.php3|.php2|php1|.html|.htm|.phtml|.pHp|.pHp5|.pHp4|.pHp3|.pHp2|pHp1|.Html|.Htm|.pHtml|.jsp|.jspa|.jspx|.jsw|.jsv|.jspf|.jtml|.jSp|.jSpx|.jSpa|.jSw|.jSv|.jSpf|.jHtml|.asp|.aspx|.asa|.asax|.ascx|.ashx|.asmx|.cer|.aSp|.aSpx|.aSa|.aSax|.aScx|.aShx|.aSmx|.cEr|.sWf|.swf|.htaccess后缀文件

通过查询源代码发现:本网页并未将后缀大写改为小写,所以将后缀改为PHP绕过

上传成功

pass-07

根据提示:本pass禁止上传.php|.php5|.php4|.php3|.php2|php1|.html|.htm|.phtml|.pHp|.pHp5|.pHp4|.pHp3|.pHp2|pHp1|.Html|.Htm|.pHtml|.jsp|.jspa|.jspx|.jsw|.jsv|.jspf|.jtml|.jSp|.jSpx|.jSpa|.jSw|.jSv|.jSpf|.jHtml|.asp|.aspx|.asa|.asax|.ascx|.ashx|.asmx|.cer|.aSp|.aSpx|.aSa|.aSax|.aScx|.aShx|.aSmx|.cEr|.sWf|.swf后缀文件

通过查看源代码发现本网页在过滤时并未对空格进行处理,所以截包时在后缀加一个空格即可

可以看到filename最后加了一个空格

上传成功

pass-08

根据提示:本pass禁止上传所有可以解析的后缀

通过查看源代码发现,网页没有使用去除后缀的点的函数,所以方法与pass-07的相差不多,只需要在filename最后加一个点即可,这里不做演示了

pass-09

直接查看源代码,发现没有去除字符串的函数,所以在bp中在文件名末尾加上::$DATA即可,也不过多演示了

注:在按照路径访问时别忘记删掉url中的::$DATA

pass-10

根据提示:本pass只允许上传.jpg|.png|.gif后缀的文件

通过分析源代码,发现网页只过滤了一次点,所以使用老办法点+空格+点的方法进行绕过

pass-11

根据提示:本pass会从文件名中去除.php|.php5|.php4|.php3|.php2|php1|.html|.htm|.phtml|.pHp|.pHp5|.pHp4|.pHp3|.pHp2|pHp1|.Html|.Htm|.pHtml|.jsp|.jspa|.jspx|.jsw|.jsv|.jspf|.jtml|.jSp|.jSpx|.jSpa|.jSw|.jSv|.jSpf|.jHtml|.asp|.aspx|.asa|.asax|.ascx|.ashx|.asmx|.cer|.aSp|.aSpx|.aSa|.aSax|.aScx|.aShx|.aSmx|.cEr|.sWf|.swf|.htaccess字符

通过查询源代码我们发现,此网页的过滤方式是将所有黑名单上出现的后缀名都更改为空白,然后无论后缀为什么都会上传,由于此过滤只进行一次,所以我们可以在原本的后缀上加入黑名单中的后缀名,如:可以在php中插入一个jsw,将原本的php后缀更改为:.phjswp,这样一来,在上传后就会被过滤为.php,完成文件的上传,具体过程不做演示

pass-12

在进行此网页的文件上传之前,我们先来了解一下截断漏洞

使用此漏洞的大致方法为:比如我们上传一个文件名为2.php%002.jpg的文件,在文件上传后,网页在过滤时,会发现文件的后缀为jpg,于是就会让文件成功上传,但是在文件保存时,会忽略掉%00后面的东西,于是我们上传的文件就成功绕过变为2.php

根据提示:本pass上传路径可控

并查询源代码发现,我们可以利用此漏洞更改保存路径

首先随意选择一个php文件,在上传时抓包,在上传路径后加上我们要上传的文件名和%00,并且将文件名后缀修改为.jpg

可以看到成功上传

我们查看一下upload

成功上传

注:过本Pass,PHP版本=5.2.17,php.ini中关闭magic_quotes_gpc选项

pass-13

本题原理与pass-12相差不大,唯一区别是此题为post型,在修改路径时直接在明文中添加%00不会被服务器解码,我们需要修改HTTP包中上传路径对应的十六进制值(改为00)进行截断攻击

具体修改方法

以图示为例,首先将上传路径修改为../upload/2.php.jpg,将文件名修改为2.jpg

之后进入hex界面,将如图所示jpg前的点,也就是2e更改为00

 之后send就可以上传文件了

 上传成功

pass-14

注意:
1.保证上传后的图片马中仍然包含完整的一句话或webshell代码。
2.使用文件包含漏洞能运行图片马中的恶意代码。
3.图片马要.jpg,.png,.gif三种后缀都上传成功才算过关!
4.PHP版本>5.3。
5.必须在php.ini中开启allow_url_fopen选项

这里我们需要提前在pass-14这一文件夹下添加一个include.php文件,具体内容如下:

<?php
    include($_GET['page']);
?>

之后通过命令将图片文件与php文件copy到一起,之后上传到网页中

这时,我们的include.php就派上了用场

我们更改url,将图片文件路径传递给此php文件,我们就能在网页中看到结果了

可以看到,成功上传

png,gif与此方法类似,不做演示

pass-15

过程与pass-14相同,同样是以图片马形式上传,这里不做演示了

pass-16

过程与pass-14和pass-15相同,不过必须开启php_exif模块

pass-17

由于软件运行问题,此题不演示操作过程,只解释绕过原理

通过查看源代码,本体是通过二次渲染的方法来防止图片马上传的,而二次渲染会将我们上传的图片马中的php代码删掉,所以我们可以将原图与渲染过后的图片进行对比,查看哪里没有被渲染,我们在其中插入php即可,推荐的对比软件为beyond compare

pass-18

通过提示,此题需要代码审计

我们查看代码过后,发现如果上传的文件后缀不符合白名单,立即删除,这让我们连解析的机会都没有,但如果我们利用爆破功能,在同一时间上传多个文件,且在删除前就进行访问,那么它就无法删除了

所以我们先选择一个php文件,上传时抓包,发送到爆破模块

首先将所有的变量清除,其次将payload type改为null payloads

之后按如下的进行更改

之后把线程调高一点,我们这里调成20

然后就可以开始爆破了

开始爆破后,开始访问127.0.0.1/upload-labs-master/upload/2.php(因为我们上传的文件名就为2.php),如果访问失败就一直刷新,直到成功访问

成功访问

pass-19

通过查询源代码可知,此关还会检查文件后缀,所以不能直接上传php文件,但是我们可以上传图片马,之后的步骤与pass-18相同,访问文件时使用文件包含漏洞即可

pass-20

通过提示:本pass的取文件名通过$_POST来获取

再经过查询源码我们可以得知本Pass只对保存名进行黑名单判断,该做的防护全部没做。所以我们进行大小写绕过,使用BurpSuite截包,直接将保存后缀改为:PHP

上传成功

pass-21

本Pass做了如下校验:1.验证MIME类型 2.验证文件名

我们查看源代码分析验证文件名方法:

1.empty()配合三运运算符检查文件名是否为空

2.如果$file不为数组则将$file打散为数组

3.end()函数提取数组最后一个元素为后缀名

4.确定白名单

5.将文件名设置为数组索引为零的元素与数组索引为元素总个数减一的元素合并

6.上传、改名、移动

首先第一个校验我们通过更改content type就能很好解决

之后
reset()取数组索引为0的元素为文件名,所以将save_name[0]设置为“shell.php”
save_name[1]不设置,使count()结果为2
save_name[2]为jpg
拼接结果为shell.php,$ext值为jpg

接下来对此过程进行解释:

我们设置的数组可以看成:{"upload-20.php"," ","jpg"},一共三个元素,为了便于讲解,我们接下来给这个数组取名为a

由于count函数的特性为:在计算数组内元素个数时不算null,所以count()的结果为2

在函数取保存名称时,会取到count()-1的位置,也就是a[1],在数组中为null

在网页检验文件名后缀时,它实际是在检验此数组最后一个元素是否在白名单内,而我们这个数组最后一个元素为jpg,显然是在其中的

这样一来我们成功上传文件到“upload-20.php ”,此文件名后面的空格在上传时会忽略掉

查看upload

可以看见,成功上传并保存为php格式的文件了

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值