[9]-文件上传漏洞-高级绕过
一、以平台为核心的漏洞利用方式
1.Windows文件流特性绕过
Windows文件流
Windows目前使用的是NTFS文件系统
NTFS文件系统实现了多文件流特性------一个文件可以对应多个文件流
NTFS环境的一个文件默认使用未命名的文件流
但,同时可以创建其他命名的文件流
,并同样可以写入内容
Windows资源管理器默认不显示出文件的命名文件流
,这些命名的文件流
在功能上和默认使用的未命名文件流
一致,甚至可以用来启动程序
未命名文件流
与命名文件流
测试
采用默认文件流,输入内容# 写入内容:111,写入文件:test.txt,文件流:1.txt Echo 111 > test.txt:1.txt # 写入内容:test,文件:test.txt,文件流:不指定,即默认 Echo test > test.txt # 写入内容:222,文件:test.txt,文件流:默认文件流 Echo 222 > test.txt::$data
采用
1.txt
文件流时
不指定文件流时,发现此时可以看到写入的内容
指定使用默认文件流,发现上文写入"test"内容变更为“222”,且使用默认数据流打开,以及直接点击查看时,二者内容一致。这说明,平时使用的就是默认数据流,同时我们也可以通过手动数据流的方式,把想要写内容写到同一个文件。
总结
托管在Windows平台的服务,可以利用NTFS文件流特性,完成前后端检测的绕过,并完成文件上传漏洞的利用具体利用场景
- 上传功能点----类型检测严格----利用NTFS文件流特性---绕过
- Windows+PHP时,特殊效果:默认数据流背后的数据,会直接被认为是数据流写入到文件中,从而绕过检测。
2.截断绕过
白名单是否一定安全?
前文说,黑名单存在绕过风险,但白名单也不一定是百分之百安全的。
当,服务器程序处理上传的文件,在保存时,采用路径拼接的形式,而路径又是从前端获取的,此时就可以采用在路径上进行截断。--------路径截断具体利用
- 设置`save_path=../upload/a.php%00(URL编码,结尾符00%,如果不通过url传输,则不为00%)
- 上传一个内容为一句话木马的
jpg
文件利用条件及原因
根本性原因:用户能控制两个输入点,对文件存储路径进行字符段截断攻击
- 文件名
- 文件存储路径(字符段截断)
测试运用
采用bwapp靶场,选择文件上传漏洞,等级为low,开启burp拦截,然后上传一句话木马shell.php.jpg
,点击上传。
Burp对数据包进行了拦截,修改文件名为webshelll.php .jpg
(即在.jpg前面添加空格,因为空格二进制为20,方便二进制定位。
点击格式为Hex
,最左侧定位具体文件名位置,然后找到此行二进制为20的,修改为00并输入回车即可
完成后,可以返回Raw
格式进行查看,确认后,点击Forward
放行即可
最终文件保存结果为一个
php
文件,文件由上传前的jpg
文件变成上传后的php
文件,这说明成功实现了截断攻击。
3.文件头检测绕过
常见文件头格式
可以用winhex
查看,具体文件头格式,可以参考:https://blog.csdn.net/Liukairui/article/details/105662668png格式,对应的ASCII码值是一个.png,不可打印 89 50 4e 47 jpg文件,不对应ASCII码,具体原因可参考:https://www.cnblogs.com/lakeone/p/3596996.html, jpg文件头解析:https://cloud.tencent.com/developer/article/1427939 ff d8 ff db
绕过利用场景
对于具有文件内容检测的上传功能,不能直接上传一句话木马,因为文件格式不符合要求。具体利用
windows系统下,使用以下命令制作图片码:# 准备好shell.php,其中写入一句话木马 # 准备好test.png图片,要求文件头格式一定要对 # 将shell.php内容写入test.png图片 type shell.php >> test.png
具体过程如下图:
使用靶场,上传,我们在服务器再查看一次,发现图片码确实能成功上传。
注意
对于自己寻找的图片,最好去掉不关键的内容段或大部分图片内容段都去掉,只保留头部从而去满足校验要求即可,从而实现对于文件头检测的一个绕过。
二、绕过类型总结
1.学习的类型
- Content-Type绕过
文件上传里去修改一个字段的值- 前端绕过
js禁用、删除- 文件解析规则绕过
- Windows环境特性绕过
- 大小写、双写、点空格、文件头、条件竞争绕过
2.收获
- 学习目的
- 了解漏洞利用
- 认知到文件上传本身并不是非常困难
- 漏洞根本性原因:webapp实际运营并非割裂个体,前端、后端、平台、开发等等都有责任
- 个人收获
- 文件上传漏洞各种绕过方式
- 漏洞挖掘思路
- 学习方向
本文来自博客园,作者:缪白(Miubai),转载请注明原文链接:https://www.cnblogs.com/Miubai-blog/articles/17083805.html