前言
Record一篇RPO(Relative Path Overwrite)相对路径覆盖漏洞,其于2014年由Gareth Heyes提出,2016年后filedescriptor在Google发现了多个RPO的问题使其二次出现在人们的视野中。
目录
0x00漏洞原理
0x01漏洞基础知识
0x02漏洞组合利用
0x00漏洞原理
RPO漏洞主要是由于服务器和浏览器对特殊URL的处理存在差异,导致攻击者可通过一些方式在页面中载入攻击者可控的资源文件,例如JS、CSS文件,以达到攻击者的目的,如盗取Cookie。
0x01漏洞基础
在说漏洞利用之前,先了解漏洞基础知识,这里,我的网站服务器是Apache,且已在httpd.conf
中设置了AllowEncodedSlashes
为On,浏览器是Chrome,以下都为该场景情况。
首先,在浏览器中输入URL,http://www.bywalks.com/rpo/test/..%2f1.html
浏览器和服务器对该URL的处理不同,服务器可以正常找到rpo目录下的1.html文件,并把1.html文件的内容返回给浏览器,而浏览器会认为..%2f1.html
是一个文件,服务器返回的的内容是访问/rpo/test/
目录下的文件..%2f1.html
所返回的。
举个场景,在个人博客做了个演示Demo,给大家分析该问题
目录结构如下,博客根目录下存在rpo目录,rpo目录下存在1.html和test目录,test目录下存在a.js
1.html文件内容为
1 | <html> |
a.js文件内容为
1 | alert("Read file successfully"); |
访问之前给过的URL:http://www.bywalks.com/rpo/test/..%2f1.html
,结果如下图
1.html会加载test目录下的a.js文件,这是怎么回事呢?
讲述一遍加载顺序,你就可理解这个问题。
1:输入并访问http://www.bywalks.com/rpo/test/..%2f1.html
,服务器可正常识别编码后的URL,服务器找到rpo目录下的1.html文件,并把1.html文件的内容返回给浏览器;
2:浏览器接受到1.html文件的内容,试图加载同目录下的a.js文件;
3:浏览器不可正常识别编码后的URL,同一URL浏览器会认为1.html返回的内容是访问http://www.bywalks.com/rpo/test/
目录下的..%2f1.html
文件所返回的,所以浏览器会加载/rpo/test/
目录下的a.js文件,这是一个超预期的行为,会造成相应的危害。
0x02漏洞组合利用
RPO+OpenRedirect
假设漏洞场景:
访问http://www.bywalks.com
返回
1 | <html> |
访问http://www.bywalks.com//evil.com/
,会跳转到evil.com
以上场景下,如果evil.com根目录下存在a.js文件,访问http://www.bywalks.com//evil.com/%2e%2e
即会载入evil.com
的a.js文件,这是为什么呢?了解一下加载顺序
1:访问http://www.bywalks.com//evil.com/%2e%2e
,服务器返回访问http://www.bywalks.com
的内容;
2:浏览器接受http://www.bywalks.com
的内容,加载a.js,尝试访问http://www.bywalks.com//evil.com/a.js
获取js文件;
3:触发OpenRedirect漏洞,访问evil.com/a.js文件。
RPO+Upload File
假设漏洞场景:
访问http://www.bywalks.com
返回
1 | <html> |
存在上传js文件功能,上传后的地址为http://www.bywalks.com/user/1/a.js
,
访问http://www.bywalks.com/user/1/..%2f..%2f
,即可加载http://www.bywalks.com/user/1/a.js
文件,原理与之前一致。
参考文章
http://blog.nsfocus.net/rpo-attack/
https://blog.innerht.ml/rpo-gadgets/
https://www.mbsd.jp/Whitepaper/rpo.pdf
https://www.youtube.com/watch?v=0-sA_kAVw74
https://www.freebuf.com/articles/web/166731.html
https://speakerdeck.com/filedescriptor/exploiting-the-unexploitable-with-lesser-known-browser-tricks?slide=42