[题目信息]:
题目名称 | 题目难度 |
---|---|
文件上传-Windows点号绕过 | 1 |
[题目考点]:
Windowsw文件系统对于.号,空格等符号的处理
[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操作系统文件系统对点号处理的特性:
当我们创建一个文件,当它的文件名以点好结尾时,会自动去除点好;
我们便可以利用该特性,上传一个xxx.php.的文件绕过后端代码黑名单的验证。同时,保存在Windows系统时,会去除点好,保证php文件的正常访问解析
访问/upload/test.php,成功解析php文件;
获取flag请学员思考测试;