阅读 154

Web安全系列-文件上传靶场upload-labs

靶场地址

在渗透测试中,通过上传文件漏洞来getShell是比较常见的方法,upload-labs这个靶场总结了各种常见的文件上传漏洞类型,下面是本人的每个关卡的bypass方法总结。


Pass-001

描述

直接上传weshell.php会弹出只能上传图片后缀的提示,不能上传非图片文件

ByPass

用firefox查看下Network,弹出提示过程中并没有走Network,确定其只在JavaScript中进行后缀名判断,通过禁用JS或者修改JS即可bypass


Pass-002

描述

这题是服务端校验MIME类型

ByPass

用Burp Suite拦截HTTP请求报文,把Content-Type改成image/jpeg再forward就可以bypass了


Pass-003

描述

黑名单校验后缀名

ByPass

webshell.php改成webshell.php3 就能bypass。 像这种通过后缀黑名单的,可以通过改后缀来绕过,只能能触发解析即可,根据配置设定。


Pass-004

描述

基于后缀名黑名单的校验

ByPass1 - %00截断

webshell.php改名成webshell.php%00.jpg即可bypass,利用时直接调用webshell.php,忽略后面的%00.jpg。 这个原理是PHP 5.2.x的一个%00截断漏洞,详情见这个

ByPass2 - 使用.htaccess

分两步:

  • 先上传.htaccess,内容是SetHandler application/x-httpd-php
  • 然后上传test.jpg图片木马,然后在url中请求图片木马地址即可getShell

Pass-005

描述

基于黑名单的校验

ByPass1 - %00截断

同004

ByPass2 -

暂时没想法


Pass-006

描述

基于黑名单,但是没对大小写进行校验

ByPass

webshell.php改名成webshell.phP即可bypass


Pass-007

描述

基于黑名单,过滤大小写,但是没过滤后缀后空格

ByPass

BP拦截下,后缀php后加空格即可绕过


Pass-008

描述

黑名单,所有可执行后缀都不可以上传,包括前后空格

ByPass

BP拦截下,后缀php后加.即可绕过,直接打开图片路径即可getshell


Pass-009

描述

黑名单,使用windows文件流特性

ByPass

BP拦截下,后缀php后加::$data即可绕过


Pass-010

描述

黑名单,骚操作

ByPass

BP拦截下,后缀php后加. .即可绕过


Pass-011

描述

还是黑名单,会使用替换来替换掉不合法的后缀名

ByPass

使用双写来绕过


Pass-012

描述

白名单,用%00截断可绕过,注意路径可自定义

ByPass


Pass-013

描述

同上,只不过这次不同的是save_path在post包里面(不在路径里面),GET是可以把url自动转码的,但是POST方式不会自动将%00编码为空字符

ByPass

burp中选中%00右击-> convert selection ->url->urldecode 即可。


Pass-014

描述

上传图片木马,不考虑运行,代码显示只校验文件头

ByPass

使用copy a.jpg/b + a.txt c.jpg生成图片木马,直接上传bypass


Pass-015

描述

使用getimagesize判断真假图片

ByPass

用图片木马一样可以绕过


Pass-016

描述

使用exif_imagetype()检查是否为图片文件

ByPass

用图片木马一样可以绕过


Pass-017

描述

重新渲染图片

ByPass

靶场有bug,上传正常图片也会挂掉...

ByPass原理看这里


Pass-018

描述

条件竞争,需要代码审计发现

ByPass

执行路径:上传文件刀server -> 检测文件 -> 不符合的话删除/符合的话重命名文件

问题发生在删除前,可通过条件竞争在删除前getShell

具体做法是上传文件后不断访问上传了(还没被删除)的文件路径,这样竞争成功(访问成功)后就能执行里面的代码。简单理解就是在文件被删除前尽快读取,读取成功后即可执行命令,然后这个文件就会被删除。打的就是时间差~(靠程序开多线程去打)


Pass-019

描述

条件竞争,需要代码审计

ByPass

跟18一样的存在条件竞争,短时大量上传图片图片马数据包,程序会来不及rename,图片马会在很短时间内路径不会被变更,可以打时间差来getShell


Pass-020

描述

两种解法,都是利用move_uploaded_file函数

ByPass1 - %00截断

可以自定义文件名,但是直接定义为php是不行的。使用%00截断改变save_name参数即可

ByPass2 - 利用函数解析错误

webshell.php改成webshell.php/.即bypass


Pass-021

描述

需要代码审计

ByPass

利用/.绕过