目录遍历学习
原理
代码写的有问题或者服务器配置错误导致服务器上的目录信息暴露。有两种情况,一种是程序的代码中把服务器的目录情况回显出来了;另一种情况是nginx或者apache等中间件的配置有问题导致目录暴露。
利用方式
代码层面
举个例子,path 可控 传入 scandir 函数再进行输出,会造成目录遍历漏洞
1 |
|
../
是返回上一级目录的意思
传入path=./ 可回显当前目录
传入path=../ 可回显当前目录
传入path=/ 可回显根目录
传入path=~/ 可回显用户目录
中间件配置问题
中间件如果设置不当的时,也会造成目录遍历,如 apache ngnix iis 目录浏览,均可造成目录遍历
但是 这种目录遍历,只能遍历网站根目录,除非有特殊设置。 通过遍历目录或文件,寻找敏感文件,如 session 登录验证文件,数据库备份等。
防御措施
对用户的输入进行验证,特别是路径替代字符如“../”和“~/”。
尽可能采用白名单的形式,验证所有的输入。
合理配置 Web 服务器的目录权限。
当程序出错时,不要显示内部相关配置细节。
对用户传过来的文件名参数进行统一编码,对包含恶意字符或者空字符的参数进行拒绝。
漏洞挖掘
记录一些常见的会导致目录遍历的trick
注意请求中的参数,有以下参数很可能存在漏洞
1 |
|
案例1
在一个案例中,js参数本应该传入一个指定的js文件,但是可以传入一个目录,最后可以用%00截断js的后缀名
案例2
某网站用了fck富文本编辑器。其中有一个参数CurrentFolder
可以传入目录导致目录遍历
trick1
注意静态资源的文件夹,看看能不能访问这个目录
参考
目录遍历学习
https://wanf3ng.github.io/2022/05/31/目录遍历学习/