0x00 題目概述
比賽地址:www.happyctf.org
使用thinkphp框架寫(xiě)的登錄注冊(cè)頁(yè)面。
嘗試注入——無(wú)效
掃描看目錄泄露——存在include,但沒(méi)有得到有用的信息
注冊(cè)登錄成功后會(huì)提示不是管理員,存在admin用戶。
注冊(cè)一段時(shí)間后會(huì)刪除賬號(hào)。
cookie信息有兩個(gè),base64,解碼出來(lái)是亂碼。
flag在哪?
很顯然,flag應(yīng)該是以管理員身份登錄成功后才會(huì)回顯的。
0x01 個(gè)人思路流程
要是管理員身份才能拿到flag的ctf題并不少見(jiàn)
這里要感謝p牛的一篇文章,傳送門(mén):https://www.leavesongs.com/PENETRATION/mysql-charset-trick.html
所以,這里,我們抓包。注冊(cè): admin%c2
是注冊(cè)成功的,然后登陸:
使用用戶名為admin,密碼為我們剛剛注冊(cè)的,并不能成功。
也就是說(shuō),并沒(méi)有重置admin的密碼。
這里有一個(gè)問(wèn)題我也還沒(méi)搞懂,為什么加了%c2之后 可以 一直注冊(cè)成功 ,而不會(huì)提示用戶名重復(fù)。
卡住了,尋找還有什么有用的信息。
這題的一個(gè)關(guān)鍵就是,驗(yàn)證身份是通過(guò)cookie里面的uid來(lái)驗(yàn)證的,是比較常見(jiàn)的base64,所以很自然的想到,是不是我把管理員的uid搞到手,就行了。
要獲取管理員uid,然后替換cookie,第一想到的是把這加密算法搞懂,這里還有一個(gè)username呢,也是base64。
于是接下來(lái)我不停地注冊(cè),觀察用戶名和cookie里面username之間的關(guān)聯(lián)。想要搞懂是則么實(shí)現(xiàn)這加密的,默認(rèn)cookie里面兩個(gè)值加密的方法是一樣的。
沒(méi)有收獲,搞不出他的加密算法。
算是又卡住了。
頁(yè)面停留在抓包頁(yè)面,突然想到,如果我把uid的值替換到username去呢,會(huì)怎樣?如圖


5121
恍然大悟,這就是uid啊,這不就是一個(gè)加密一個(gè)解密函數(shù)么?
我拿管理員的uid去注冊(cè)不久行了么?
什么?管理員的uid只有一位數(shù)?注冊(cè)長(zhǎng)度不夠?
1%c2%c2?
0x02 最后題解
是用形如 1%c2%c2的用戶名去注冊(cè)
注冊(cè)成功后登陸
將登陸成功的得到cookie的username 去替換uid
判斷是不是管理員只是根據(jù)uid來(lái)判斷的,和username無(wú)關(guān)。
這里需要一個(gè)腳本
但我想的是先試了1-10不行再寫(xiě)腳本
試了試 ?到6就出來(lái)了

0x03 總結(jié)
p牛還是6啊
題目挺好的,給出題人一個(gè)贊
怎么說(shuō),沒(méi)有思路是絕對(duì)錯(cuò)的這一說(shuō),只有相對(duì)題目而言的對(duì)錯(cuò)
想了挺長(zhǎng)時(shí)間的,自己太菜了,學(xué)吧!Go ahead!