當前位置:
首頁 > 新聞 > 思路決定成敗:F12給了我黑色的眼睛我卻用它來挖洞

思路決定成敗:F12給了我黑色的眼睛我卻用它來挖洞

*文章原創作者:evil7,本文屬於FreeBuf原創獎勵計劃,未經許可禁止轉載




為了在脫貧致富關鍵的2020年前,正確地貫徹落實互惠雙贏政策和以先富帶後富的重要指示精神。


坐山吃山指哪兒打哪兒,今天就來說說F12除了掛自慰黑頁,如何幫助你完成手工審計吧。(小和尚Maniac&最近在問相關問題,所以文中一道寫來提供基礎學習,文章篇幅將著重解釋)


「打開這個頁面的時候,我就知道這裡肯定有洞」、「看到這個api的返回時我就知道我改如何構造exploitChain了」


大佬們總是一眼識破然後光速提交。我報告都寫完了你卻還在設置掃描器?想擺脫掃描器的你請快打開小本本做筆記。


好了,授人以魚不如授人以漁,今天以FreeBuf的兩個洞

(已修復)

為引子,開始瞎扯…


在開源的海洋遨遊,看不到其實能搜得著


世界最大的同性開發者交友網站:Github


你總是說不知道源碼,只能黑盒測試,其實你只是搜尋姿勢不到位。比如在github上就能搜到很多開源的插件代碼,很多甚至官方開源的應用,就算搜不到目標站點的所有源碼,也說不定能找到站點開發者的其他項目,了解了解他的coding習慣語法陋習往往也能帶來不一樣的收穫。


舉例1:Freebuf主站的某dom型xss

我們先來看看流量,尋找某些不一樣的特徵,而這裡找到的特徵,就是我們入手的地方。


可以看見這裡按鈕出現了一個關鍵詞 wpfpaction 那麼插件應該關係於wpfp,我們可以搜一下,找到看是否找到這個插件的開源代碼,或者自己去wordpress store下載這個插件來審計。


在github找到這個插件的源碼,可以看到有一個奇怪的地方,那就是實際上可以在favorite頁面查找其他用戶的收藏?這是什麼騷操作。。



我們找到wpfp_list_favorite_posts()這個function,其中有一個$_REQUEST["user"]引起了我的注意,雖然沒能在freebuf直接找到這個點,但是這個api會不會也存在呢?


進入我的收藏頁面,並帶上這個隱藏的參數,我們看見在https://www.freebuf.com/user/myfavorites?user=1頁面有這樣一個有趣的返回內容:


再繼續回到github,我們直接速審跟進一下這個user參數來去的走向:



可以看到在template里直接把

$user

無處理返回到頁面上了。


(wpfp-page-template.php在wp-favorite-posts.php頁面被include過了,所以我們跟進來到template里)


那麼回到站點,我們直接測試一下是否能構造xss吧。


可以看到,如此一來非常順利的就拿到了一個xss的洞,其實挖洞也沒想像中難,不是么?


同樣修復建議:轉義用戶輸入或者刪除此api。


為F12正名,像開發者去找構造異常尋找弱點



「你逛了半小時相親網站了,找到合適的對象了么?」


「我暫時沒看到合適的伴侶,但是好像找到了2個bug…」


「…恩,挺好…挺好…」


我們來到https://job.freebuf.com也來找找工作。


emmm…順便也找找bug…挺好…挺好…


像個開發一樣,習慣性到處點點,看看響應時間,看看頁面的變化,再找找會不會有「更多機會」 :)



看來「更多機會」真的會帶來更多機會233333。


點擊以後,我們找到了7個可控輸入點,其中2個直接被返回到頁面。是否能找到xss呢?


上探針放dom進參數里,發現0號不可繞過,1號居然沒了???


其實不然,這也是為什麼要開著F12進行測試,我們要看看到底是哪兒發生了錯誤,是否會有「友情提示」?


可見這裡一段error卡在了jquery的選擇器語句中,而下方信息也不要忽視,點進去跟進一下代碼,看看是怎麼處理的。


我們找到所有關聯的文件,知道了city參數是直接傳入,由前端處理的,並且直接拼到了輸出里,使用了危險實現方式 $(dom).html(contents) 教科書般xss點…


那麼接下來就只需要讓error通過就行了,而jq選擇器的拓展語法其實很簡單:


$(dom[value]) 選擇器帶值過濾參考:(這就是知識儲備的優勢,基礎特性要牢記!)


https://www.w3.org/TR/selectors-3/#attribute-selectors


測試一下,原來是缺少引號包裹,導致執行錯誤被打死在路上。


於是構造payload完成xss:



後話


前端dom型xss其實是很有意思的,比如當找到一個點,我們可以用#payload的方式來讓payload只針對用戶攻擊,而攻擊點只使用eval(atob(location.hash.substr(1)))來構造,盡量避免真正的攻擊目的出現在log里,或者存留在伺服器上,或通過cookie、cdn緩存、第三方載入內容等,做為觸發器做為payload的轉存地。

調試下斷點,跟進js流程或現復現流程弱點再尋找可控點,幫助前端審計的同時還能根據操作的響應時間,判斷是否是前端處理、有沒有後端特殊api流量被暴露、處理時間偏長的是否可能有SQL查詢參與…


不要再說f12隻能自慰掛黑頁了,那只是你不懂合理利用罷了,別只想著用掃描器,掃描器都能掃到還要你干毛?


只會用掃描器不算白帽,頂多算個毛線帽。。哈哈哈23333


*文章原創作者:evil7,本文屬於FreeBuf原創獎勵計劃,未經許可禁止轉載


喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 FreeBuf 的精彩文章:

萬豪數據泄漏門再敲警鐘,酒店集團7步安全建議
Armor:一款功能強大的macOS Payload加密工具

TAG:FreeBuf |