Skip to content

Instantly share code, notes, and snippets.

@pich4ya
Last active December 21, 2023 10:19
Show Gist options
  • Save pich4ya/1ac125726e4f79c6832899e6c9b7bde1 to your computer and use it in GitHub Desktop.
Save pich4ya/1ac125726e4f79c6832899e6c9b7bde1 to your computer and use it in GitHub Desktop.
How to capture Xamarin and Flutter HTTPS API traffic using iPhone and MBP
# @author Pichaya Morimoto (p.morimoto@sth.sh)
# How to capture Xamarin and Flutter HTTPS API traffic using iPhone and MBP
# วิธี mitm ดัก Web API ของ iOS App ผ่าน MacOS -> Burp Suite ที่เป็น unaware proxy
# (เช่น Xamarin, Flutter ที่ไม่วิ่งผ่าน System Proxy ไม่ใช้ default Cert Store ใน iPhone)
# ถ้าเป็นแอปปกติ ที่ใช้ system proxy อยู่แล้วไม่ต้องทำท่านี้ก็ได้ ตั้ง proxy ปกติไปได้เลย
1. เสียบ iPhone (ที่ jailbreak แล้ว) กับ MBP ผ่าน USB แล้วใช้ iproxy ตั้งให้ local port 8080 บน iPhone วิ่งเข้า local port 8080 บน MBP ด้วย ssh reverse tunnel (-R)
$ brew install usbmuxd
$ iproxy 2222 22 & disown && ssh -R 8080:localhost:8080 -p 2222 root@127.0.0.1 -N -f
2. เอา iPhone (1.1.1.3) ตั้ง proxy วิ่งเข้า Burp Suite ที่ 127.0.0.1:8080
บน iPhone เปิด Safari เข้า http://burp กดดาวน์โหลด "CA Certificate" ขวาบน -> "Install"
ไปติ๊กยอมรับใน Settings > General > Profile > "ชื่อ Profile" > "Install"
ไปติ๊กยอมรับใน Settings > General > About > Certificate Trust Settings > ติ๊กสีเขียวให้ "ชื่อ Profile"
3. เอา MBP (1.1.1.2) กับ iPhone (1.1.1.3) ต่อเข้า Wi-Fi เดียวกัน
(Wi-Fi ต้องไม่มี client isolation คุยกันได้)
4. ในการตั้งค่า Wi-Fi ของ iPhone ตั้ง IP แบบ manual (IPv4 Address > Configure IP > Manual) กำหนด IP Gateway (Router) ให้เป็น IP ของ MBP (1.1.1.2)
5. บน MBP ใช้ pf ทำ route
โดยให้ถ้ามี packet มาวิ่งผ่าน MBP โดยต้นทางเป็น iPhone (1.1.1.3) ไปที่ port 443 IP ปลายทางที่ใดก็ได้
ให้ packet มัน redirect ไป ที่ port 1337 ที่ interface 1.1.1.2 (หรือ 127.0.0.1 ก็ได้แล้วแต่จะ bind ไว้)
$ sudo sysctl -w net.inet.ip.forwarding=1
$ echo "rdr pass inet proto tcp from 1.1.1.3 to any port 443 -> 1.1.1.2 port 1337" | sudo pfctl -e -f -
6. บน MBP ใช้ Burp Suite รอรับ traffic ปลายทางที่ route จาก pf มา
ไปที่ Proxy > Options > สร้าง Proxy Listeners เป็น Interface: 1.1.1.2:1337
เลือก Tab "Request handling" ติ๊ก Force use of TLS ให้มันใส่ Redirect to port: 443
ติ๊ก Support invisible proxing (enable only if needed)
ณ จุดนี้ packet ที่วิ่งไป TCP/443 จากแอปบน iPhone จะวิ่งผ่าน Burp Suite โดยจะ bypass TLS Validation (จาก CA Store ของกรณีนั้น ๆ)
แต่ยังไม่ได้ bypass การทำ Certificate Pinning (ถ้ามี) ต้องทำต่อเอง แล้วแต่แอป อาจจะ patch ค่า public key/hash
ในไฟล์ binary/app package หรือใช้ frida ทำ runtime patching ที่ฟังก์ชัน สำหรับการ pin ก็ได้
[+] เพิ่มเติมเกี่ยวกับ pf
; ดู pf rule
$ sudo pfctl -s all
; เคลียร์ pf rule
$ sudo pfctl -F all
; ถ้ามีหลาย rule ใส่ไฟล์แล้ว
$ sudo pfctl -f pf_rules.txt
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment