Upload-labs 靶场

项目地址:https://github.com/c0ny1/upload-labs

一、前端 JS 检测绕过

上传一个 php 文件,失败了,只允许图片为后缀的文件进行上传。这一关的关键是“JavaScript 代码对文件后缀进行校验”。JavaScript 属于前端范畴,而前端校验不会发出数据包,不会与服务器进行交互

第一种方式:浏览器直接 F12,找到checkFile()函数,进行删除。更为极端的方法是F12 --> F1 --> 禁用JavaScript,最后上传 PHP 木马

第二种方式:用 burp 拦截上传数据包, 对文件名进行修改

第一种方式:

删除 checkFile() 函数

极端的方法

第二种方式:传一个.jpg格式的图片,用 burp 抓包修改文件名和文件内容

二、MIME 类型检测绕过

MIME 是描述消息内容类型的因特网标准——MIME 参考手册

Content-Type 通常出现在 HTTP 请求头部中,指示请求的数据类型,或者是数据的 MIME 类型

# 常见的 MIME 类型
text/plain:纯文本
text/html:HTML 格式的文档
image/png:PNG 格式的图片

这一关的关键是,使用Content-Type字段的值判断上传文件是否合法,只允许 image/jpeg、image/png、image/gif 文件的上传

用 burp 截取并修改数据包中的 Content-Type 类型进行绕过

三、后缀检测-黑名单绕过

黑名单绕过的常见方式有:

  • 改变文件后缀名,使用不在黑名单中的文件后缀,例如php2、php3、php4、php5、phtm
  • 拼接文件名
  • 使用压缩文件
  • 修改文件内容
  • ……

通过 burp 拦截修改数据包中的文件名后缀为.php5

如果服务器是 Apache,也可用.htaccess来进行绕过,但是文件会在上传的过程中修改文件名

四、后缀检测-黑名单绕过(.htaccess)

.htaccess文件可以被用来限制特定的文件类型的上传或执行。从源码中得知没有对.htaccess限制

上传.htaccess文件,写入以下内容

# .shell 文件会被解析为 php 文件
AddType application/x-httpd-php .shell

然后上传一个后缀名为.shell的文件,执行 webshell

五、后缀检测-后缀名点空格绕过

双写小数点,. .——中间是空格,围绕着小数点

由于一些操作系统和文件系统不允许文件名以点号结尾,因此上传时会自动删除最后一个点号

六、后缀检测-后缀名大小写绕过

观察源代码,发现服务器检查后缀忽视了“大小写”的检测,也就是没出现“strtolower() 函数”。

而“strtolower() 函数”用于将字符串中的所有字符转换为小写字母

七、后缀检测-后缀名空格绕过

观察源代码,发现服务器检查后缀忽视了“空格”的检测,也就是没出现“trim() 函数”。

trim()是 PHP 中的一个字符串函数,用于删除字符串首尾的空格或其他指定字符

理应加上$file_ext = trim($file_ext);

八、后缀检测-后缀名点绕过

观察源代码,发现服务器检查后缀忽视了“后缀名点”的检测,也就是没出现“deldot() 函数”。

deldot()函数用于在文件上传防止后缀名点绕过攻击。该函数的作用是将文件名中的所有点(包括后缀名点和其他点)都删除,以确保文件名的完整性和正确性。

上传文件并用 burp 抓包,在文件名中添加额外的点来绕过文件扩展名的检查

九、后缀检测-特殊字符串

可以通过在文件名中添加::$DATA来告诉 Windows 访问文件的资源,并将其当作可执行代码来执行

十、后缀检测-点空格绕过

同第五关

观察代码,发现先删除文件名末尾点.,再首尾去空格,由此想到

双写小数点,. .——中间是空格,围绕着小数点

十一、后缀检测-后缀名双写绕过

使用了str_ireplace()函数,替换成空,可以用双写绕过

上传文件名 code.p.phphp,上传文件时会删除 .php,最后的上传文件名: code.php

十二、后缀检测-GET方式00截断

%00 截断,用在 php 版本 5.3.29以下,magic_quotes_gpc 为 Off 状态

通过抓包,能够看到上传路径,使用 00 截断,抓包修改上传路径save_path=../upload/code.php%00,即可绕过。

"00截断"(Null byte injection)是一种 Web 应用程序安全漏洞,攻击者通过在输入数据中插入 ASCII 码为 0 的 null 字符(\x00),来绕过字符串截断等安全措施,导致应用程序执行意外的操作或暴露敏感信息。

十三、后缀检测-POST方式00截断

GET 会自行解码%00,POST 不会自行解码

十四、内容检测-文件头检测绕过

检测文件头,源码会根据图片的前两个字节来判定文件类型,所以需要把 webshell 的后缀改为图片格式

制作图片木马

copy code.jpg /b + code.php /a webshell.jpg

十五、内容检测-getimagesize()函数

getimagesize()函数来验证是否是图片。依旧是生成带有 php 代码的图片,进行上传

十六、内容检测-exif_imagetype()函数

使用exif_imagetype函数来检查是否是图片,读取图像的第一个字节并检查其签名。依旧是生成带有 php 代码的图片,进行上传

十七、内容检测-图片二次渲染绕过

图片的二次渲染会把第一次渲染添加的 PHP 代码删掉。

绕过的方式是,查看图片的渲染后没有修改的位置,添加一句话木马

未完待续……

posted @ 2023-02-20 14:36  跛一一  阅读(65)  评论(0编辑  收藏  举报