5-文件上传漏洞
原理
Webshell
一句话木马
代码短,只有一行代码。
应用场景多,可以单独生成文件,也可以插入到图片中。
安全性高,隐匿性强,可以变形免杀。
小马
体积小,功能少,只有文件上传功能。
大马
体积大,功能全,能够管理数据库、文件管理、对站点进行快速信息收集,甚至能够提权。
网站控制工具
中国菜刀,中国蚁剑,weevely, godzilla, behinder
示例
MIME: Multipurpose Internet Mail Extensions, 多用途互联网邮件扩展类型
常见类型:
test/html HTML 格式
application/json JSON 数据格式
multipart/form-data 文件上传(二进制数据)
image/jpeg jpg 图片格式
客户端使用:
GET 请求不使用 MIME 字段
POST 请求头,放在 Content Type 字段用来指定上传的文件类型,方便服务器解析。放在 Accept,告诉服务端允许接收的响应类型。
服务端使用:
放在响应头,Content Type 告诉客户端响应的数据类型,方便客户端解析。
等价扩展名:
asp: asa, cer, cdx
aspx: ashx, asmx, ascx
php: php2, php3, php4, php5, phps, phtml
jsp: jspx, jspf
.htaccess: Hypertext Access (超文本入口)
是 Apache 服务器中的一个配置文件,负责相关目录下的网页配置。
通过.htaccess 文件,可以实现:网页 301 重定向,自定义 404 错误页面,改变文件扩展名,允许/阻止特定用户或目录的访问,禁止目录列表,配置默认文档等功能。
<FilesMatch “a.jpg”> |
Content-Disposition:
响应头指示回复的内容以内联方式展示,还是以附件形式下载并保存到本地。
文件名截断:
截断字符:chr (0), 类似 C++的\0, url 编码为%00,ASCII 编码为 0
filename=test.php%00.txt -> filename=text.php
注意可能需要处理十六进制
文件头:
png: 89 50 4E 47 0D 0A 1A 0A (.PNG)
jpg: FF D8
gif: 47 49 46 38 39|37 61 (GIF89a, GIF87a)
bmp: 42 4D (BM)
.class: ca fe ba be
copy a.gif /b + shell.php /a shell.gif #Windows |
basename ():
基于全路径字符串,返回基本文件名
imagecreatefromjpeg ():
创建新图片
条件竞争:
在被删之前写入一个新的一句话木马文件
shell.php.*会被 apache 当作 php 文件解析。
Linux 文件权限:
所有者 用户组 其他人
r: read, w: write, x: execute
r=4, w=2, x=1
总结
利用流程:
- 找到上传位置
- 尝试绕过校验,上传文件
- 获取文件位置
- 连接
绕过方式:
删除/禁用 JavaScript,修改 MIME,等价扩展名,大小写,htaccess,双写,空格,点,::$DATA,%00 截断,0x00 截断,图片马,条件竞争等。
fuxploider
防御:
扩展名黑白名单
MIME 校验
文件头校验
对文件进行二次渲染
重命名
不要暴露上传文件等位置
禁用上传文件的执行权限