2016年10月13日 星期四

Collection of CTF Web Challenges I made


把出過的 CTF Web 題都整理上 GitHub 惹,包括原始碼、解法、所用到技術、散落在外的 Write ups 等等

This is the repository of CTF Web challenges I made. It contains challs's source code, solution, write ups and some idea explanation.



2016年7月23日 星期六

HITCON 2016 投影片 - Bug Bounty 獎金獵人甘苦談 那些年我回報過的漏洞


This is my talk about being a Bug Bounty Hunter at HITCON Community 2016

It shared some of my views on finding bugs and some case studies, such as
  • Facebook Remote Code Execution... more details
  • Uber Remote Code Execution... more details
  • developer.apple.com Remote Code Execution
  • abs.apple.com Remote Code Execution
  • b.login.yahoo.com Remote Code Execution... more details
  • eBay SQL Injection
  • www.google.com XSS
  • Apple XSS
  • Facebook Onavo XSS
  • Uber XSS

Sorry for it's only in Chinese. Wishing you would like it.

-----

很榮幸成為 HITCON 2016 CMT 的 Keynote,下面是這次演講的投影片跟介紹XD

分享當個獎金獵人在參加各大廠商 Bug Bounty 計畫與尋找漏洞上的心得談, 以及那些回報中那些成功或被拒絕的案例與漏洞細節!

廠商包括 Google, Facebook, Apple, Yahoo, Uber 及 eBay,弱點則從 Remote Code Execution, SQL Injection, Logical Flaws 到特殊姿勢的 XSS 不等。

一起來看看大公司會有什麼樣的漏洞吧!




2016年4月21日 星期四

2016年4月7日 星期四

Uber 遠端代碼執行- Uber.com Remote Code Execution via Flask Jinja2 Template Injection




好久沒 po 文了XD

幾天前,Uber 公佈了 Bug Bounty 計畫,從  Hackerone 上看到獎金不低,最少的 XSS / CSRF 都有 3000 美金起就跳下來看一下有什麼好玩的XD

從官方公佈的技術細節發現 Uber 主要網站是以 Python Flask 以及 NodeJS 為架構,所以在尋找漏洞的時候自然會比較偏以測試這兩種 Framework 的漏洞為主!

Uber 網站在進行一些動作如修改電話、姓名時,會以寄信及簡訊的方式告知使用者帳號進行了變更,在某次動作後發現 Uber 寄過來的信如下圖,怎麼名字會多個 "2" XDDDD



往前追查原因才發現進入點是在 Riders.uber.com,Riders.uber.com 為修改個人資料以及顯示帳單、行程行程的地方,在修改的姓名中,使用了

{{ 1+1 }}

這個 payload 導致的,漏洞大概成因是 Python Flask 中預設使用的模板引擎是 Jinja2,在 Jinja2 中可使用些許的 Python 語法來幫助產生 HTML (當然有 Sandbox)

所以 {{ 1+1 }} 就被 Python 解析成 2 並且放置信件中寄到我的信箱,更詳細的內容可參考由 PortSwigger (BurpSuite 開發人員) 在 BlackHat 2015 發表的  Server-Side Template Injection:RCE for the modern webapp

所以現在我可以使用 Jinja2 的語法有限度的在姓名欄位寫 Python 程式碼了! 如在姓名欄位依照 Jinja2 語法填入

{% for c in [1,2,3] %}{{ c,c,c }}{% endfor %}

利用模板引擎叫 Uber 伺服器幫我們跑個 FOR 迴圈,結果還會寄到你信箱XD






成功執行 FOR 迴圈! 不過在文章前面有提到,可以執行 Python Code 但並不是無限制,Jinja2 中有 Sandbox 來對危險的用法、函數進行防護。

不過這個對常玩 CTF 的人絕對不是問題,在各個比賽中很常出現 Python 的 Sandbox 繞過用到的手法可以直接拿來這裡用!

詳細技術細節可以參考
Exploring SSTI in Flask/Jinja2, Part2
利用 Python 特性在 Jinja2 模板中執行任意代碼

如使用

{{ [].__class__.__base__.__subclasses__() }}

可列出所有引用的模組, 如



會顯示是空的是因為被 HTML < > 包起來了,檢視原始信件就可以看到了XD

額外一提的是在引用模組中看到 Celery,因此可以猜測網站大致架構應該是:

從 Riders.uber.com 這個進入點修改姓名後存進資料庫

不過為了寄送簡訊以及信件等耗時的工作,使用 Asynchronous Task 機制交給後方的 Worker

而當 Worker 再從資料庫抓出姓名產生模板時使用串接的方式直接將模板產生所以導致了這次遠端代碼執行 :P

寫到這,最後廢言一下,對我來說,其實玩 Bug Bounty 獎金什麼都是額外的,最主要的是可以找出別人找不出、別人發現不了的漏洞,回報並且讓別人也認同你的發現,這其中得到的成就感才是最爽的XD


2016年1月14日 星期四

HITCON CTF 2015 Quals & Final 心得備份


當初好像沒留底稿只發布在 Facebook 跟烏雲
今天睡醒發現又有人在轉貼這篇,想說留個備份好了XD

Facebook 連結
Wooyun 知識庫連結
HITCON KnowledgeBase 連結

----------

決賽 Attack & Defense 也出了一道 Web 題目
0ops 成員 5alt 也寫了一篇筆記 HITCON CTF 2015 Final Webful Writeup

寫的真棒XD
看得我自己心癢癢都想寫一篇來解釋各個洞為什麼要這樣設計了XD
出 Final 時候本意就是要把環境模擬成真實環境,讓平常 Web 狗的各種猥瑣流可以得心應手而不是淪為解題形式在實戰中派不上用場
 
除了各個 API 接口的互相影響 單點淪陷 = 全部淪陷 外
還有模擬 Discuz UC_KEY 的應用,SECRET_KEY 洩漏的各種利用方式順便防止 Replay
裡面的 VIM 備份檔下載也是隨著題目應運而生出現的洞XD
(看了你才知道真實世界中為什麼會出現這樣的洞)
 
最後預料之外的是,本來想說大家都是世界等級的隊伍修漏洞應該很快,所以本來預期最後大家都是去繞各個隊伍的 WAF ,
不過看來有點太坑了XD