uoload-labs pass1-21关详解

第一关

发现有一个checkFile()函数,推测可能是这个函数进行判断的,我们把它删除后再上传。
上传成功
在这里插入图片描述

第二关

仅仅判断content-type,于是修改content-type绕过:
在这里插入图片描述在这里插入图片描述在这里插入图片描述

第三关

发现是黑名单判断,于是尝试用php3,phtml绕过
在phpstudy的配置文件httpd-conf取消注释
在这里插入图片描述在这里插入图片描述

第四关

虽然还是黑名单,但几乎过滤了所有有问题的后缀名,除了.htaccess,于是首先上传一个.htaccess内容如下的文件:

在这里插入图片描述再上传图片马
在这里插入图片描述

第五关

还是黑名单,加上了.htaccess,但是没有将后缀进行大小写统一,于是可以通过大小写绕过:
windows忽略大小写
直接在后面干数字
在这里插入图片描述

第六关

还是黑名单,但是没有对后缀名进行去空处理,可在后缀名中加空绕过:
php文件后缀大小写
在这里插入图片描述

第七关

后面加"."
在这里插入图片描述

第八关

后缀加点,这里加俩
在这里插入图片描述

第九关

后缀加::$DATA
在这里插入图片描述

第十关

黑名单过滤,注意第15行和之前不太一样,路径拼接的是处理后的文件名,于是构造info.php. . (点+空格+点),经过处理后,文件名变成info.php.,即可绕过。
在这里插入图片描述

第十一关

依旧是黑名单过滤,注意到,这里是将问题后缀名替换为空,于是可以利用双写绕过:
在这里插入图片描述在这里插入图片描述

第十二关

.条件:php版本小于5.3.4 2、php.ini的magic_quotes_gpc为OFF状态
知识点:这里利用的是00截断。move_uploaded_file函数的底层实现类似于C语言,遇到0x00会截断。
看到是白名单判断,但是$img_path直接拼接,因此可以利用%00截断绕过
在这里插入图片描述

第十三关

这题和上一题基本一样,只是save_path不在URL中了,而在POST数据里面,由于POST里面的数据不会被url自动解码,所以要稍微改变一下,首先,先改好路径,然后再路径后面加上一个字符,什么字符都可以,这里我为了方便用+号。

因为是十六进制所以这种截断叫做是0x00截断,其实是%00截断最终被url解码还是会变成0x00的。在url中%00表示ascll码中的0,而ascii中0作为特殊字符保留,表示字符串结束,所以当url中出现%00时就会认为读取已结束。这是一样的道理,所以这里还有另外一种做法。
在这里插入图片描述在这里插入图片描述

第十四关

需要上传图片木马
在这里插入图片描述
正常是可以上传上的,因为本身就是jpg格式
在这里插入图片描述访问查看居然是正常页面
在这里插入图片描述以文本方式打开图片马,发现php代码前面为乱码
在这里插入图片描述再木马文件前面随便加几个
在这里插入图片描述
合成新的木马文件
在这里插入图片描述
上传后使用DVWA的文件包含查看
在这里插入图片描述

第十五关

和上一关差不多
在这里插入图片描述

第十六关

估计下载的源码错误,点击上传显示空页面上传页面的框架内什么也没有,所以放弃。

第十七关 二次渲染

上传图像成功再下载下来
在这里插入图片描述上一关在图片马最后输入的php代码没有了
找个空的地方输入php代码
没用十六进制工具,尝试可不可以
在这里插入图片描述好像废掉了
在这里插入图片描述使用十六进制试试
在这里插入图片描述吐了,又废了
用这个方法试了一个gif文件成功了
在这里插入图片描述

第十八关

上传php文件,抓包
发送到intruder,情书$变量
在这里插入图片描述设置没有载荷,无限期循环,开始攻击
在这里插入图片描述python启动脚本文件
在这里插入图片描述
命令行运行
Python 脚本名.py
上传成功返回ok
第十九关(条件竞争)
代码可以看出,代码先检查后缀,然后上传文件,然后更改文件名。这里又有条件竞争,在文件改名之前访问到它就行(配合文件解析漏洞)
我去看了看checkExtension()函数的代码
checkExtension()函数检查最后一个点之后的文件名,也就是后缀,存在文件解析漏洞

上传123.php.xxx ,在后缀后面再加个后缀,我直接上传的图片马就成功了,看别的教程和上一关一样需要不停跑,这就有点复杂了,图片马不香吗
在这里插入图片描述

第二十关 文件解析漏洞

在这里插入图片描述在这里插入图片描述

第二十一关

相比较于上一关的源码,此处服务器端先是检查了MIME类型,然后判断save_name参数是否为空,为空就把文件本来名称赋值给 f i l e , 否 则 就 是 将 s a v e n a m e 参 数 的 值 赋 给 它 。 紧 接 着 判 断 file,否则就是将save_name参数的值赋给它。紧接着判断 file,savenamefile是否是数组。
如果不是数组则将其拆成数组,然后数组最后一个的值(end函数就是取数组最后一个的值)同白名单做比较,符合jpg、png、gif中的一种就允许上传了。
在允许上传之后还要把数组的值拼接在一起对文件进行重命名。所以我们可以构造save_name[0]=cs.php/ save_name[1]置为空 save_name[2]=jpg(一个白名单的合法后缀)。
这样的话,reset( f i l e ) 取 的 是 数 组 的 第 一 个 元 素 即 c s . p h p / , 然 后 接 了 一 个 ′ . ′ 符 号 , 之 后 又 将 数 组 最 后 一 个 元 素 内 容 拼 接 到 一 起 。 可 能 有 的 人 会 疑 问 数 组 最 后 一 个 值 不 是 j p g 吗 ? 其 实 当 我 们 只 设 置 了 两 个 数 组 元 素 的 时 候 , 数 组 的 元 素 个 数 就 只 有 两 个 了 。 ! [ 在 这 里 插 入 图 片 描 述 ] ( h t t p s : / / i m g − b l o g . c s d n i m g . c n / 20201226210831139. p n g ) 既 然 一 共 只 有 两 个 元 素 , 这 里 就 是 file)取的是数组的第一个元素即cs.php/,然后接了一个'.'符号,之后又将数组最后一个元素内容拼接到一起。 可能有的人会疑问数组最后一个值不是jpg吗?其实当我们只设置了两个数组元素的时候,数组的元素个数就只有两个了。 ![在这里插入图片描述](https://img-blog.csdnimg.cn/20201226210831139.png) 既然一共只有两个元素,这里就是 file)cs.php/.jpg![](https://imgblog.csdnimg.cn/20201226210831139.png)file[2-1]也就是$file[1]。因此拼接的就是空的,最终得到的文件名就是cs.php/.。
对于像cs.php/.这样的文件路径,move_uploaded_file()函数会忽略掉文件末尾的/.。如此一来我们上传到服务器的文件还是被重命名为了php后缀。
第一步:上传文件,抓包修改参数
在这里插入图片描述在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值