`

Web安全读书笔记8- 路径遍历漏洞

阅读更多
https://wahh-app.com/scripts/GetImage.aspx?file=diagram1.jpg
file那里提交 ..\..\windows\repair\sam
linux的话提交../../../../etc/passwd

windows 的路径接受/ 和\
而linux的路径只接受/

对于路径遍历可以尝试使用各种编码
URL编码 Unicode编码 等等
dot  %2e
forward slash   %2f

如果应用程序尝试通过删除遍历序列来净化输入,但没有以递归方式应用这种过滤时候
….//
….\/
…./\
….\\

一些应用程序会检查用户提交的文件是否以某种文件类型结尾,插入URL空字节,在后面连接应用程序接受的文件类型,从而避开这种检查
../../../boot.ini%00.jpg
这种攻击有时候会成功,因为应用程序使用API在托管执行环境下执行文件类型检查,该执行环境允许字符串包含空字符(如java的String.endswith()),但是当提取文件时,文件名会被截断为想要的值。

另一种针对过滤的是使用换行符,例如unix会立即截断文件名
../../../boot.ini%0a.jpg

一些应用程序检查用户提交的文件名的开头部分是否为起始目录的某一个字符目录,如下可以避开
wahh-app/images/../../../../../etc/passwd

一些应用程序为下载用户文件的URL进行模糊化处理,防止泄露文件的路径,常用定制的base64编码

如果
../../../.././etc/passwd/../../tmp/foo
模糊化url为
fhaljfkdljfiekrmkdnfkjdhklfjdksfsdfdsljfdklshfdsfjsdkl8437589
规范化为
/tmp.foo
要修改这个值得到/etc/passwd只需从右边截断为
fhaljfkdljfiekrmkdnfkjdhklfjdksfsdf
在上传的文件名出现一个多余的./因为可以确保截断后的url符合base64编码规则,在3字节的明文边界结束,并因此在4字节的编码文本边界结束。

避免遍历攻击
对文件名以适当的文件系统API确认
java中使用getCanonicalPath方法
ASP.net中使用System.IO.Path.GetFullPath方法

在unix中使用chrooted文件系统防止路径向上回朔
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics