uploadlabs

pass-01

 传php文件发现不行,提示来自前端即浏览器发出。

针对前端验证

前端验证属于是在客户端进行验证。因此,我们可以对浏览器做手脚

方法一:

禁止浏览器js功能

 然后传就行了

方法二

我们找一个中转上传

 由于是前端验证,js代码f12就能看到

我们把代码全部复制

在本地网站开一个php,然后写入复制的代码。将程序指向靶场

然后访问程序就行

正常测试的时候,我们需要得到文件路径才能getshell

dirsearch扫一下就行

 pass-2

咱们直接开始后端验证了

传图片他说类型错了,抓个包,改类型就欧克

pass-3

 提示后缀名有问题,我们就把filename改一下

这里有一个细节,文件名被后端修改了,我们可以通过前端代码看到。不知道文件名是不能get shell 的

pass4

 结合2和3就行

pass5

利用系统解析漏洞 .user.ini

 意思是ini所在的文件夹下名为1.jpg的文件全部被文件夹下的PHP文件包含。

之前以为和.htaccess一样,然后就直接访问jpg。然后就gg了

pass6

 应该是源代码没有strtolower

 pass7

应该是源代码没有删除首尾空格

 pass8

没有删去末尾的. 即缺少deldot

pass9

 没有替换掉::$DATA

pass10

功能基本齐全,但是没有多次过滤。我们可以1.php. .绕过 

pass11

双写后缀名绕过

pass12

00截断

 

 pass13

同样的00截断,这次在post数据上,所以要url解码

pass14 

这一关只对文件头进行检查。我们可以传图片码,也可以在上传的php加上可以通过验证的文件头

 

 pass15

这次使用了getimagesize()函数。使用图片码肯定方便些

 

 pass16

 

 同样是图片码

pass17

还是图片码

pass18

利用二次渲染以及条件竞争

 

由于第一次上传没有验证,我们可以抓第一次上传的包,利用bp反复上传

另一边再用bp反复接受,这样就完成了对靶机的上传。

不过在实战的情况下,我们是很难在这种不稳定的情况下连接后门的

所以一句话木马可以这样写

<?php fputs(fopen("8848.php", "w"), '<?php @eval($_POST["shell"]);?>'); ?>

pass19 

 require_once()

 

观察代码可以知道,会先接收文件(会进行白名单过滤),然后再对文件改名。

很多人说这是条件竞争。我并不觉得。实际上,改名对我们的影响并不大。(是可以抓包知道路径和更改之后的名字的)因为是白名单过滤,我们可以传图片码,然后寻找解析漏洞或者文件包含漏洞。扫一下目录,我们不难发现有include.php

 之后文件包含一下就行了。

pass20

 跟前面一样,00截断就行

pass21

说真的,这关要是实战遇到的黑盒,我会直接跑路。用数组谁拟🐎能想到的。

三重检查

第一重很简单的mime检查 ,抓包改i类型就OK

后面就开始诡异。它把你上传的文件名改成数组。拆开来检验后缀,然后再合起来作为新名字

 方法就是用数组绕过。这时候用count()算出来的长度是2不是3。这一点我猜测是第二个单元数值都没有初始化,可能计算的时候直接就视为没有这个单元。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值