目录遍历

目录遍历

ctfhub中web基础技能树,总共只有4*4 16个,可以手动查找flag所在目录,也可编写python脚本实现。

import requests

url = "http://challenge-e87efa4af8a8d0df.sandbox.ctfhub.com:10800/flag_in_here/"

for i in range(5):
    for j in range(5):
        url_final = url  + str(i) + "/" + str(j)
        r = requests.get(url_final)
        get_file=r.text
        if "flag.txt" in get_file:
            print(url_final)

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

​ 一般来讲网站会对目录遍历进行防御,可以采用以下绕过方法。

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是由客户端浏览器发送的,服务器是无法控制的,而将此变量当作一个值得信任源是错误的。

参考资料

https://www.freebuf.com/vuls/247620.html

https://www.cnblogs.com/quail2333/p/12489904.html

posted @ 2022-01-23 00:04  qweg_focus  阅读(988)  评论(0编辑  收藏  举报