文章目录
upload-labs通关攻略教程一(1-11关)
Pass-12-(白名单验证,get型00截断)
- 查看题目源码
白名单判断,只允许三种文件类型。strrpos(string,find,start)
函数查找字符串中最后一次出现的位置,这里是将后缀名提取赋值给file_exit.
但$img_path
是直接拼接,我们可以通过抓包修改get
参数,然后通过file_ext
无效,这样就可以上传php
文件因此可以利用%00
【使用00
和%00
均可以】截断绕过。
%00截断的概念和原理:
在url
中%00
表示ASCll
码中的0
,而0
作为特殊字符保留,表示字符结束;
当url
中出现%00
时就认为读取已结束,而忽略后面上传的文件或者图片,只上传截断前的文件或图片。
要求:php
版本小于5.3.4,且php
中的magic.quotes.gpc
为OFF
状态 - 将路径改为
path="upload/1.php%00"
拼接之后,文件上传时就变成了"upload/1.php%001.jpg
",这时上传便将1.php
上传进去,而1.jpg
被截断。 - 拖拽点击图片,看到
php
配置页面,即可说明上传成功。 - 使用上述同样方法上传一句话木马,使用蚁剑连接即可。
Pass-13-(白名单验证,POST型00截断)
与第十二关的区别在于这里是使用
POST
传地址,POST
不会对里面的数据自动解码,需要使用hex
(十六进制编码)加上00
截断。因此在本关不可以使用%00
,需要使用00
。
- 上传含有一句话的文件
1.jpg
,使用burp抓包后,在上传路径出添加文件名1.phpa
- 使用
burp
中的hex
模块在php
后面a
对应的位置添加00
进行截断,即在1.phpa
十六进制编码中a
对应的hex
编码改为00
,点击send
,查看响应。放包后,拖拽点击图片,即可看到php
配置的页面,说名上传成功。【若用蚁剑连接,要注意文件名被修改,可以使用burp
或者点击打开图片查看被修改后的文件名。】
Pass-14-文件头检测
方法1
- 查看源码和提示,源码意思为上传时只检查开始前两个字节的内容,
unpack
解密后,使用intval
转换为10进制,默认为十进制,根据转换后的结果判断图片类型。大致想法可以使用图片木马的方式来实现绕过。 - 使用
010editor
制作图片马,要注意将一句话木马插在图片数据靠中间的位置。 - 上传成功后拖拽点击图片,看到
php
配置页面,说明上传成功。若采用蚁剑连接一句话木马的方法,要特别注意上传图片的文件名会被修改。(例如本关我上传的是2.png
,上传成功后被修改的文件名如下) - 使用蚁剑连接时要注意,不可以直接连接,应该配合文件包含漏洞【在程序开发过程中,开发人员通常会把重复使用的函数写进单个文件中,在使用某个函数的时候,直接调用文件,这种调用文件的过程称为包含。程序开发人员都希望代码更加灵活,所以通常会把包含的文件设置为变量进行动态调用,但正是因为如此,导致客户端可以调用任意文件,造成文件包含漏洞,几乎所有的脚本语言都会提供文件包含功能】中的
file
协议【访问本次系统文件】。文件包含在读取文件源码的同时,如果遇到符号PHP
语法规范的代码,就会无条件执行。 - 使用文件包含漏洞来连接图片马。(该靶场所有关均可以使用文件包含)
方法2
- 上传含有一句话木马的
php
文件,并使用burp抓包。 - 由于源码中提示,只允许
jpg、png、gif
三种后缀,因此在这里我们可以考虑在burp
中添加GIF
图片的文件头GIF89a
,绕过GIF
图片检查。(或者在010editor
中打开图片,添加对应的文件头格式)
- 使用蚁剑连接时方法同上述方法1.
方法3
使用命令行生成图片马,也可以使用图+木马+图。【但存在有的图片与一句话木马不兼容,图片最好越小越好】
Pass-15-getimagesize函数(php中用来判断目标文件是否为图片)
- 查看源码,再查看提示,使用getimagesize()来检查是否为图片格式,比如图片的长度和高度等。,因为源码中要求限制只有三种后缀允许上传,因此可以考虑制作图片木马。
- 使用010editor在图片数据中间插入一句话木马,并保