偶然打開[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! 天知道黑客是不是都喜歡把字母寫成數字,但是無論如何折騰一萬上總算把答案解出來了。