upload-labs通关记录
1.Pass-01
-
原理
客户端检测,仅仅通过使用JavaScript来拒绝非法文件上传。
-
攻击过程
上传一个1.jpg文件,使用burp将.jpg修改为.php
# 1.jpg <?php phpinfo(); ?>
上传成功后,访问图片地址
2.Pass-02(MIME验证)
-
原理
MIME类型用来设定某种扩展名文件的打开方式,当具有该扩展名的文件被访问时,浏览器会自动使用指定的应用程序来打开。
-
攻击过程
上传1.php ,因为服务器会检测Content-Type的值,所以修改为image/jpeg
上传成功后访问地址
3.Pass-03(黑名单验证,特殊后缀)
-
原理
黑名单过滤是一种不安全的方式,黑名单定义了一系列不安全的扩展名,服务器端在接收文件后,与黑名单扩展名进行对比,如果发现文件扩展名与黑名单里的扩展名匹配,则认为文件不合法。
-
攻击过程
上传1.php 文件,通过burp 修改文件后缀为.php3
上传成功后,复制图片地址,并访问,发现图片做了重命名
注:这一关有条件,httpd.conf需要配置AddType ,不然会出现无法解析的情况
#修改httpd.conf AddType
AddType application/x-httpd-php .php .phtml .php5 .php3
AddType指令是在给定的文件扩展名与特定的内容类型之间建立映射关系。
AddType是与类型表相关的,描述的是扩展名与文件类型之间的关系。
4.Pass-04(黑名单验证,.htaccess)
-
原理
# .htaccess .htaccess文件是Apache服务器中的一个配置文件,可以实现网页301重定向、自定义404错误页面、改变文件扩展名、允许/阻止特定的用户或者目录的访问、禁止目录列表、配置默认文档等功能。 启用.htaccess,需要修改httpd.conf,启用AllowOverride,并可以用AllowOverride限制特定命令的使用。如果需要使用.htaccess以外的其他文件名,可以用AccessFileName指令来改变。例如,需要使用.config ,则可以在服务器配置文件中按以下方法配置:AccessFileName .config 。 注: .htaccess文件应该被用在内容提供者需要针对特定目录改变服务器的配置而又没有root权限的情况下。 # .htaccess 文件内容 SetHandler application/x-httpd-php
-
攻击过程
上传.htaccess 文件,然后再上传4.png图片,上传成功后,复制图片地址,访问
注:访问图片地址可能会遇到不能解析的情况,需要修改httpd.conf
<Directory "/var/www/html">
Options Indexes FollowSymLinks
AllowOverride all #将None改为all
Require all granted
</Directory>
5.Pass-05(黑名单验证,.user.ini)
-
原理
# .user.ini 自 PHP 5.3.0 起,PHP 支持基于每个目录的 .htaccess 风格的 INI 文件。此类文件仅被CGI/FastCGI SAPI 处理。此功能使得 PECL 的 htscanner 扩展作废。如果使用 Apache,则用.htaccess 文件有同样效果。 #编写.user.ini文件 auto_prepend_file=5.jpg #所有的php文件都自动包含5.jpg文件
-
攻击过程
这一关服务器Server API 需要使用CGI/FastCGI ,先上传.user.ini,然后再上传5.jpg,后面访问5.jpg发现发生错误
因为原理是所有的php文件都自动包含5.jpg ,所以可以访问上传目录下的readme.php(本关一开始就存在的文件)
readme.php 文件
6.Pass-06(黑名单验证,大小写绕过)
-
原理
这一关也是同样的设置了黑名单,但是没有强制将大写转换为小写
-
攻击过程
修改文件后缀为.phP然后上传
7.Pass-07(空格绕过)
-
原理
没有对后缀去空处理,没有对大小写进行转换,所以可以在后缀名加空格绕过
-
攻击过程
复制连接并访问
8.Pass-08(windows特性加点绕过)
-
原理
没有对后缀名".“进行处理,利用windows特性,会自动去掉后缀名中最后的”.".可在后缀中加"."绕过
-
攻击过程
使用burp修改文件后缀为1.php.
复制链接访问
9.Pass-09(::$DATA绕过)
-
原理
在window的时候如果文件名+’:: D A T A ′ 会 把 : : DATA'会把:: DATA′会把::DATA之后的数据当成文件流处理,不会检测后缀名。且保留:: D A T A 之 前 的 文 件 名 。 利 用 w i n d o w s 特 性 , 可 在 后 缀 名 中 加 : : DATA之前的文件名。利用windows特性,可在后缀名中加:: DATA之前的文件名。利用windows特性,可在后缀名中加::DATA绕过
-
攻击过程
使用burp修改文件后缀1.php::$DATA
访问的时候需要去掉::$DATA
10.Pass-10(点空点绕过)
-
原理
这关处理文件后缀的方式是先去除最后的点,然后再去除文件名前后的空格,所以可以利用1.php. .绕过,这样上传的文件经处理变成了1.php.
-
攻击过程
利用burp修改文件后缀1.php. .
复制图片链接访问,发现后缀变成了1.php.
11.Pass-11(双写绕过)
-
原理
这一关会将黑名单的后缀用空来替换,所以可以利用双写来绕过
-
攻击过程
利用burp修改文件后缀
复制图片链接并访问
12.Pass-12(GET请求00截断)
-
原理
可以在后缀名后加.php%00截断后面的内容
-
攻击过程
使用burp修改后缀名
复制图片连接并访问
# 00截断使用条件
php版本低于5.3,且magic_quotes_gpc关闭状态
phpstudy可以方便的更改,没有找到的可以去php.ini里修改
13.Pass-13(Post请求00截断)
-
原理
可以在后缀名后加.php%00截断后面的内容,这次和get不同,get方法会自动解码,但是POST不会,所以需要对%00进行url解码
-
攻击过程
使用burp修改数据包
复制图片连接并访问
14.Pass-14(图片码绕过)
-
原理
网站存在文件包含漏洞,访问网站的php页面并包含有php代码的图片进行攻击
-
攻击过程
# 制作图片码 copy 14.jpg /b + 14.php /a webshell.jpg
制作成功后上传,复制图片连接访问
15.Pass-15(图片码绕过)
-
原理
getimagesize函数:这个函数会对目标文件的16进制去进行一个读取,去读取头几个字符串是不是符合图片的要求
-
攻击过程
制作图片码上传,包含图片访问
16.Pass-16(图片码绕过)
-
原理
本pass使用exif_imagetype()检查是否为图片文件,这个函数会读取图像的第一个字节并检查其签名
-
攻击过程
制作图片码上传,包含图片访问
需要开启插件
17.Pass-17(二次渲染)
-
原理
imagecreatefromipeg()函数,图片上传后,图片中的ph代码会被删除
-
攻击过程
把原图和修改过的图片进行比较
在未修改部分插入php代码
复制图片连接访问
18.Pass-18(条件竞争)
-
原理
文件上传先上传到后台再对文件进行检测,不符合再删除,符合再修改名字
-
攻击过程
在文件上传后立刻就访问文件,服务器就不会删除文件。
burpsuite设置无限制访问同时使用python访问1.php
import requests
def main():
i=0
while True:
try:
print(i,end='\r')
a=requests.get("http://192.168.184.131/upload-labs/upload/1.php")
if "PHP Version" in a.text:
print("OK")
break
except Exception as e:
pass
i+=1
if __name__ == '__main__':
main()
19.Pass-19(图片码配合包含漏洞)
-
原理
这关会先检查后缀名然后在进行二次渲染,所以只能上传图片码再配合包含漏洞
-
攻击过程
使用burpsuit 持续上传图片码
使用python访问
20.Pass-20(/.绕过)
-
原理
move_uploaded_file()会忽略掉文件末尾的/.
-
攻击过程
使用burpsuit 修改数据包
复制图片连接并访问
21.Pass-21(数组绕过)
-
原理
会判断文件名是否是array数组(jpg,png,gif),不是的话会分割文件名和后缀名再进行白名单验证。
-
攻击过程
使用burpsuit修改数据包
复制图片链接访问