Django任意URL跳转漏洞(CVE-2018-14574)

本文介绍了Django的任意URL跳转漏洞(CVE-2018-14574),详细解析了漏洞原理、影响版本及漏洞复现过程。当APPEND_SLASH设置为True且URLCONF存在匹配规则时,攻击者可利用此漏洞进行任意URL跳转。复现过程中,通过//example.com的URL触发漏洞,导致301重定向至目标地址。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言

Vulhub是一个基于docker和docker-compose的漏洞环境集合,进入对应目录并执行一条语句即可启动一个全新的漏洞环境,让漏洞复现变得更加简单,让安全研究者更加专注于漏洞原理本身

Voulhub靶机平台环境搭建和使用:

https://blog.youkuaiyun.com/qq_41832837/article/details/103948358

目录:

漏洞原理

在Django默认配置下,用户访问的URL的最后一位应该是以斜杠结尾,如果用户输入的URL没加斜杠,那么会默认自动帮你补上它并跳转到带斜杠的请求中。在path开头为//example.com的情况下,Django没做处理,导致浏览器认为目的地址是绝对路径,最终造成任意URL跳转漏洞。该漏洞利用条件是目标URLCONF中存在能匹配上//example.com的规则。

漏洞详情

影响版本:version < 2.0.8

漏洞原因:Django安装好后,当settings模块配置好了django.middleware.common.CommonMiddleware,且APPEND_SLASH为True时漏洞就会触发(这两个配置是默认存在的)。

CommonMiddleware其实是Django中的一个中间件,因为Django是用python写的,所以又可以说它是一个位于site-packages/django/middleware/common.py的一个类。Django在接受到一个请求(request)后,会先放到中间件(CommonMiddleware)中去处理,然后再通过默认的 URL 方式进行。如果设置了APPEND_SLASH=True,并且用户输入的URL没有以斜杠结尾,在urlpatterns中也匹配不到这个URL,则通过在末尾附加斜杠来形成新的URL。如果在urlpatterns中找到此新URL,则将HTTP重定向返回到此新URL。例如:

初始链接:http://your-ip:8000/test
301重定向后的链接:http://your-ip:8000/test/

但是如果URL是这样的:http://your-ip:8000//example.com,那么程序会进入site-packages/django/middleware/common.py下执行process_request()函数:

def process_ request(self, request): 
"""
Check for denied User-Agents and rewrite the URL based on
settings. APPEND_ SLASH and settings. PREPEND_ WWW
"""
# Check for denied User-Agents
if 'HTTP_ USER_ AGENT' in request.META:
for user_ agent_ regex in settings .DISALLOWED _USER_ AGENTS:
if user_ agent_ regex . search(request .META['HTTP_ USER_ AGENT']):
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值