A World Restored & A World Restored Again
A World Restored
Description:
nothing here or all the here ps:flag in admin cookie
flag is login as admin
URL http://messbox.2017.hctf.io
Now Score 674.44
Team solved 7
A World Restored Again
Description:
New Challenge !!
hint: flag only from admin bot
URL http://messbox.2017.hctf.io
Now Score 702.6
Team solved 6
A World Restored在出題思路本身是來自于uber在10月14號公開的一個漏洞https://stamone-bug-bounty.blogspot.jp/201...,為了能盡可能的模擬真實環境,我這個不專業的Web開發只能強行上手實現站庫分離。
其中的一部分非預期,也都是因為站庫分離實現的不好而導致的。(更開放的題目環境,導致了很多可能,或許這沒什么不好的?
整個站的結構是這樣的:
1、auth站負責用戶數據的處理,包括登陸驗證、注冊等,是數據庫所在站。
2、messbox站負責用戶的各種操作,但不連接數據庫。
這里auth站與messbox站屬于兩個完全不同的域,受到同源策略的影響,我們就需要有辦法來溝通兩個站。
而這里,我選擇使用token做用戶登陸的校驗+jsonp來獲取用戶數據。站點結構如下:

簡單來說就是,messbox登陸賬號完全受到token校驗,即使你在完全不知道賬號密碼的情況下,獲取該token就可以登陸賬號。
那么怎么獲取token登陸admin賬號就是第一題。
而第二題,漏洞點就是上面文章中寫的那樣,反射性的domxss,可以得到服務端的flag。
為了兩個flag互不干擾,我對服務端做了一定的處理,服務端負責處理flag的代碼如下:
$flag1 = "hctf{xs5_iz_re4lly_complex34e29f}";
$flag2 = "hctf{mayb3_m0re_way_iz_best_for_ctf}";
if(!empty($_SESSION['user'])){
if($_SESSION['user'] === 'hctf_admin_LoRexxar2e23322'){
setcookie("flag", $flag, time()+3600*48," ","messbox.2017.hctf.io", 0, true);
}
if($_SESSION['user'] === 'hctf_admin_LoRexxar2e23322' && $_GET['check']=="233e"){
setcookie("flag2", $flag2, time()+3600*48," ",".2017.hctf.io");
}
}
可以很明顯的看出來,flag1是httponly并在messbox域下,只能登陸才能查看。flag2我設置了check位,只有bot才會訪問這個頁面,這樣只有通過反射性xss,才能得到flag。
下面我們回到題目。
2017HCTF-Writeup