一、前端 JS 检测绕过
上传一个 php 文件,失败了,只允许图片为后缀的文件进行上传。这一关的关键是“JavaScript 代码对文件后缀进行校验”。JavaScript 属于前端范畴,而前端校验不会发出数据包,不会与服务器进行交互
第一种方式:浏览器直接 F12,找到checkFile()
函数,进行删除。更为极端的方法是F12 --> F1 --> 禁用JavaScript
,最后上传 PHP 木马
第二种方式:用 burp 拦截上传数据包, 对文件名进行修改
第一种方式:
第二种方式:传一个.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 代码删掉。
绕过的方式是,查看图片的渲染后没有修改的位置,添加一句话木马
未完待续……
标签:文件,后缀,检测,Upload,labs,后缀名,靶场,上传,绕过 From: https://www.cnblogs.com/yii-ling/p/17137284.html