天天看點

(CVE-2018-14574)Django \< 2.0.8 任意URL跳轉漏洞

一.漏洞簡介

Django預設配置下,如果比對上URL,路由中的最後一位是/。如果使用者通路的時候沒加/,Django預設會跳轉到帶/的請求中。(由于配置項中的django.middleware.common.CommonMiddleware、APPEND_SLASH來決定)。

在path開頭為//example.com的情況下,Django沒做處理,導緻浏覽器認為目的位址是絕對路徑,最終造成任意URL跳轉漏洞。

該漏洞利用條件是目标URLCONF中存在能比對上//example.com的規則。

注意:必須是http://目标機ip:8000//跳轉url

不能是http://目标機ip:8000//跳轉url/,也不能是http://目标機ip:8000/跳轉url

(CVE-2018-14574)Django \< 2.0.8 任意URL跳轉漏洞
(CVE-2018-14574)Django \< 2.0.8 任意URL跳轉漏洞

二.漏洞影響

Django < 2.0.8

三.漏洞複現

複現環境:vulhub

1.開啟該環境

指令:docker-compose up -d

(CVE-2018-14574)Django \< 2.0.8 任意URL跳轉漏洞

2.通路網址:http://127.0.0.1:8000/

(CVE-2018-14574)Django \< 2.0.8 任意URL跳轉漏洞

3.隻要在url後加上//想跳轉的網頁,即可實作跳轉

(CVE-2018-14574)Django \< 2.0.8 任意URL跳轉漏洞
(CVE-2018-14574)Django \< 2.0.8 任意URL跳轉漏洞

連結點選後即可實作跳轉

抓包分析:

1.直接通路http://10.0.78.22:8000/,進行抓包,放到Repeater

(CVE-2018-14574)Django \< 2.0.8 任意URL跳轉漏洞

将原來的包GET/後面加上text請求,Go

(CVE-2018-14574)Django \< 2.0.8 任意URL跳轉漏洞

發現301,跳轉到了text

如果漏洞存在的話,說明APPEND_SLASH=True并且初始URL沒有以斜杠結尾,并且在urlpatterns中找不到它,則通過在末尾附加斜杠來形成新的URL。如果在urlpatterns中找到此新URL,則将HTTP重定向傳回到此新URL。

換句話說就是對那些末尾沒加/的url自動填補/然後重新發起請求 是以如果在末尾加上了/是不會跳轉成功的

(CVE-2018-14574)Django \< 2.0.8 任意URL跳轉漏洞

可以看到無法跳轉

(CVE-2018-14574)Django \< 2.0.8 任意URL跳轉漏洞

将其改成//通路網址,即可成功傳回301,進行跳轉。

cve

繼續閱讀