一.漏洞簡介
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
二.漏洞影響
Django < 2.0.8
三.漏洞複現
複現環境:vulhub
1.開啟該環境
指令:docker-compose up -d
2.通路網址:http://127.0.0.1:8000/
3.隻要在url後加上//想跳轉的網頁,即可實作跳轉
連結點選後即可實作跳轉
抓包分析:
1.直接通路http://10.0.78.22:8000/,進行抓包,放到Repeater
将原來的包GET/後面加上text請求,Go
發現301,跳轉到了text
如果漏洞存在的話,說明APPEND_SLASH=True并且初始URL沒有以斜杠結尾,并且在urlpatterns中找不到它,則通過在末尾附加斜杠來形成新的URL。如果在urlpatterns中找到此新URL,則将HTTP重定向傳回到此新URL。
換句話說就是對那些末尾沒加/的url自動填補/然後重新發起請求 是以如果在末尾加上了/是不會跳轉成功的
可以看到無法跳轉
将其改成//通路網址,即可成功傳回301,進行跳轉。