文件上传漏洞之upload-labs

前提:

本文中的以xshell命名的均为以密码为admin的一句话木马,而shell命名的则是由冰蝎工具生成的木马,由于upload-labs受apache和php的影响,需要多准备一些php的版本和apache环境,不然可能难以完成实验,若遇到问题可私信我,我会尽我所能帮助您。

若实验中遇到与我一样的问题(报错)可参考:upload-labs实验过程中遇到的问题-CSDN博客

pass-01:js前端验证

测试性的上传一个一句话木马,发现被拦截了,而且根据推测大概率是前端检测,于是我们就可以着手上传啦。

先上传一个由shell.php改后缀的shell.jpg文件,然后再通过bp抓包改变其后缀。

此时返回一个破裂的图片,我们就可以猜测是成功了,但我们不知道他路径,这里我们可以直接将图片拖拽到新标签页,然后就可以访问其文件了,当返回的内容为一片白页面,这大概率说明我们成功了。

启动我们的冰蝎,进行连接。

连接成功之后就可以进行,操作了,蚁剑略。

pass-02:后端验证(mine绕过)

正常上传一个shell.php,提示文件类型不正确,一般提示这个信息,猜测大概率是后端验证文件后缀名,但不知道是不是真,一般情况下我们也不知道它禁了哪些后缀,所以我们先尝试01的方法。

发现可以,那太没意思了,我们可以尝试换一种方法,直接上传php文件,因为是后端验证,主要是验证Content-type的值,所以我们改Content-type值试试。

发现上传成功,那我们就直接连接咯。

pass-03:过滤不全

日常上传一个shell.php,之后就不多说了,然后发现设置了黑名单,而且还告诉了我们,然后根据观察和我们的知识我们可以知道,这个黑名单太少了,过滤不全,因此我们是可以绕过的。

这里我们上次一个xshell.php,然后通过bp抓包,修改其后缀为php3.

然后我们就可以发现成功了,然后我们再启动蚁剑连接即可。

这里我尝试过冰蝎,但不知道为什么上传成功了,但却连接不了。同时这题也可能会出现上传成功后访问文件页面时会直接下载,这是因为有可能是apache配置文件没配置php3或者php版本不适配等问题。具体可自行上网搜索。

原理:php3之后能以php执行,我猜测是因为这个系统是apache+php的环境中,管理员为了兼容旧版本的php而写了允许php2-6的代码,而又没过滤干净,导致的,仅个人猜测,如有错误欢迎指正。

pass-04:黑名单不全(htacess/图片码绕过)

正常上传一个php,发现文件不允许上传!经过尝试发现之前的方法好像都不可以,于是我就想到上传htacess文件试试,然后发现成功了。

于是我们就可以构造一个.htaccess然后再上传我们的一句话木马。

然后我们就可以尝试去连接一下试试,发现成功了。

或者我们也可以使用另外一个方法:使用图片木马的方式。

先使用画图工具,随便画一幅图,越简单越好。

然后用记事本打开,再将我们的木马放在末尾。

保存,这样我们的图片木马就制作完成了。

于是就和之前一样上传,发现是可以的。

pass-05:.user.ini绕过

日常上传php文件,发现不行,于是就依次尝试上面的方法,都发现不行,连htacess都被禁了,于是我看了一下提示,提示存在readme.php文件。存在这个文件说明可以使用.user.Ini文本,user.ini是php的一种配置文件

创建一个.user.ini文本,然后在记事本上写上

auto_prepend_file=xshell.jpg

然后上传到服务器上,之后再上传我们的xshell.jpg。这样只要我们通过访问readme.php就能让user.ini执行我们的xshell.jpg里的代码。

pass-06:(大写绕过)

先上传php然后上面的方法都试过也不行,于是就查看了一下提示。

经过分析,可以知道采用了黑名单,而禁php时,禁了pHp没有禁全大写,于是我们可以去尝试一下使用.PHP

然后发现500状态码,这个之后测试了一下应该是apache的版本问题,换nginx时就可以正常访问。

然后就可以正常连接了。

使用冰蝎工具也是一样的,往后就不演示。

先重新重新一个别的加密木马。因为之前的那个aec貌似被屏蔽了,无法进行连接,所以我们要新建一个不一样的加密方式的php文件,然后改后缀,上传连接即可。

pass-07:(空格绕过)

这题的提示和上一题一样。

但是当我们上传.PHP时他会提示,此文件不允许上传,那么我们就可以猜测他应该是使用了大小写转换,那么我们怎么办呢?我们就尝试末尾加.不行,加空格没想到上传成功了,之后就可以连接了。

若出现上传错误,有可能是php版本问题,可以尝试更换一个低版本的php。

pass-08:(.绕过)

这题先还是和上一题一样先测试空格,发现不行

然后测试.发现成功了。

pass-09:(::$DATA绕过)

这关我们和上两题一样测试,发现都不行,于是我就想他们两个如果结合在一起是不是可以?没想到真行。

但是发现我们的文件名没有php了,进行连接果然不可以。

然后我们就可以尝试一下使用::$DATA,  ::$DATA的作用是保留我们的后缀名。

然后就会弹出403,但没关系,我们连接一样是可以的。

pass-10:(.空格.绕过)

这题当后面加.时会弹与其他报错不一样的信息,于是就在想突破口应该就是.后面加东西了,就尝试了. .没想到成功了,上一题没成功这题成功了。

pass-11:双写绕过

直接上传php,发现成功了,但是后缀不见了。

那么就可以考虑可不可以使用双写绕过,发现是可以的。

之后就是连接了。

pass-12:(GET 的00截断)

当我们上传php时,显示只允许上传jpg,本来想进行常规的前后端修改绕过,但抓包发现了../upload,这就能联想到使用00截断。

上传成功,虽然当我们访问的图片的时候显示404,但不影响我们的连接,因为我们使用了00截断,所以php后面的内容是没有记录到服务器的,因此才会显示404.

pass-13:(POST的00截断)

上传php时和上一题一样,但是不一样的是这次的../upload不在url中了,而是独立了出来,那么就不能直接使用%00,而是要将其转化为url还的编码。

先构造好我们的%00语句,然后选择%00语句右键,根据图片选择URL-decode,这样转化后的%00就和我们上一题的一样了。

pass-14:(图片码+include.php执行)

这题,题目说了是直接上传图片码,图片码制作上面04题已给出,后面也有制作流程。

但是当我上传图片码时发现文件未知,上传失败,依据经验大概率知道是哪出现问题了。我们使用抓包在头文件处加上GIF89a,这样就能上传成功啦。

虽然上传成功了,但是他是没办法执行的,因为他返回的是一个gif图片文件,然后这里又有一个知识点,那就是php中的include包含文件代码。

  根据题目的提示我们就可以知道存在一个include.php,于是就访问它,发现了一个可以传参数的file,然后就可以利用它执行的图片码了。

这里其实就已经完成了本题,但题目说要png和jpg文件也要完成访问。

那么就制作一个png图片码。

先使用系统自带的画图工具,简单的画一个图片,然后保存为png格式,之后使用010或者winhex工具在末尾添加一句话木马(如果使用记事本可能会破坏原文件的格式),然后就可以上传了。jpg也是一样的,就省略了。

pass-15:(图片码+include.php)

上传一个图片码。

和上一题一样:利用include.php去执行图片码。

pass-16:图片码类型

若遇到上传后一片空白可前往问题合集:

这题也是图片码的解决方法。

pass-17:图片码的二次渲染

这题一样是图片码的题,但是我们上传后虽然上传成功了,但是连接不了,看了提示说是二次渲染,将上传后的文件下载下来后发现一句话木马确实不见了,所以就只能使用二次渲染,因为二次渲染制作比较麻烦,所以我直接使用大佬的了,若需要可私信我。

pass-18:(利用时间差执行一句话木马)

这题提示直接就是代码审计。

可以知道如果上传的文件不是jpg,png和gif就会被删除,但是这里会存在一个代码的时间差,所以我们就可以利用其漏洞,在目标机是生成一个一句话木马。

然后上传,使用bp抓包,根据下面的指示走。

然后开始攻击,这样在我们的后台就可以看见会持续的上传和删除1.php。

然后就可以去尝试访问,当访问成功时,就会自动生成一个一句话木马,就可以连接了。

pass-19:代码审计(图片码)

这题还是需要代码审计。

我认为本质上就是一个白名单过滤,然后将上传的文件重命名,

但按18题的思路是没有实现,不知道为什么。

所以我就直接按最省事的,根据白名单肯定是可以上传图片码的,后续解决再回来修改。

pass-20:路径构造绕过

这题很明显就是可以在前端修改上传的文件名。

根据上面的测试,就可以尝试去在php后面加.能不能绕过,经过测试发现加/.是能绕过检测的。

pass-21:代码审计(白名单+mine绕过+构造数组路径绕过)

最后一题需要的是代码审计。

这里的白名单是jpg,png,gif,而且需要一个数组,只要我们的数组最后的文件名为三则中的一个就即可,但是第二个数据的下标不能为1,因为系统会减1导致覆盖了第一个数据。所以使用bp抓包,然后修改数据。

原始:

修改后:

这样我们就上传成功了。

总结:目前文件上传漏洞的这个靶场主要是运用,前端文件名绕过,mine后端文件名绕过,大小写绕过,空格绕过,图片码绕过(前提是要存在include.php文件),php与apache版本漏洞绕过,空格绕过,二次渲染等技术。

主要防范措施仍然是要加强白名单的校验,同时能重新生成一个让攻击者无法猜到的文件名。

持续更新中,请见谅。

  • 4
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值