前言
因為DCTF初賽時運氣好,進了決賽
也很幸運地申請到了各種經費,所以能夠DoubleSigma全隊五個人都出國去羅馬尼亞比賽
這篇文章會大部分著重在羅馬尼亞一個禮拜的記錄
比賽方面的細節會稍微少一點
行程規劃
除了比賽兩天外,其他幾天的行程都是我規劃的
也很幸運地,沒有發生啥重大的突發狀況,基本上所有規劃的行程景點都有走完
(如果有要去城堡參觀,記得注意開放時間)
原本還想塞Sibiu等城市的行程進來,但想說有點趕就改掉了
事後也證實,沒有塞進來是對的,這樣子的行程就很趕了XD
以下是行程的細節:
11/7
- 下午1:10下飛機
- 搭Uber到Airbnb住宿處 (在DCTF會場旁)
- 56.34 Lei
- 隔壁Chicken Staff吃雞 + Mega Image買零食、食材、飲料
- Airbnb廚房DIY Party time
11/8
- 早起DCTF會場集合
- 中午比賽開始
11/9
- 凌晨3~4點比賽中,隊上4/5人回房間睡覺
- 天亮睡飽後,回會場繼續打比賽
- 中午比賽結束
- 回Airbnb放東西+買零食開趴
- 傍晚回會場等比賽結果
- 搭Uber到old town
- 爽吃Caru’ cu bere
- Old town亂晃+拍照
- 搭Uber回去睡覺
11/10
- 早起退房
- 人民宮外圍亂晃拍照
- 搭Uber到North Railway Station搭火車
- Sinaia車站下車
- Peles Castle參觀拍照
- 搭火車到Brasov
- 搭Uber到Airbnb住宿處(廣場中心旁)
- 旁邊餐廳吃飯
11/11
- 早起隔壁餐廳吃早餐
- 黑教堂參觀拍照
- 走到Tampa山下搭纜車
- Tampa山頂拍照
- Brasov市區到處拍拍
- 爽吃KFC
11/12
- 早起退房
- 搭Uber到Brasov火車站
- 寄放行李
- 到2號公車站搭車去布蘭城堡
- 布蘭城堡參觀拍照
- 旁邊餐廳吃飯喝酒
- 回火車站搭車往Bucharesti
- 搭Uber去Airbnb住宿處睡覺
11/13
- 早起退房
- 搭Uber回機場
- 飛荷蘭轉機
- 轉機五小時入境+搭火車到市區亂晃拍照
- 回機場飛台灣
簡易版行程:
DCTF -> Sinia + Peles Castle -> Brasov -> 黑教堂 -> Tampa山 -> Bran Castle -> 荷蘭
換錢
羅馬尼亞的貨幣是Lei
基本上Lei都是到那邊才換,去都只帶歐元
我們是在機場挑了一個聽說匯率不錯的ATM,把歐元換成Lei
其實不用換太多,因為那邊物價蠻低的
換太多的話,回去還要換歐元,有點虧
我只換了1300~1500 Lei
一個禮拜完全用不完,大概只用了一半
(1 Lei = 1 Ron 約等於 7~8台幣)
交通
這邊的交通很恐怖
羅馬尼亞人開車都很兇狠,各種硬超車+迴轉
尤其是他們都開手排車,有時換檔沒換好,整個車震得跟按摩椅一樣
喇叭聲更是此起彼落,懷疑他們根本把喇叭當作油門在按
某天早上睡到一半,還被窗外的喇叭聲叫醒
也很常看到開車開一開就搖下窗戶互罵XDD
然後有些地方的斑馬線不會有紅綠燈
這種他們好像都要強制禮讓行人
所以很常有車子在斑馬線急煞
如果中長距離要搭車的話,非常不推計程車之類的
尤其是火車站旁邊那些主動來招人的
很常聽到各種被坑的案例,例如Lei變歐元計費、每個人都收高額車費…等
最保險的還是Uber,只要卡片有開通國外交易,就能爽爽叫Uber
我這一個禮拜叫Uber花的錢,總共只有184 Lei (相當於台幣1374)
然後一台車可以載2~3個人,所以平均下來其實根本沒花多少錢
如果是跨城市的移動的話,我們是搭IR
火車站可以選擇要買R或IR
不太確定R跟IR確切的區別是啥
不過可以知道的是IR比R快非常多,蠻推薦搭IR的,能省下很多時間
(小插曲: 我們回程時,一開始買成R,後來櫃台很好心的讓我們補差價換IR)
(小插曲2: 我們在首都買火車票時,有兩個看起來壞壞的人(一個高瘦,一個矮胖),很好心協助我們買票,買完還想帶我們去搭車的車廂位置。但由於熱心到有點不太正常,我們後來就拒絕他們帶路了,所以最後還是不知道他們到底是好人還壞人…)
車票非常大張,從Bucharesti坐到Sinaia要39.5 Lei
然後羅馬尼亞都是先上車,後驗票
火車裡面有點類似哈利波特電影中那樣,有的會有一個一個的包廂,很酷
(不小心就黑了售票機)
Sinaia火車站超美
首都的公車有的會長著兩根詭異的天線
羅馬尼亞版Youbike?
治安
其實治安還算不錯,去之前有查了一下資料
大部分都是說要小心路邊的吉普賽人
不過其實我們在那邊也分不太出來哪些是吉普賽人
比較要注意的應該是車站之類的地方,尤其是晚上
我們就遇到一個很奇怪的小孩
一直繞著我們,用很挑釁的語氣跳針說hello
然後比出要錢的手勢
沒看過那麼欠揍的死小孩
其他的話,大部分都還好
比較有趣的是,亞洲面孔走在路上,會非常明顯感受到全世界都在看你
我在想是不是因為比較少亞洲人會到羅馬尼亞旅遊的關係
一開始還以為是大家對亞洲人有惡意還是怎樣的
可是待久發現其實也有沒特別的歧視之類的行為
甚至走在路上,有時候都會有人主動打招呼XD
飲食
在出發去羅馬尼亞之前,我們還很擔心會飲食習慣差太多
結果來了才發現
這裡的食物,不但大部分都超級好吃,還便宜到爆
尤其是農產品、肉類等,價格更是不科學的低
羅馬尼亞沒有啥7-11之類的便利商店,但是有Mega Image之類的雜貨店
我們很多糧食來源都是從那邊買來的
如果要買牛奶的話,唯一推薦ZUZU,爆幹好喝
如果是去餐廳吃飯,要注意它們上菜和點餐時間都拖很久
所以行程很密集的,不建議排餐廳,因為很容易吃1~2小時以上
第一天的宵夜
樓下就是Chicken Staff,所以買了一堆炸雞(雖然店員好像不太友善,但最後還是買到了)
和一堆Mega Image買的牛奶、飲料、披薩、培根
Chicken Staff賣的食物,肉超好吃,很推
比賽會場提供的餐點,他的馬鈴薯泥超好吃,很香
從Mega Image買食材自己煮的早餐
比完賽當天,我們跑去吃了Bucharesti最有名的百年啤酒餐廳 - Caru’cu Bere
店內裝潢得超特別,相機停不下來
裡頭的食物其實大部分都不算貴,大概跟台北一般餐廳價錢差不多
而且好吃,份量又超大
吃到一半,還會有人在樓下跳舞表演,很有趣XD
Caru’cu bere的豬腳,超級浮誇,超級大
一個人根本不可能吃完…
不過是真的很好吃,豬腳皮很酥脆,肉很軟嫩
除非你對自己的食量很有自信,不然建議2~3人分著吃
Caru’cu bere的甜點,超讚
在Brasov廣場旁餐廳點的雞胸肉
Brasov早餐店的棉花糖巧克力牛奶,超級好喝~~
同一間早餐店的英式早餐
公車站旁賣的食物
KFC大餐,可惜沒賣蛋塔(沒蛋塔的KFC根本不是KFC QQ)
Bran Castle旁邊餐廳的雞肉料理
Bucharesti機場的美味甜點
酒
這邊的酒因為很便宜,所以身為酒鬼,來羅馬尼亞後就是各種喝酒
Tampa山的啤酒,爬完山後來一杯冰涼的啤酒超過癮
ursus啤酒 (聽說是羅馬尼亞最流行的酒,應該是羅馬尼亞版的台啤吧)
pina colada,這杯超好喝,Brasov廣場旁餐廳點的
台灣也買的到的蘋果酒,不過因為太便宜了,所以就順手買了好幾瓶XD
Caru’cu bere的自家啤酒,很順口
這杯不是我點的,ddd亂點點到的,一點就點到長島冰茶XD
這杯比我之前喝過的長島冰茶還小杯一點,可是還是很猛
後來被毛哥灌掉惹
Mimosa,喝起來很甜,還不錯喝
不知名的啤酒,被我當早餐喝掉了,味道普普
住宿
這次我們的住宿全部都是訂Airbnb
Airbnb的好處是,價錢很便宜,CP值很高
總共訂了三間
Bucharest兩間+Brasov一間
第一家Bucharest會場旁的最滿意,女房東人很好,很細心的講解每個地方
房子超大也超級美,還帶有文青風
有趣的是,他電梯居然是那種要自己手動拉門關門的那種古老電梯XD
廚房,超棒,各種廚具應有盡有
不知道是不是因為早期共產統治治安不好的關係,這邊的鎖都很多道,複雜到一看就覺得很安全
第二間、第三間,相對就沒那麼好了,甚至連房東本人都看不到,頂多看到管理員
但第二間也超美,地理位置超棒,在Brasov廣場旁邊而已
廁所
羅馬尼亞有些地方的廁所是要收錢的
例如Sinaia車站的廁所、Tampa山纜車旁的廁所都要錢
上廁所還會開這張,看起來像收據的東西
行李寄放
羅馬尼亞的火車站大部分都有寄放行李的地方
像我們去Peles Castle時,行李就是寄放在Sinaia車站(是管廁所收費的阿姨在處理的)
去Bran Castle時,行李就寄放在Brasov車站
景點
人民宮
據說是全世界僅次於五角大樓的第二大建築物
這只是側面而已,正面更寬廣更大
我們繞了30分鐘,還是繞不到它的正面,超大XD
Peles Castle
這是一棟非常美的城堡,非常值得來參觀
Peles Castle的位置在Sinaia車站出來,旁邊的公園一直往上走就到了
我們一開始以為距離很近
結果沒想到爆幹遠,而且又是上坡,走到腳斷掉
最後雖然在表定閉館時間內趕到,但還是沒進去城堡內部參觀,不知道是提早關門還是怎樣的,有點可惜
真心建議想去的人,可以搭計程車或公車、接駁車之類的
還內建網美牆
遇到羅馬尼亞小屁孩校外教學,亞洲人根本被當動物園裡的動物看
隔壁的另一個城堡
黑教堂
真的很大
可以付錢進去參觀的樣子,但我們沒進去
Brasov城市景觀
我們住的地方拍出去的樣子
廣場全景照(中間的人時空扭曲惹)
很歐洲味的樹和房子
不知道啥來頭的城門
山上那一長條就是Tampa山纜車,右上Brasov也是我們有去拍照的地方
摸乳巷
其實就是一條很窄的巷子
Tampa山
Tampa山就是Brasov能看見的最高那座山
上面有一個很大的Brasov牌子 (應該是模仿hollywood)
搭纜車的地方,旁邊有一些賣玉米、爆米花的攤位 (真的有人會想搭纜車或爬山時,吃爆米花嗎?)
纜車很高,其實不想搭纜車也可以徒步爬山上去
上去之後,走一小段路,可以走到Brasov的牌子後面
山上的風景不錯
似乎有機會遇到一些野生動物
大狗
布蘭城堡 (Bran Castle)
吸血鬼的發源地
據說是因為某本小說的背景就是以這棟城堡為背景
然後裡面的德古拉吸血鬼讓這棟城堡因此爆紅
所以附近很明顯的可以感受到商業化的各種吸血鬼裝飾、商品
要先買票
票價
城堡往外看的風景很讚
大砲上頭居然有VOC
城堡內的結構其實有點複雜,上上下下的
傳說中的鐵處女
有一段路會經過一個詭異的狹小步道
整棟城堡布置了很多假蜘蛛絲、蝙蝠、骷髏頭,整個破壞美感
紀念品店賣了很多很中二的東西 (我也手癢買了一個中二杯子)
如果要搭公車回去Brasov,找這個百事可樂就對惹
(上網查資料說要找紅色fastfood招牌,但我們那天去的時候那塊紅色招牌其實收起來,很不明顯)
公車票,是上車時跟司機買的,公車站到Bran Castle票價8 lei
去Bran Castle,搭這班車就對惹,大概40分鐘就到了
然後公車站不是在火車站旁邊那個
要找2號公車站
我們是從火車站搭Uber搭一小段路才到的
荷蘭
我們利用荷蘭等轉機的短短五個小時
迅速入境,然後買車票,衝往Amsterdam Central亂晃
攻略:
下飛機後,順著指示,往Arrival hall走
然後入境,入境有可能會問你要幹嘛之類的,然後轉機的話通常有兩張機票,要給他看
我是直接跟他說我要去拍個照,他就放我進去惹
一入境後,應該會看到一堆黃色機器,那個就是火車票販賣機,可以投歐元硬幣或刷卡買票,建議買當天來回比較方便
接著往exit走,會看到很大的大廳,大廳中央就是通往地下火車站的手扶梯
下去之後就看準方向搭車就行,車還蠻密集的,搭到Amsterdam Central大概10幾分鐘
比較可惜的是,因為時間有點趕,所以比較沒看到那些荷蘭特有的coffee shop或紅燈區
不過路上不時都飄著大麻味就是惹…
Amsterdam Central車站
這裡景色美到像一幅油畫
荷蘭街道
奇怪的店
如果要去Amsterdam Central,記得在機場買票
可以找黃色的自動售票機,買來回票(Day return)
理論上進出站都要刷,但我們進站都沒刷,也不會有啥問題
機場內
貓
不知道為啥,羅馬尼亞超多貓的,感覺都是野貓
那就放幾張貓咪照吧
一直討食物的黑白貓
很兇的看門貓
peles castle旁不知道在幹嘛的黑貓
其他
羅馬尼亞夾娃娃機
很多車子後面都會長香菇
熟悉的Logo(?)
我們在Tampa山挖出一塊磚頭
一群在火車站要錢的死小孩
這是一個充滿塗鴉的國家
DCTF Final
DEFCAMP的規模其實比想中的小很多,大概比HITCON再小一點(吧
完全沒有想逛的衝動,跟DEFCON差好多
比賽場地在Hacking Village的二樓
比賽時間只有24小時
所以大部分隊伍幾乎都不睡覺
但我們隊因為住非常近,所以半夜時就回住宿處睡飽飽
題目的話,感覺除了Binary外品質還行
Web的話,兩題黑箱,一題PHP
PHP題的話,考最近蠻常見的非英數字webshell變形
不過我還是卡了一段時間,腦袋真的快生鏽惹
細節可以看我的Writeup
另外兩題黑箱,一題是Laravel寫的Ticket system
可以註冊帳號,然後從原始碼可以看到Ticket debug連結
進去之後,可以拿到ticket
ticket上面會有一串看起來像某種編碼的亂碼 (所以我一開始以為是Crypto Web,踹了許久,還去翻Laravel Source…)
後來發現ticket id好像不太對勁
id加一個單引號 => 噴500
id加兩個單引號 => 正常
id加三個單引號 => 噴500
然後踹幾個關鍵字,會發現噴waf error
基本上就可以確定是SQL Injection之類的題目了
只是他擋蠻多東西的,踹了很久才踹出來
用Boolean based SQL Injection加上猜欄位名就爆出來惹
而另外一題黑箱Web
他只有一個上傳介面,給你上傳Word, xlsx, …等文件格式,會轉成PDF
一開始還以為是GhostScript老梗
後來官方給提示才知道,原來是Libreoffice CVE-2018-6871
可以讀檔,然後用DNS把資料往外傳 (http被防火牆擋)
但最後官方題目好像爛掉,本地成功讀檔,遠端沒辦法復現
然後就一直爛到比賽結束都沒修好,0隊解,囧
另外,區塊鍊的題目,有跟隊友一起解
解法超有趣 (我們是莫名其妙解出來後,才搞懂解法的XDD
它居然考Structure未初始化,預設是Storage,然後就可以覆蓋原本Storage的變數,達到繞過的效果
算是我這次比賽最愛的一題吧XD
最後比賽結束時,好像官方不允許Remote Support
(但他題目沒擋外部連線)
所以把非會場IP提交的FLAG,都當作非法FLAG
我們就變第五名惹XD
真的還好我們隊全隊就真的只有五個人,想Remote Support都無法
(人生第一次覺得人少是一件值得高興的事…)
其他隊就真的很慘QQ