[题目信息]:
题目名称 | 题目难度 |
---|---|
文件上传-NTFS文件流 | 1 |
[题目考点]:
NTFS文件系统包括对备用数据流的支持。这不是众所周知的功能,主要包括提供与Macintosh文件系
统中的文件的兼容性。备用数据流允许文件包含多个数据流。每个文件至少有一个数据流。在
Windows中,此默认数据流称为:$ DATA。上传.php::$DATA绕过。(仅限windows)
[Flag格式]:
SangFor{2_LHZmrVlIN6uJHH0RTGh1JvQjFP2uyO}
[环境部署]:
docker-compose.yml文件或者docker tar原始文件。
docker-compose up -d
[题目writeup]:
创建一个.xxx的任意文件;
上传.jpg后缀文件,并使用burp抓包;
通过回显,可以看出文件储存位置和文件名;
通过回显结果可以看出存在后端验证,那接下来的绕过思路可以分为两步;
- 确认是白名单验证还是黑名单验证;
- 如果是黑名单验证确认服务器是windows系统还是linux系统;
- 如果是白名单,在后面题目再进一步分析;
黑名单验证;简单的理解,黑名单验证即不允许用户上传什么样的文件;白名单验证;即为只允许用户上传什么样的文件;
如果文件名为xxx.xxx的文件上传成功,则证明后端验证为黑名单检测,一般情况下,黑名单验证仅不允许如.php等文件后缀;
通过回显,可以判断,后端代码在检测文件后缀的同时,同时检测了文件头需符合图片内容标准;
修改文件头为GIF89a,动态GIF图片是一个以GIF89a开头格式存储的文件
xxx文件能够上传成功,则证明服务器后端验证属于黑名单格式;
当验证后端代码属于黑名单验证时,由于Windows和Linux文件系统有较大的差异,下一步需要测试服务器的操作系统是Windows还是Linux;
验证Windows操作系统还是Linux操作系统可以通过改变url地址的大小写加以区分,Windows操作系统大小写不敏感,Linxu操作系统大小写敏感;
我们将upload.php修改为Upload.php,可以成功访问,因此可以证明服务器操作系统为Windows;
现在已经验证:
- 服务器后端为黑名单验证;
- 服务器操作系统为Windows;
因此可以利用Windows操作系统NTFS文件系统特性:
NTFS(英语:New Technology File System),是Microsoft公司开发的专用文件系统,从Windows NT 3.1开始成为Windows NT家族的默认文件系统。
在window的时候如果文件名+"::$DATA"会把::$DATA之后的数据当成文件流处理,不会检测后缀名,且保持::$DATA之前的文件名,他的目的就是不检查后缀名
例如:"phpinfo.php::$DATA"Windows会自动去掉末尾的::$DATA变成"phpinfo.php"
访问/upload.php,成功上传一句话木马;
查看文件源代码