IThome 2024 鐵人賽 一直刷 CTF - Day23

前言

本日進度:

上課紀錄

SSRF (Server-Side Request Forgery)

  • 伺服器端請求偽造 (Server-Side Request Forgery)
  • 繞過防火牆,存取內網設備
  • 多數資料庫、 mail server 等機敏設備會選擇架在內網

先回看 url 的定義 rfc3986

Image
Image

對於 scheme 的利用

  1. 本地 Image
  2. php 偽協議 Image

gopher

Image

但 gopher 這堂課不會詳細講道,之後再看

檢查 authority 是否合法

目標:成功存取內網的 ip 位置

可能被阻擋的方法

  1. 黑名單 Image

    • 破解方法: Image Image Image

      利用 Domain 混淆 Image

  2. 白名單 Image

    • 破解方法:

      利用 Open Redirect Image https://google.com/amp/moon-jam.me 就會自動轉址到 moon-jam.me Image

  3. DNS 解析後判斷是否合法 Image

    • 破解方法:

      利用 DNS Rebinding Image

      製作 DNS Rebinding 的網站

      上一秒的時候解析是 8.8.8.8 所以不會被擋掉 Image

      但下一秒的時候解析就變成 127.0.0.1 了,就能成功存取內網 ip Image

      orange 做的神奇東西,在不同服務解析出來的結果不一樣 Image

Lab - ssrf 1

用之前介紹的方法,利用 http://0 會被當成 http://localhost ,所以就可以成功存取內網 ip

Image

Lab - ssrf 2

看他的程式碼知道網址的開頭要是 httpbin.dev ,去 https://httpbin.dev 看看有什麼東西,發現了

Image

於是只要使用 https://httpbin.dev/redirect-to?url=http://localhost/internal-only 就可以成功存取內網 ip 拿盪 flag 了

Lab - ssrf 3

這提是用 DNS Rebinding 的方式,但試了好幾次都沒成功,只好來寫個程式以量取勝

1
2
3
4
5
6
7
8
9
10
import requests

url = "http://chall.nckuctf.org:28123/mkreq?url=http%3A%2F%2F7f000001.c0a80001.rbndr.us%2Finternal-only"

while True:
response = requests.get(url)
print(response.text)
if "NCKU" in response.text:
print(response.text)
break

然後跑一下下之後就拿到 flag 了

Front-end Security

除了 XSS 和 CSRF 之外,還有很多其他的酷東西

Image

網頁前端本身的限制,例如說不可能單純透過網頁讓你家的印表機列印東西,需要一個本地的伺服器,讓網頁去戳本地伺服器,再由本地伺服器去戳印表機

So

Image
Image

這個 CVE 只要你點開一個網頁,你的小算盤就會跳出來

Image

或者是很多人用的 electron ,背後其實也算是一個瀏覽器,也有可能被攻擊

XSS

Image

Self-XSS: 只能攻擊自己的 XSS ,但可能可以透過其他攻擊手法造成更嚴重的影響

Image

Blind-XSS: XSS 在不知道甚麼時候可能會被觸發,例如當你把名字改成 XSS payload

有個人把自己特斯拉的名字改成 XSS payload ,有天車壞了拿去送修,結果剛好 XSS payload 被觸發,拿到 10000 USD 的 Bug Bounty

Image
Image

分類

  1. Relfected XSS (Non-persistent XSS) Image Image Image
  2. Stored XSS (Persistent XSS) Image
  3. DOM-based XSS Image

常見 payload

Image Image Image Image

常見 payload - javascript 偽協議

Image

避免 htmlescape

Image
Image
Image

因為 javascript 偽協議可以不包含任何雙引號,所以就可以繞過 htmlescape

常見 payload - innerHTML bitfall

Image Image Image Image

玩 XSS game~

XSS worm

Image

TODO

搞懂那 XSS Lab 怎麼拿到 Flag

參考資料