iT邦幫忙

2019 iT 邦幫忙鐵人賽

DAY 3
0
Security

CTF30系列 第 3

CTF 3: idIoT: Camera (PlaidCTF 2018)

解說

這一題是接在 IdIoT: Action 後面的題目。很遺憾的,我當時卡在上一題,所以就沒辦法前進了。

這是三條系列題中的第二題,主要是 Binary 跟需要一點對 FTP 協定的瞭解。
題目的註解中會提到,有一臺 IP cam 會把影像傳到目標 FTP 機器上,每秒三張照片。也提示了 Flag 會存在照片中。

(另外出題者也請大家不要打 IP Cam。這可以預期到....)

偵查階段: FTP

我們在一開始會拿到一個 IP:Port 和一個 FTP binary。如果拆了 Binary,可以發現:

  1. 可以使用 PASV
  2. 有一個自訂指令,IP。這可以控制 PASV 時返回的 IP。這指令只有在你是 127.0.0.1 時可下。
  3. IP 指令和參數之間可以不用空白,且它在解析 IP 位置時,會忽略 IP 後面的垃圾 (1.1.1.1xxxx -> 1.1.1.1)
  4. 伺服器若收到開頭爲 GET HEAD POST PUT (基本上每個 HTTP Method 都不行) 時,會把連線關掉
  5. 伺服器不只用 \r\n 來作斷行,用 null byte 也行
  6. 這伺服器不需要認證就可聯上

FTP Passive Mode

FTP 其實有分成 Active Mode 和 Passive Mode。在預設的 Active Mode 之下,客戶端會用隨機 Port 接上伺服器 Port 21,伺服器會用 Port 20 接上客戶端的另一隨機 Port。(FTP 協定需要兩個 Port,分別是用作下命令和傳輸資料)

但假設客戶端有防火牆,因為通常這隨機 Port 都不是剛好防火牆有開放的,就有可能會連不上了。故 FTP 有一 Passive Mode,可以讓客戶端在兩個連線都作為主動發起的一端,這樣就可以輕易穿過客戶端的防火牆。

在連線建立時,客戶端立刻下 PASV 的話,伺服器會回覆:

227 Entering passive mode (ip,ip,ip,ip,port1,port2)

此時客戶端就可以知道傳輸時要連上伺服器的哪一個 Port 了。

取回圖檔

這裏有兩種可能的方式。

方法 1

因為 IP 只有在解析成 127.0.0.1 時可用,且我們不可用一般的 HTTP 請求來觸裏(因為偵查的第四點)。但我們可以用 HTTPS

HTTPS 的第一個封包是 Client Hello。我們可以用 SNI,把一些 FTP 指令偷渡到 HTTPS 請求中。這部分可以參考 Orange Tsai 的 Blackhat 2017 講稿

45244061-sni.png

由於 SNI 欄位之前會是一個 00,故在 SNI 開始前,伺服器會覺得這是一行新指令。故後面塞了 IP192.168.1.1 時,會被解析成政長指令。此時 IP cam 即會試著對你指定的 IP 建 FTP 的第二條連線。

方法 2

因為該 Binary 一行指令中最多只能下 8095 字,超過會被斷行 (視為第二條指令),故可以在 ftp:// 連線時,下超級長帳號,後面接 IP(你的ip)

參考資訊 / 圖片出處

PlaidCTF 2018: I Heard You Like IoT — Down to the Wire
ctf_writeup/20180505-plaidctf at master · balsn/ctf_writeup · GitHub
Payload 資訊
A New Era of SSRF - Exploiting URL Parser in Trending Programming Languages!


上一篇
CTF 1: idIoT: Action (PlaidCTF 2018)
下一篇
CTF 4: pwn1 (TAMUctf 18)
系列文
CTF3030

尚未有邦友留言

立即登入留言