pass-11
strrpos() 函数查找字符串在另一字符串中最后一次出现的位置,substr() 函数返回字符串的一部分,文件保存的方式是上传路径+随机时间+截取的文件后缀,其中上传路径可控,可以利用这一点
绕过方法:
利用00截断进行绕过,即move_uploaded_file函数的底层实现类似于C语言,遇到0x00会截断
截断条件:
1、php版本小于5.3.4
2、php.ini的magic_quotes_gpc为OFF状态
访问:
pass-12
和上一个关一样不过路径上传方式由GET变成POST
绕过方法
00截断 post方式中需要修改成二进制的00而不是直接在请求数据中修改00
在hex视图中找到+的十六进制2b改为00,然后放行
访问:
pass-13
读取上传文件中的两个字节
将读取的内容解包(unpack() 函数从二进制字符串对数据进行解包返回数组一个字节为一个值)
返回解包后的整数值(intval() 函数通过使用指定的进制 base 转换(默认是十进制),返回变量 var 的 integer 数值)
绕过方法:
我们在一句话木马前面加上GIF89A(gif图片特征码)
上传了马后缀为gif想要利用需要配合另一种漏洞文件包含,靶场专门有一个文件让我们测试文件内容为
访问:
由于只检查前两个字节
方式2:
码前面加上11然后找到对应hex值3131 改为ffd8
访问:
方法三:
使用png的特征吗前两个字节8950
访问:
pass-14
利用图片马,将一张正常的图片jpg,和一句话php合成一张新的jpg文件(window下 cmd , copy /b 1.jpg + 1.php 3.jpg)
也可以直接在图片里写入
访问:
pass-15
绕过方法
一样使用图片马
pass-16
上传图片马,但是经过二次渲染,马已经消失,通过对比两个图片相同的部分,然后一样的地方写上一句话木马;
经过比较发现蓝色部分是一样的,在此处写上木马上传成功后比较
木马并没有消失
pass-17
通过move_uploaded_file保存文件在判断是否后缀是否是图片,如果是则重命名保存,如果不是删除这里存在着一个漏洞,叫条件竞争
当我发送大量的包时,文件就会先进行保存,而判断可能会存在一定的延迟此时上传一个php文件里面代码在创建一个包含一句话的php这样就算把上传的文件删除也会存在一个木马文件
上传一个php文件内容如下
<?PHP fputs(fopen('she.php','w'),'<?php phpinfo() ?>');?>
上传使用bp抓取然后发送到intruter模块设置如下
点击两个位置都可以开始攻击
攻击的时候在另一浏览器访问
http://127.0.0.1/upload-labs/upload/u.php
它会在删除之前执行代码生成一个she.php的文件
pass-18
本关对文件后缀名做了白名单判断,然后会 一步一步检查文件大小、文件是否存在等等,将文件上传后,对文件重新命名,同样存在条件竞争的漏洞。可以不断利用burp发送上传图片马的数据包,由于条件竞争,程序会出现来不及rename的问题,从而上传成功
解题方法与17题类似
pass-19
文件名可控,
pathinfo() 返回一个关联数组包含有 path 的信息。
包括以下的数组元素:
[dirname]
[basename]
[extension]
访问:
pass-20
先检查文件类型,后检查是否上传了文件名没有则为文件的名字,判断是否为数组,若不是则以点分割返回一个数组,取数组最后一位数为后缀,文件保存为reset输出数组第一个数,和最后一位数保存
绕过方法:
php修改后缀jpg上传捉包
文件类型已经为image/jpeg
修改上传路径为一个数组,当获取文件后缀时为jpg,合成文件名为数组第一个,和最后一个,当我们修改jpg为数组的2时,1此时是空的数组一共有三位数,但是实际只有两位,所有获取到的值为空
此时上传后的文件为in.php.
访问: