0ops探祕
偶然打開[0ops](http://www.0ops.net/)的網站,頓時被炫酷的外表所吸引到,遂有了想找到flag的 念頭。
首先網頁上只有一個shell,簡單測試了幾個命令,都沒有什麼用。於是直接查看源代碼。發現shell其實是 一個來自cli的iframe。所以直接跳到cli查看它的源代碼。看過 源代碼以後發現所有的trick都源自一個js文件,OK, 集中精力去看這個js文件。
文件太長,沒有仔細看。大致找到了以下代碼片段:
$(document).konami(function(){function a(b){b.css("position","relative");return window.setInterval(function(){b.css({top:getRandomInt(-3,3),left:getRandomInt(-3,3)})},100)}if(konamiCount==0){$("#screen").css("text-transform","uppercase")}else{if(konamiCount==1){$("#screen").css("text-shadow","gray 0 0 2px")}else{if(konamiCount==2){$("#screen").css("text-shadow","orangered 0 0 10px")}else{if(konamiCount==3){a($("#screen"))}else{window["\x65\x76\x61\x6c"](Terminal["\x72\x75\x6e\x43\x6f\x6d\x6d\x61\x6e\x64"](unescape("%63%75\x72%6c%20%66%6c\x61%67%5f\u0069%73%5f%6e\x6f%74\u005f\u0068%65%72%65")))}}}}$("<div>").height("100%").width("100%").css({background:"white",position:"absolute",top:0,left:0}).appendTo($("body")).show().fadeOut(1000);if(Terminal.buffer.substring(Terminal.buffer.length-2)=="ba"){Terminal.buffer=Terminal.buffer.substring(0,Terminal.buffer.length-2);Terminal.updateInputDisplay()}Terminal.god=true;Terminal.sudo(true);konamiCount+=1;
以下有兩種方法突破:
一、尋找konami之後發現了一個數組:
[38,38,40,40,37,39,37,39,66,65]
在文件開頭找到對應的key爲:上上下下左右左右BA。重複按鍵4-5次shell就會變化並顯示:
CURL FLAG_IS_NOT_HERE
再下面就是目標字符串。
二、從上面那段代碼片段裏面發現一串被編碼的字符"%63%75\x72%6c%20%66%6c\x61%67%5f\u0069%73%5f%6e\x6f%74\u005f\u0068%65%72%65"
解密後發現就是FLAG_IS_NOT_HERE
,然後直接進入鏈接:http://www.0ops.net/flag_is_not_here
得到目標字符串:
以上兩種方法均可得到目標字符串是:
emxpYi5kZWNvbXByZXNzKCd4nLPTpgrQsyFdi50uBtDDpg63ndiMwAVwGoPFYEzNNrp6dpjOwVQIVU6WC3CZBtcPAIrcScYnKQ==
大致掃了一眼是base64加密,解密後得到:
zlib.decompress('x\x9c\xb3\xd3\xa6\n\xd0\xb3!]\x8b\x9d.\x06\xd0\xc3\xa6\x0e\xb7\x9d\xd8\x8c\xc0\x05p\x1a\x83\xc5`L\xcd6\xbazv\x98\xce\xc1T\x08UN\x96\x0bp\x99\x06\xd7\x0f\x00\x8a\xdcI\xc6')
括號裏面是一堆亂碼,搜了一下zlib發現這是一段python代碼,用zlib壓縮了一串什麼東西。直接用python 的eval函數執行解壓的結果會報錯,調試了好久之後發現要這樣運行:
import zlib
compress = b'x\x9c\xb3\xd3\xa6\n\xd0\xb3!]\x8b\x9d.\x06\xd0\xc3\xa6\x0e\xb7\x9d\xd8\x8c\xc0\x05p\x1a\x83\xc5`L\xcd6\xbazv\x98\xce\xc1T\x08UN\x96\x0bp\x99\x06\xd7\x0f\x00\x8a\xdcI\xc6'
decompress = zlib.decompress(compress)
解壓之後得到了一坨鬼:
>++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++.<+++++++++++++++++++++++++++++++++++++++++++++++++.>------------------.+++++++++++++++++++.++++++++++++++++++++++++.<.>------------------------------------------.++++++++++++++++++++++++++++++++++++++++++.-----------------.<-.>++++++.+++++++++++.-----------------------.---------------------.+++++++++++++++++++++++++++++++.-------------------------------.
問學長知道這是brainfuck,然後上網找了個brainfuck在線解釋器,運行得到flag:
F14G_15_N0T_H3R3
Crack it! 天知道黑客是不是都喜歡把字母寫成數字,但是無論如何折騰一萬上總算把答案解出來了。
Comments