目录遍历漏洞

目录

1、目录遍历漏洞介绍

2、Apache路径穿越漏洞

3、Nginx目录穿越漏洞

4、pikachu靶场中的目录遍历漏洞

5、Burpsuite靶场中的目录遍历漏洞

(1)simple case(简单的)

(2)traversal sequences blocked with absolute path bypass(利用绝对路径进行绕过)

(3)traversal sequences stripped non-recursively(非递归的过滤遍历序列)

(4)traversal sequences blocked with absolute path bypass(通过绝对路径绕过被阻止的遍历序列)

(5)traversal sequences stripped with superfluous URL-decode(验证开始路径 )

(6)validation of file extension with null byte bypass(利用空字节绕过验证文件扩展名的文件扩展名验证)


今天学习一下目录遍历漏洞,其中参考很多大佬总结的文章,我只是在这里进行学习和练习

1、目录遍历漏洞介绍

目录遍历漏洞在国内外有许多不同的叫法,也可以叫做信息泄露漏洞、非授权文件包含漏洞等。

目录遍历可能让攻击者访问受限制的目录,通过执行cmd.exe /c命令来提取目录信息,或者在Web服务器的根目录以外执行命令。

目录遍历漏洞可能存在于Web服务器软件本身,也可能存在于Web应用程序之中。目录遍历攻击比较容易掌握,要执行一个目录遍历攻击,攻击者所需要的只是一个web浏览器,并且掌握一些关于系统的缺省文件和目录所存在的位置的知识即可。

漏洞产生的原因:

目录遍历漏洞的原理比较简单,就是程序在实现上没有充分过滤用户输入的../之类的目录跳转符,导致恶意用户可以通过提交目录跳转来遍历服务器上的任意文件。

这里的目录跳转符可以是../,也可是../的ASCII编码或者是unicode编码等。

简单的示例:

在包含动态页面的Web应用中,输入往往是通过GET或是POST的请求方法从浏览器获得,例如:http://www.test.com/my. jsp?file=abc.html

通过这个URL,浏览器向服务器发送了对动态页面my.jsp的请求,并且伴有值为abc.html的file参数,当请求在Web服务器端执行时,my.jsp会从服务器的文件系统中取得abc.html文件,并将其返回给客户端的浏览器,那么攻击者就可以假定my.jsp能够从文件系统中获取文件并构造如下的恶意URL:

http://www.test.com/my.jsp?file=../../Windows/system.ini

当服务器处理该请求时,将从文件系统中获取system.ini文件并返回给用户。

编码绕过:

如果上面恶意请求被检测到并被阻断,我们可以尝试给URL中的目录跳转符里的点或者斜杠进行ASCII编码,这样可能能够绕过检测成功执行,如示:

http://www.test.com/my.jsp?file=%2e./..%2fWindows/system.ini

2、Apache路径穿越漏洞

首先就是演示一个Apache中间件的路径穿越漏洞 Apache Http Server 路径穿越漏洞复现(CVE-2021-41773) 

CVE-2021-41773 是一个影响 Apache HTTP Server (httpd) 的安全漏洞,影响版本为 2.4.49 版本,它是一个路径遍历漏洞,如果文档根目录以外的文件不受 require all denied 保护,则攻击者可以访问这些文件。

同时,若 Apache HTTPd 开启了 cgi 支持,攻击者可构造恶意请求执行命令,控制服务器。

漏洞原理:

在 Apache HTTP Server 2.4.49 版本中,在对用户发送的请求中的路径参数进行规范化时,其使用的 ap_normalize_path 函数会对路径参数先进行 url 解码,然后判断是否存在 ../ 的路径穿越符。

当检测到路径中存在 % 字符时,若其紧跟的两个字符是十六进制字符,则程序会对其进行 url 解码,将其转换成标准字符,如 %2e 会被转换为 . 。若转换后的标准字符为 . ,此时程序会立即判断其后两字符是否为 ./ ,从而判断是否存在未经允许的 ../ 路径穿越行为。

如果路径中存在 %2e./ 形式,程序就会检测到路径穿越符。然而,当出现 .%2e/%2e%2e/ 形式,程序就不会将其检测为路径穿越符。

原因是遍历到第一个 . 字符时,程序检测到其后两字符为 %2 而不是 ./ ,就不会将其判断为 ../ 

因此,攻击者可以使用 .%2e/%2e%2e/ 绕过程序对路径穿越符的检测,从而读取位于 Apache 服务器 web 目录以外的其他文件,或者读取 web 目录中的脚本文件源码,或者在开启了 cgi 或 cgid 的服务器上执行任意命令。

漏洞环境可以从靶场获取:Vulhub - Docker-Compose file for vulnerability environment

下载完成后,进入到如下目录中:

/root/vulhub-master/httpd/CVE-2021-41773

然后执行docker-compose up -d拉取漏洞环境:

docker-compose up -d

 镜像拉取完成后我们可以尝试在浏览器访问一下:

可以看到,访问页面显示It works!,说明环境搭建好了

尝试进行../../的访问

访问完成后,可以看到我们的请求错误,说明后端可能对../这样的字符进行了过滤阻断

这时候就可以尝试利用Apache路径穿越漏洞试试了,我们尝试访问http://192.168.159.200:8080/icons/.%2e/%2e%2e/%2e%2e/%2e%2e/etc/passwd

可以看到,成功的利用编码+目录穿越漏洞访问到了服务器中的/etc/passwd文件中的内容了

3、Nginx目录穿越漏洞

下面使用Nginx配置文件错误导致的目录穿越漏洞再来演示一下:

这个漏洞常见于Nginx做反向代理的情况,动态的部分被proxy_pass传递给后端端口,而静态文件需要Nginx来处理。

假设静态文件存储在/home/目录下,而该目录在url中名字为files,那么就需要用alias设置目录的别名:

location /files {
    alias /home/;
}

此时,访问http://example.com/files/readme.txt,就可以获取/home/readme.txt文件。

但我们注意到,url上/files没有加后缀/,而alias设置的/home/是有后缀/的,这个/就导致我们可以从/home/目录穿越到他的上层目录:

进而我们获得了一个任意文件下载漏洞。

这里还是使用vulhub中的靶场进行演示

移动到如下目录中:

/root/vulhub-master/nginx/insecure-configuration

然后执行docker-compose up -d拉取漏洞环境:
 

拉取完成后,查看一下nginx的配置文件内容,果然和上面的漏洞分析一样在/files后面没有加/可能会导致目录穿越漏洞

然后访问主页:

尝试进行目录遍历访问:

可以看到成功的访问到了上级目录中的文件,验证了目录遍历漏洞的存在

如何解决这个漏洞?

只需要保证location和alias的值都有后缀/或都没有这个后缀。

4、pikachu靶场中的目录遍历漏洞

来到pikachu靶场后点击"../../"页面就可以来到目录遍历漏洞的页面

可以看到是这样介绍目录遍历漏洞的:

在web功能设计中,很多时候我们会要将需要访问的文件定义成变量,从而让前端的功能便的更加灵活。 当用户发起一个前端的请求时,便会将请求的这个文件的值(比如文件名称)传递到后台,后台再执行其对应的文件。 在这个过程中,如果后台没有对前端传进来的值进行严格的安全考虑,则攻击者可能会通过“../”这样的手段让后台打开或者执行一些其他的文件。 从而导致后台服务器上其他目录的文件结果被遍历出来,形成目录遍历漏洞。

看到这里,你可能会觉得目录遍历漏洞和不安全的文件下载,甚至文件包含漏洞有差不多的意思,是的,目录遍历漏洞形成的最主要的原因跟这两者一样,都是在功能设计中将要操作的文件使用变量的 方式传递给了后台,而又没有进行严格的安全考虑而造成的,只是出现的位置所展现的现象不一样,因此,这里还是单独拿出来定义一下。

需要区分一下的是,如果你通过不带参数的url(比如:http://xxxx/doc)列出了doc文件夹里面所有的文件,这种情况,我们成为敏感信息泄露。 而并不归为目录遍历漏洞。(关于敏感信息泄露你你可以在"i can see you ABC"中了解更多)

访问目录遍历页面可以看到如下页面:

第一篇文章:

第二篇文章:

可以看到访问不同页面的方式是通过dir_list.php传入的值访问的,那么我们就可以尝试利用../../看是否可以访问到上一级的文件,我们已知上级目录中存在一个 概述页面 dir.php尝试访问一下:

可以看到成功的利用../访问到了上一级别目录中的dir.php文件的内容,说明存在目录遍历漏洞

5、Burpsuite靶场中的目录遍历漏洞

靶场网址:What is path traversal, and how to prevent it? | Web Security Academy (portswigger.net)

打开网址可以看到如下页面:

往下拉可以看到6个靶场页面,这里就用这6个靶场来演示一下目录遍历漏洞

(1)simple case(简单的)

访问主页如下所示:

然后我们在使用burpsuite抓包的同时点击任意一个图片:

这里可以看到这里传入图片的方式是给filename传入的,那么我们就可以尝试在这里用../../访问

首先尝试传入../发现是可以执行的,后面就可以通过不断地尝试获取到/etc/passwd文件的内容

(2)traversal sequences blocked with absolute path bypass(利用绝对路径进行绕过)

点击第二个靶场可以看到如下页面

同样在使用Burpsuite抓包的同时访问该页面:

可以看到加载图片的方式和上面那个把好吃那个一样,我们尝试进行../访问:

但是多少个../../都无法访问到,最后尝试使用了一下/etc/passwd居然直接访问成功了:

(3)traversal sequences stripped non-recursively(非递归的过滤遍历序列)

来到第三关,访问主页可以看到如下页面:

还是和上面一样,在使用Burpsuite抓包的同时访问该页面:

可以看到传递图片的方式还是和上面的一样,我们尝试访问/etc/passwd/文件

可以看到使用靶场1和靶场2的方式都无法访问,这时因为后端对../进行了,过滤,我们可以使用下列形式绕过过滤,访问文件:

可以看到成功的绕过了过滤,成功的访问到了/etc/passwd文件

(4)traversal sequences blocked with absolute path bypass(通过绝对路径绕过被阻止的遍历序列)

来到第四关,访问主页可以看到如下页面:

还是和上面一样,在使用Burpsuite抓包的同时访问该页面: 

还是一样,尝试使用上面的方法../../来访问/etc/passwd文件

但是上面的方法都无法访问,可以使用 对..进行了二次url编码绕过限制访问/etc/passwd文件:

可以看到,成功的使用编码绕过了限制,成功的访问到了/etc/passwd文件

(5)traversal sequences stripped with superfluous URL-decode(验证开始路径 )

来到第五关,访问主页可以看到如下页面:

 还是和上面一样,在使用Burpsuite抓包的同时访问该页面: 

可以看到这里还是通过传入来访问图片,但是这里是传入的绝对路径

可以使用下列形式来访问/etc/passwd文件:

可以看到成功的访问到了/etc/passwd文件

(6)validation of file extension with null byte bypass(利用空字节绕过验证文件扩展名的文件扩展名验证)

点击进入最后一关,可以看到如下页面:

还是一样使用Burpsuite抓包的同时访问该页面:

这里需要补充空字节知识点来配合来进行访问:

空字节,是null字节,也是\x00。空字节在编程的字符处理函数中被看做字符串的终止符。当读到%00,也就意味着字符串到此为止了。

在本靶场中,存在对后缀进行了校验,这可能就涉及到了编程中的对字符串结尾校验的函数,比如python中的endswith。

在对../../../etc/passwd%00.jpg进行后缀校验的时候,应用程序需要校验结尾是不是.jpg,因为这个payload是符合这样的结尾的,因此予以通过。

还是一样啊,还是一样的操作尝试利用目录遍历访问/etc/passwd文件:

可以看到通过空字节阶段+目录遍历访问到了/etc/passwd文件

到此目录遍历漏洞的学习就暂时结束了,后面还有很多知识等着我去学习,再见(*^▽^*)

参考链接:

目录遍历漏洞简介-新华三集团-H3C

https://www.cnblogs.com/syc233/p/17477732.html

三个案例看Nginx配置安全 | 离别歌 (leavesongs.com)

burpsuite官方靶场之目录遍历篇 - FreeBuf网络安全行业门户

  • 19
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

未知百分百

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

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

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

打赏作者

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

抵扣说明:

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

余额充值