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

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

什么是任意url跳转漏洞:


服务端未对传入的跳转url变量进行检查和控制,可能导致可恶意构造任意一个恶意地址,诱导用户跳转到恶意网站。
由于是从可信的站点跳转出去的,用户会比较信任
假如http://www.aaa.com/acb?Url=http://www.zhapian.com
(只要将该链接发给用户诱导其点击,即可实现漏洞目的)

漏洞危害:

        通过转到恶意网站欺骗用户输入用户名和密码盗取用户信息

        或欺骗用户进行金钱交易

漏洞原因:

Django的配置下,如果匹配上的URL路由中最后一个是/,而用户访问的时候没加/,则Django的配置会转移到带/的请求中。(由配置项中的django.middleware.common.CommonMiddleware,APPEND_SLASH来决定)。

也就是说当setting中配置了django.middleware.common.CommonMiddleware且

APPEND_SLASH为True时漏洞就会触发,而这两个配置时默认存在的

漏洞复现:

vulhub目录在

cd vulhub/django/CVE-2018-14574
对靶场进行编译:docker-compose build
运行靶场:docker-compose up -d

环境开启后,进攻复现

 

只要在url后加上//想跳转的网页,即可实现跳转,比如中国黑客联盟网页
 

192.168.0.99:8000//www.chinahacker.com
连接点击后即可实现跳转
 

抓包分析:因为漏洞环境开启端的是8000端口,所以burp要设置监听8000端口 

原本页面的包
加上text请求后发送

 

如果漏洞存在的话,说明APPEND_SLASH=True并且初始URL没有以斜杠结尾,并且在urlpatterns中找不到它,则通过在末尾附加斜杠来形成新的URL。如果在urlpatterns中找到此新URL,则将HTTP重定向返回到此新URL。

换句话说就是对那些末尾没加/的url自动填补/然后重新发起请求 所以如果在末尾加上了/是不会跳转成功的 

 

访问http://我靶机IP:8000// www.chinahacker.com,即可返回是301跳转码 

修复建议:

进行官方升级 

 

おすすめ

転載: blog.csdn.net/qq_48985780/article/details/121348204