寫在前面的話
當PornHub公佈了他們的公開漏洞獎勵計劃之後,我敢肯定的是該網站之前存在的一些低階漏洞或比較容易發現的漏洞都已經被別人挖出來了。但是當我開始著手挖PornHub的漏洞時,我卻在15分鐘之內就發現了第一個漏洞,而在幾分鐘之後我又找出了第二個漏洞。在我整個挖洞生涯中,我從來沒有以這麼快的速度挖出過漏洞,所以我覺得非常的激動!
作為回報,我收到了PornHub所提供的總共500美金的漏洞獎勵,外加一件非常炫酷的T恤衫,衣服的圖片我已經發到Reddit上了,如下圖所示:
當我將這張照片發到Reddit上之後,我壓根沒想到它會受到如此多的關注,而且很多人都向我私信並問我有關挖洞的事情,例如“你是怎樣完成攻擊的?”以及“你為什麼要攻擊PornHub?”等等。由於要遵守漏洞獎勵計劃的規定,我當時並不能給大家回答這些問題,但是現在這些漏洞已經被修復了,所以我打算在這篇文章中跟大家描述一下挖洞的整個經過。
挖洞過程
我當時正在使用瀏覽器瀏覽PornHub Premium網站,而我僅在20分鐘之內就發現並報告了兩個反射型跨站指令碼(XSS)漏洞。跨站指令碼漏洞將允許攻擊者在一個網站中執行惡意指令碼,OWASP給出的XSS漏洞定義如下:
“一名攻擊者可以利用XSS漏洞向不知情的使用者傳送惡意指令碼。終端使用者的瀏覽器無法確定這些指令碼是否可信任,並且會自動執行這些惡意指令碼。因為它會認為這個指令碼來自一個可信任的源,而惡意指令碼將訪問瀏覽器中儲存的cookie、會話token或其他的敏感資訊,並利用這些資訊來完成其他的惡意目的,而有些指令碼甚至還可以修改頁面的HTML程式碼。”
我所發現的第一個漏洞存在於網站的“兌換碼”區域,這個文字框並不會對使用者的輸入資料進行檢測,而我們就可以在這個輸入框中輸入攻擊payload了,於是我就可以用下面給出的payload來讓頁面顯示我們的指令碼資訊:
1 |
PAYLOAD+STACK++%3E%27" /Autofocus/Onfocus=confirm`1`//&error=1 |
這個payload的第一部分“PAYLOAD STACK”用於確保我們的payload可以被正常傳送。如果我輸入的是:
1 |
++%3E%27" /Autofocus/Onfocus=confirm`1`//&error=1 |
如果沒有輸入剛才的“PAYLOAD STACK”,那麼Web應用將會遮蔽我所輸入的內容,此時頁面就不會顯示任何指令碼內容了。在payload前面輸入一些無害內容可以欺騙網站的驗證器,而我們的payload就可以正常執行了。
我所發現的第二個漏洞同樣是一個XSS漏洞,這個漏洞的發現過程就更簡單了。我當時發現了一個只會對新使用者顯示一次的URL引數,當我在這個引數中輸入了一個payload之後就成功觸發了網站的XSS漏洞,也許這就是該漏洞為何遲遲沒有被發現的原因吧。大多數漏洞獵人會在開始挖洞之前先熟悉一下目標站點,有些人甚至會憑感覺來嘗試找出漏洞,但是我一般採用的是一種不同的方法。我個人比較喜歡從匿名視窗入手,此時網站通常會認為我之前從未訪問過它,而這些視窗中一般都會存在安全漏洞。
我發現如果我沒有付費的話,我基本上是無法檢視PornHub Premium的網站內容的。但是在我支付之前,網站會彈出一個視窗並告知使用者當前正在訪問色情網站,使用者需要點選視窗中的按鈕來確定是否急需訪問。除此之外我還發現,當我點選了“Enter”(進入)按鈕之後,網站URL地址的其中一部分會發生改變並增加了一個引數。這個存在漏洞的引數就是“&compliancePop=no_gateway”,而我就可以在這個引數中輸入下面給出的payload:
1 |
&compliancePop=no_gateway%22-confirm`1`-%22 |
載入了這個payload之後,我就可以讓網站顯示出“1”,也就是我們payload中的資訊,而這就意味著這裡存在一個XSS漏洞。
總結
我將這兩個漏洞都上報給了PornHub,他們也在24小時之內對漏洞進行了稽核確認。我很感謝PornHub的工作人員給我們提供了一個非常公平的漏洞獎勵計劃,而且我也要為他們的工作效率和快速響應能力點個贊。更重要的是,他們非常在意使用者的安全,這也是很多其他的網站應該學習的地方。
如果你還想知道更多的挖洞經驗,請關注我的Twitter(@ jon_bottarini)。