進去後發現就乙個輸入框,提示我們輸入flag{}
不過輸了後沒反應,那麼審查元素看看
可以發現是呼叫的ctfshow()這個函式
在chrome的console視窗除錯下這個函式看下它幹嘛的
格式化下**方便審計
可以發現這是把js**變數名16進製制編碼後再把**邏輯複雜化
好我們來讀下這串**:
首先定義乙個變數_0x4d832a
值為乙個字典{}
字典裡有乙個鍵值對
鍵為'atkul'
值為乙個函式,其作用就是把傳來的值return回這個值的函式
用人話來講就是呼叫乙個函式
到下面這串_0x4d832a[a0_0x138e('0x5')](我們);
就是乙個字典呼叫,啥你問a0_0x138e('0x5')是啥??
問console
ok到這先好好理解上面這串最簡單的加密邏輯,因為後面這整個js都是這玩意
js指的就是這玩意,套著script的皮卻是css的字尾,佛了
理解完後就可以往下跟進了
也就是跟進我們()這個函式
ok跟進到這如果理解清楚上面說的,那麼就能很清楚第一行就是定義乙個字典
裡面的值先不細看
往下看是一堆變數,然後到乙個判斷
那麼從判斷開始一步一步往上推
兩個值_0x491b2b=呼叫_0xd8e338['uivft']這個函式,傳遞的值為getencodestring,_0x35b4d3[a0_0x138e('0xa')(0x0, 0xd)
這裡有三個函式,第二個看名字就知道幹啥的就不跟進了
第乙個就是呼叫上面字典的uivft值
就是把傳進來第二個的值當作第乙個值的實參
人話講就是getencodestring(_0x35b4d3[a0_0x138e('0xa')](0x0, 0xd))
ok那看最後乙個函式,先把16進製制轉成10(方便看)
getencodestring(_0x35b4d3[a0_0x138e('10')](0, 13))
接著看a0_0x138e('10')這個是啥就行了
放到console
這意思很明顯了,繼續往上找_0x35b4d3這個變數
跟上面用的一樣的方法a0_0x138e('0xa')也就是呼叫substr函式
繼續找_0x1f7275
反轉字串_0x1ef9ff,繼續
把兩個引數相加
這兩個引數等於
很明顯就是把getencodestring(_0x6ab3ec)+hex_md5(_0x6ab3ec)
那麼重要的就是搞清楚這個_0x6ab3ec是啥
也就是說獲取頁面輸入的getencodestring(reversestr(flag再進行兩段加密之和))
邏輯很清楚了,就是把我們輸入的flag和flag進行比較
那麼我們找到比較的這個變數就ok啦
和上面一樣的審計方式
加密後的flag找到!
那麼按照我們輸入的加密邏輯逆過來就能解密了
getencodestring(reversestr("2xsrn72z4wurn7k5ewp5nx3x6w**m72z4wxbn33zcgwzm"))
就差最後一步了getencodestring("mzwgcz33nbxw4z27mjqw6x3xn5pwe5k7nruw4z27nrsx2")
因為這是encode的函式,所以得跟進去看怎麼加密(出題人沒給decode,當時看到這一大串.以為要自己手寫,心態蹦了...)
我們可以試試用這函式加密看得到的密文是怎樣的
什麼!!?竟然是mzwgczy,
s這不就是base32嗎!!!
......好了不裝了老實分析下getencodestring吧
好了我分析完了發現是base32加密
你呢?最後解密就得到flag啦
ctfshow 紅包題第九彈 ssrf
放在剛才抓包u sss returl 後面,直接放鬆是不可以的,要url編碼 現在就用蟻劍連線 官方解釋gopher協議 gopher是internet上乙個非常有名的資訊查詢系統,它將internet上的檔案組織成某種索引,很方便地將使用者從internet的一處帶到另一處。在www出現之前,go...
ctfshow 紅包題 武穆遺書
其中buffer是你輸入的,和v4進行比較。v4首先是指向堆中的乙個指標,後來sub 401390對v4中寫值。然後就是各種亂七八糟的加密了。這個時候我就想,我能不能直接拿到比較的時候v4指向的內容是什麼呢?我就想到了od,拖進去發現不能除錯,應該是加了反除錯,我又試了試xdbg,發現也打不開。然後...
小李飛刀 刷題第四彈!
time 2019 02 01 昨晚其實刷了題來著,但是沒有解出來,哭泣!但是,今天重新寫了下,解出來咯 所以今天的題量要增加咯 我會加油的!14.最長公共字首 難度 簡單 編寫乙個函式來查詢字串陣列中的最長公共字首。如果不存在公共字首,返回空字串 我的解題 如下 class solution de...