當你看到一個參數的值是url的時候你會想到什么?
結合wooyun里的案例看,可能產生的危害分為三方面:
1、url重定向跳轉漏洞
2、底層操作類庫支持其他協議導致讀取本地或探測網絡信息
3、不支持其他協議但是沒有設置網絡邊界
url跳轉漏洞的科普之前已經發過http://drops.wooyun.org/papers/58。
url跳轉可能集中過濾不嚴格的情況:
一是白名單同域下可能有其他的302跳轉漏洞結合繞過。
二是單純判斷字符串中是否包含白名單域名,可用http://www.attack.com/test.com/index.php或http://www.test.com.attack.com/index.php繞過。
三是后端取host的時候跟瀏覽器識別的差異導致http://www.attack.com\test.com/index.php(測試除了gecko內核,其他瀏覽器都把attack.com當做host)可繞過。
后端如果僅僅是依靠獲取/來結束的話,就會產生差異,包括php中的parse_url函數獲取host的結果也是www.attack.com\test.com
wooyun中案例:
獲取地址的內容輸出出來,后端采用curl庫,支持其他的協議,如果沒有做任何過濾防范措施,可使用file協議時便可讀取本地的文件,telnet探測端口信息等。
http://share.renren.com/parse_share.do?link=file:///etc/passwd
http://share.renren.com/parse_share.do?link=file:///etc/sysconfig/
http://mark.appsina.com/read.php?sid=2247&type=0&url=telnet://221.179.193.1&pos=1&from=0&gsid=3_5bc7d139d8527229d2df38b6765c6b91b8428eda66bd8c1e61b5df&vt=2
wooyun中案例:
這兩個漏洞已經對核心白帽子公開,并且廠商已經修復,就拿來做例子了。
當已經針對url做了協議控制只允許http訪問時還能做什么呢?
嘗試下訪問內網吧
http://wap.sogou.com/tc?url=http%3A%2F%2Fno.sohu.com%2F
可以用暴力破解二級域名的工具找內網的域名跑一下試試,然后嘗試訪問看看是否成功~!
我們保證所有生成的鏈接都是來自于我們可信域的,通過在生成的鏈接里加入用戶不可控的Token對生成的鏈接進行校驗,可以避免用戶生成自己的惡意鏈接從而被利用,但是如果功能本身要求比較開放,可能導致有一定的限制。
功能要求比較開放的情況下,需要嚴格限定協議以及可訪問的網絡。