IThome 2024 鐵人賽 一直刷 CTF - Day16
前言
本日進度:
上課紀錄
Path Traversal
Intro

像是類似這樣的網址,如果把 ?file=report.pdf
改成 ?file=../../../../etc/passwd
就有可能得到一些機密資料
How to Happen

常用來被攻擊的路徑

其他可以參考 這邊
防禦方式
- 強制加上副檔名
(可以在後面加上 Null Byte
%00
來繞過,但在 php5.4 已經被修掉了) - 確認路徑前綴
Lab - Pathwalker
到網頁之後她會很好心的告訴你 Flag 的位置,然後你可以用 Path Traversal 的方式去找到 Flag 了
Lab - Pathwalker - waf
這題有塞了一個正則表達式的 WAF /^apple|banana|cappo$/
但其實是有漏洞的,他只要符合
- apple 開頭
- 包含 banana
- 結尾是 cappo
其中一個就算符合 (正確應該是 ^(apple|banana|cappo)$
) ,所以就能很輕鬆地繞過了
LFI (Local File Inclusion)

用 include 表示他會自動把檔案 parse ,假設 include 的是 php 就會自動 parse 成 php 的東西 (如果本來某個路徑的東西是不能拿的,就可能可以用 LFI 拿到,就像下面這樣)
parse 之後有可能會讓一些東西不見,就像是註解的內容,這時候可以用 php 偽協議把內容轉成 base64 ,然後再解碼就可以看到原本的內容了
格式: php://filter/{read= / write= / <empty>(自己決定要讀檔還寫檔)}convertor}/resource=<file_path>
convertor: string.rot13, convert.base64-encode, convert.base64-decode, zlib.delate… 參見 這邊
如果有多個 convertor ,就用 |
來串起來
Lab - lfi
將 flag.php 用 base64 列印 (?page=php://filter/convert.base64-encode/resource=flag
) 出來之後再解密就能得到 Flag 了
Lab - lfi2rce
這題要取得在根目錄的 Flag ,直接偷 別人寫好的 webshell 來串起來用就可以了,因為他用的是 eval
所以要用 system
來執行 linux 指令,所以只要在後面加上 &1=system('ls /')
然後 `&1=system (‘cat {flag 名稱}’) ,就解出來了~