目录
今天继续通过uploadlabs来联系文件上传的知识点,上次做到了第11关,接下来就更新剩下的所有的关卡。
upload_labs通过
level-12
显然这里是白名单的方式来设置的规则,但是上传的路径是可以进行控制的,这里通过GET方式提交所以我们通过%00来进行绕过。
level-13
第十三关与十二关的原理是一样的,只不过在第十三关中,采用的是POST方式来提交,POST方式是不会自动进行解码的,所以需要我们自己帮助它来解码。
其实这里的3.php后面的%00已经被我们手动的解码了。上传成功之后,复制图片链接的地址,我们来访问便发现图片中的php语句被成功执行。
level-14
题目已经告诉我们,上传图片,并且结合文件包含漏洞,我们观察其源码。
我们看到有两个函数,一个是@unpack,另一个就是intval函数,其中的unpack函数的作用就是:从二进制字符串对数据进行解包。其中的intval函数是获取变量的整数值,通过使用指定的进制 base 转换(默认是十进制),返回变量 var 的 integer 数值。
level-15
getimagesize() 函数用于获取图像大小及相关信息,成功返回一个数组,失败则返回 FALSE 并产生一条 E_WARNING 级的错误信息。 image_type_to_extension 根据指定的图像类型返回对应的后缀名。stripos() 函数查找字符串在另一字符串中第一次出现的位置,stripos函数是不区分大小写的,如果返回值>=0,则查找成功,否则返回false。
level-16
内置函数exif_imagetype函数用来获取图片的类型。
level-17![](https://img-blog.csdnimg.cn/90c799586ac44f70959f13b80fe95bcc.png)
分别通过函数imagecreatefromjpeg、 imagecreatefrompng、imagecreatefromgif来判断图片的类型。所以以上的level14-17关卡都可以通过上传一个图片马结合上文件包含漏洞来实现通关。
level-18
第十八关主要考察的是条件竞争的原理,例如我们在编辑一个文件的时候,是不可以将他进行删除、重命名等操作的。 在这里的代码中,就是先将我们上传的文件临时保存在/upload下面,然后再去判断文件名是否合法以及二次渲染操作,并且将其重命名,所以我们可以在上传文件的瞬间去访问它,导致这个文件的执行,并且不会重命名。这里我们就可以直接上传一个php文件,通过抓包发送到Intruder模块,不断的进行发包,然后去访问它。
level-19![](https://img-blog.csdnimg.cn/a0ca21ab763a460dbf074a4016da73a3.png)
十九关的思路和十八关类似,只不过是先进行了验证文件的后缀名,然后进行上传,上传之后在进行二次渲染。所以我们这里可以通过上传图片马,然后结合文件包含漏洞。
level-20![](https://img-blog.csdnimg.cn/65ae02218f6f4eb0a947fb1360f51d9a.png)
20关有两种思路,一种是由于move_upload_file()中的$img_path它是通过POST方式来控制save_name的,所以我们可以使用%00截断来修改。
第二种思路就是利用move_upload_file()的特性,它会将后缀的/.去掉。所以我们可以上传文件的后缀名为.php/.来绕过。
这里的php后面是存在%00经过解码之后的。同上面的%00截断的方法是一样的。
level-21![](https://img-blog.csdnimg.cn/678afd8a7fc5407fb8ef1ffa389f5e56.png)
数组接受+文件命名。首先会通过一个MIME的信息校验,通过之后查看save_name中是否为空,如果为空则取上传文件中的名字,否则就取save_name中的值作为$file的值,之后判断$file中是否为空,如果不为空,将其中的字符全部转换为小写。然后取$file中的后缀名与白名单中的后缀名进行比较。这里我们就可以设置save_name数组中的值来进行绕过。
在修改之后save_name中存储的信息分别是shell.php/、空(因为这里我们在数据包中没有指定)、jpg,$file_name中的值就变成了shell.php/.jpg。