upload-labs
upload-labs
Pass-01(前端验证)
第一关通过前端js进行验证,不允许上传.php类型文件
(1)可以将php文件修改为后缀为.jpg后缀文件,在通过burp抓包进行修改
(2)通过修改前端代码添加.php文件进行上传
Pass-02(MIME验证)
第二关通过服务端对数据包的MIME进行检查
通过burp修改Content-Type类型
Pass-03(黑名单验证,特殊后缀)
第三关禁止上传.asp|.aspx|.php|.jsp后缀文件,可以尝试上传后缀php3,php5的文件进行上传
Pass-04(黑名单验证,.htaccess)
第四关禁止常见的后缀文件但没禁止.htaccess
可以尝试使用.htaccess重写文件解析绕过
1 |
|
在上传一个4.jpg文件上传成功后.jpg文件就会以,php文件运行
测试成功
Pass-05(黑名单验证,.user.ini.)
源码里把所有可以解析的后缀名都给写死了,包括大小写,转换,空格,还有点号,正常的php类文件上传不了了,并且拒绝上传 .htaccess 文件
反复观察发现没有被限制的后缀名有 .php7 以及 .ini
php.ini 是 php的配置文件,.user.ini 中的字段也会被 php 视为配置文件来处理,从而导致 php 的文件解析漏洞。
但是想要引发 .user.ini 解析漏洞需要三个前提条件
1服务器脚本语言为PHP
2服务器使用CGI/FastCGI模式
3上传目录下要有可执行的php文件
创建一个.user.ini文件并把它上传auto_prepend_file=GIF89a.jpg
.user.ini文件里的意思是:所有的php文件都自动包含GIF89a.jpg文件。.user.ini相当于一个用户自定义的php.ini
接着上传GIF89a.jpg文件,文件内容为:
1 |
|
然后在复制图像地址后,用蚁剑访问将文件名改为readme.php
也可用 php. . 点空格点 绕过上传
Pass-06(黑名单验证,大小写绕过)
这一关同样是后端黑名单,同时过滤掉.htaccess和.ini。但是没有使用strtolower()函数,可以使用大小写绕过黑名单
把.php 格式改为 .Php 上传上去之后,就会自动解析为.php
然后直接上传,蚁剑连接
Pass-07(黑名单验证,空格绕过)
这一关黑名单,没有使用trim()去除空格,可以使用空格绕过黑名单
抓包,修改上传一句话木马文件名zoe.php(注意这里有个空格)
放包之后用蚁剑连接
Pass-08(黑名单验证,点号绕过)
这一关黑名单,没有使用deldot()过滤文件名末尾的点,可以使用文件名后加.进行绕过
抓包,修改上传一句话木马文件名zoe.php.(注意这里有个点)
Pass-09(黑名单验证,特殊字符::$DATA绕过)
1 |
|
Pass-10(黑名单,点空格点绕过)
这一关黑名单,最后上传路径直接使用文件名进行拼接,而且只对文件名进行file name=deldot(file_name)操作去除文件名末尾的点,构造后缀绕过黑名单
补充知识:deldot()函数从后向前检测,当检测到末尾的第一个点时会继续它的检测,但是遇到空格会停下来
上传zoe.php 然后用bp改后缀加点空格点(即文件名为zoe.php. .)
使用蚁剑连接zoe.php.
Pass-11(黑名单验证,双写绕过)
这一关黑名单,使用str_ireplace()函数寻找文件名中存在的黑名单字符串,将它替换成空(即将它删掉),可以使用双写绕过黑名单
补充知识:str_ireplace(find,replace,string,count) 函数替换字符串中的一些字符(不区分大小写)
上传zoe.php 然后用bp改后缀为.pphphp使用蚁剑连接zoe.php
Pass-12(get00截断)
这一关白名单,最终文件的存放位置是以拼接的方式,可以使用%00截断,但需要php版本<5.3.4,并且magic_quotes_gpc关闭。
原理:php的一些函数的底层是C语言,而move_uploaded_file就是其中之一,遇到0x00会截断,0x表示16进制,URL中%00解码成16进制就是0x00。
1 |
|
上传zoe.php用BP抓包修改参数,把upload/后面加上zoe.php%00,下面的filename=”zoe.php”改为zoe.png
Pass-14(图片马unpack)
这一关会读取判断上传文件的前两个字节,判断上传文件类型,并且后端会根据判断得到的文件类型重命名上传文件
使用 图片马 + 文件包含
绕过
cmd
使用 copy 777.png/b + zoe.php pass14.png
制作图片马
,上传图片马
Pass-15(getimagesize图片马)
通过使用getimagesize()检查是否为图片文件,所以还是可以用第十四关
的图片马绕过,并使用文件包含漏洞解析图片马
构造的URL为include.php?file=upload/8620210320174003.png
Pass-17(二次渲染绕过)
对上传图片进行了判断了后缀名
、content-type
,以及利用imagecreatefromgif
判断是否为gif
图片,最后再做了一次二次渲染,但是后端二次渲染需要找到渲染后的图片里面没有发生变化的Hex地方,添加一句话,通过文件包含漏洞执行一句话,使用蚁剑进行连接
上传正常的GIF
图片下载回显的图片,用010Editor
编辑器进行对比两个GIF图片内容,找到相同
的地方(指的是上传前和上传后,两张图片的部分Hex
仍然保持不变的位置)并插入PHP一句话,上传带有PHP一句话木马
的GIF图片
利用文件包含漏洞