天天看點

百度知道XSS漏洞

該漏洞是在傍晚時發現的,大概在晚上12點的時候被修複了。

事情的起因是我一同學在百度知道上看到一個很奇怪的,正文帶有連接配接的提問(這裡),正常來說,這種情況是不可能出現的。

我條件反射的想到了:XSS漏洞。出于好奇,我決定探究這個漏洞。

通過檢視源代碼,我馬上發現了問題的根源:未結束的<a>标簽。

我姑且猜測可以插入<a>标簽,于是嘗試插入<a href="http://www.baidu.com" target="_blank" rel="external nofollow" >a</a>,結果和我預想的差不多,被過濾了。

百度知道XSS漏洞

如果标簽不完整呢?沒用的,會被轉義。

百度知道XSS漏洞

到這裡,回頭仔細想想,為什麼之前的标簽沒被過濾,而後來寫的卻被過濾了?對比之前的和第二次嘗試,差別在于,第二次送出的<a>标簽href屬性的url位址是完整的,而之前的隻有http://。

至此,我大概能猜到這個漏洞是怎麼觸發的了:一個不完整的标簽 + href="http://" target="_blank" rel="external nofollow" 。

既然已經确定了怎麼觸發漏洞,接下來就利用漏洞做一些出格的事看看。既然标簽可以被保留下來,就可以在屬性上做文章。于此同時,我的那個同學已經在嘗試使用style了。連結(已失效)

百度知道XSS漏洞

利用style="color:red"改變字型顔色

這時我不禁邪惡了下,打算做個出格點的,連結(已失效)

<div style="background-color: blue; color: red; font-size: 64px; font-weight: bold; width: 1024px; height: 1024px; position: fixed; left: 0; top: 0;" onclick="alert(1);" href="http://"  哈</pre>      
百度知道XSS漏洞

如此,頁面已經面目全非了,并且添加了onclick事件。

好了,到此為止,如果别有用心,繼續探究的話,完全可以由此對整個百度知道頁面實施大規模的XSS攻擊。我很想向百度知道的背景開發組回報這一漏洞,但卻沒能在百度知道的頁面上找到相應的管道。是有那麼個意見回報區,但隻是個貼吧,估計我在裡面回報隻會被認為是瘋子。

最後,對漏洞的成因進行猜想。事實上已經很顯然了,隻是一些邏輯錯誤。百度知道背景涉及有兩次過濾(在目前讨論的問題中),第一次對url用<a>标簽包含起來,第二次将html特殊字元進行html實體化。百度知道的奇葩之處在于不是先進行html實體化,而是先處理url,當url處理出錯時,html實體化也相連出錯。

轉載于:https://www.cnblogs.com/7c00/archive/2012/11/23/2785094.html