"KEY Finding"이라는 글자만 덩그러니 나와있고...


<!-- Hint : 橇肺弊贰赣狼 肋给等 家胶归诀 嚼包 -->

<!-- Hint : The programmer's bad habit of backup source codes -->


주석을 보니 프로그래머의 나쁜 습관으로 백업파일이 있다는거 같은데..


저 위에 한자는 도대체 무슨 의미인지 모르겟네요..



아무튼 문제를 푸는데 URL창을 이용하셔야 합니다.


소스코드에는 아무런 단서가 없으니 소스코드에서 무언가를 해낼 수는 없으리라 보입니다.


백업파일이라고 했으니 .swp .zip .tar .. 이런 종류의 확장자가 생각나게 됩니다.


그래서 본 URL에 다음과 같이 다양하게 시도해 보았습니다.



   http://suninatas.com/Part_one/web13/web13.asp.swp

   http://suninatas.com/Part_one/web13/web13.asp.zip

   http://suninatas.com/Part_one/web13/web13.asp.tar



하지만 페이지 오류라고 나오고 실패하게 됩니다.

그러다 아래와 같이 "asp"를 지우고 해보니까 파일이 하나 다운로드가 되었습니다!


   http://suninatas.com/Part_one/web13/web13..zip


파일에는 다음과같이 암호가 걸려있으며 압축 비밀번호는 4자리 정수라고 나와있으니 


툴이나 알집 자체 기능을 이용해서 쉽게 알아낼 수 있을 것 같습니다.


최근 버전 알집에는 제공을 하고있지는 않고 7.13 버전까지는 지원이 되는거 같습니다.


저는 그래서 알집 버전을 다운그레이드시키고 사용해봤습니다.



4자리 정수라고 했으니 다음과같이 설정하면 2초만에 결과 같이 나오게 됩니다.


다음과 같이 4개의 사진과 1개의 txt파일이 나오게 됩니다.


txt 파일 내용은 4개의 사진에서 각각 키값을 찾아 모두 합치면 된다고 합니다.



HxD 툴을 이용해서 확인해보시면 바로 눈에보이게 키값을 알려줍니다. 









[뒷말]

橇肺弊贰赣狼 肋给等 家胶归诀 嚼包 

이 한자가 무슨의미인가해서 다른 분들 블로그를 가봤는데... 인코딩 문제였던건지 한글로 잘 나와있었네요..

진짜 저거 때문에 무슨말인지 몰라서... 엄청 해맸는데 ㅜ


[참고]

알집 7.13 암호찾기: http://need-jip.tistory.com/182

'WarGame > SuNiNaTaS' 카테고리의 다른 글

SuNiNaTaS_17 [MISC]  (0) 2018.09.12
SuNiNaTaS_28 [FORENSIC]  (0) 2018.09.12
SuNiNaTaS_11 [BINARY]  (0) 2018.09.09
SuNiNaTaS_10 [BINARY]  (0) 2018.09.08
SuNiNaTaS_4 [WEB]  (0) 2018.09.07

binary 문제로 리버싱을 통해 해당 키값을 얻으면 됩니다.



"x86dbg" 를 사용했습니다.


앞선 문제와 같이 SuNiNaTaS는 문제를 풀었을때 "Congratulation!"이라는 문구가 나오기에 해당 문구를 검색해서 찾습니다.



[0045035A]에서 점프문으로 어떤 비교한 값이 같아야 점프가 되지않아 성공하게 됩니다.

비교하는 값은 바로 위 코드인 [00450355]에서 비교하게 됩니다.


해당 구문에 breakpoint를 걸어놓고 임의의 값을 입력해 실행해 봅니다.



"1234"라는 값을 입력해서 진행해보니 바로 눈에 띄게 알맞은 값과 키값이 보이게 됩니다..


확실하게 하기위해 해당 함수안으로 진입해봅니다.



함수안에서 보시면 입력한 값인 "1234"와 edx에 들어있는 값을 비교하는 구문이 보입니다.

[0040460F]에서 비교를 하여 같으면 [004046A6]으로 점프하여 함수를 벗어나게 됩니다.


edx에 입력되어있는 값을 프로그램에 입력해보면 "Congratulation"이라는 창으로 인증 키값이 나오게 됩니다.



'WarGame > SuNiNaTaS' 카테고리의 다른 글

SuNiNaTaS_28 [FORENSIC]  (0) 2018.09.12
SuNiNaTaS_13 [MISC]  (0) 2018.09.11
SuNiNaTaS_10 [BINARY]  (0) 2018.09.08
SuNiNaTaS_4 [WEB]  (0) 2018.09.07
SuNiNaTaS_9 [BINARY]  (0) 2018.09.07

Binary 문제입니다.

파일을 다운로드 받으면 간단한 프로그램이 하나 나오게 됩니다.


"OK" 버튼을 누르면 "Try again!" 이라는 메시지가 나오게 됩니다.

무슨 값을 입력해도 나오게 됩니다. 적당한 값을 찾아야 할 것으로 보입니다.


이번에는 IDA 라는 디버깅 툴로 문제를 풀어봤습니다.


처음에 EXE 파일이기에 "MS-DOS executable (EXE)"로 파일을 열어봤는데 packing 되어있다고 합니다...

그래서 제대로 된 디버깅을 할 수 없었습니다.


그러던 중 다른 type으로 열어볼까 해봐서 "Microsoft.Net assembly"로 파일을 열어봤습니다.



Packing이 되어있어서 제대로 확인할 수는 없었지만 다음과 같이 인증 키값이 보입니다.

해당 인증키로 프로그램에 어떤 역할을 하진 않았지만 문제 인증에는 성공했습니다.



아직 디버깅에 익숙하지도 않고 특히 IDA에 더더욱 익숙하지 않아.. 제대로된 설명을 못해드립니다 ㅜ



[풀이 이후]


문제의 인증키의 내용중에  "peid"라는 말이 있었습니다.


peid는 바이너리 분석 툴로서 프로그램이 어떤 언어로 제작되어있는지 패킹은 어떤 방식으로 했는지


리버싱 전에 사전에 확인할 수 있는 툴이라고 합니다.


해당 프로그램을 peid로 열어보면 c#으로 만들어져 있다고 나와있습니다.


"microsoft visual c# / basic .net decompiler" 라고 구글에 검색을 해보시면 dotpeek라는 프로그램이 나옵니다.

해당 프로그램을 다운로드 받고 파일을 열어보면 c#코드가 깔끔하게 보이게 됩니다.



해당문제의 요점은 디버깅을 시작하기전에 peid로 어떤 언어로 만들어졌는지 확인하고 


그 언어에 맞는 디버깅을 해보라는 내용 같습니다..



'WarGame > SuNiNaTaS' 카테고리의 다른 글

SuNiNaTaS_13 [MISC]  (0) 2018.09.11
SuNiNaTaS_11 [BINARY]  (0) 2018.09.09
SuNiNaTaS_4 [WEB]  (0) 2018.09.07
SuNiNaTaS_9 [BINARY]  (0) 2018.09.07
SuNiNaTaS_7 [WEB]  (0) 2018.09.07

문제를 보면 "Point", "User-Agent", "Auth Key"가 있습니다.


우선 눈에 보이는 "Plus" 버튼을 계속 누르면 숫자가 하나씩 증가합니다.


그러다가 25가되면 alert창이 뜨면서 더이상 증가하지 않습니다.



좀더 정보를 얻기 위해 소스보기를 하시면 주석으로 <!-- Hint : Make your point to 50 & 'SuNiNaTaS' --> 가 있습니다.


50 Point를 만들라는 것은 알겠는데 'SuNiNaTaS'는 왜 있는걸까요..?


프록시 툴로 포인트를 강제로 50으로 바꿔봐도 제대로 수행되지 않아서 막혀있었습니다.


근데 뜬금없이 "User-Agent"를 왜 보여주는 걸까요?? 분명 이것도 이유가 있어서 보여주는 것일 껍니다.


현재 "User-Agent"는 사용자의 브라우져에 따라 값이 다르게 됩니다. 이 값을 힌트에 나와있는 'SuNiNaTaS'로 바꾸면 될듯합니다.




"User-Agent'를 바꾸는데는 다양한 방법이 있을테지만 저는 Chrome에서 있는 기능을 사용하려고 합니다.


크롬 확장프로그램에 User-Agent Switcher for Chrome 이라는 확장 프로그램이 있습니다.


이 프로그램은 "User-Agent"값을 조작해서 다양한 브라우져를 사용하는 것 같은 효과를 줍니다.


"설정" 탭에서 추가로 "SuNiNaTaS"라는 값을 만들어 사용해 봅니다.



다음과 같이 값이 "SuNiNaTaS"로 변한게 보이실 겁니다.


이제 "Plus" 버튼을 누르면 alert창이 뜨지않고 값이 오르게됩니다.



그렇게 50까지 Point가 오르게 되면 다음과 같이 인증키 값이 나오게 됩니다.



'WarGame > SuNiNaTaS' 카테고리의 다른 글

SuNiNaTaS_11 [BINARY]  (0) 2018.09.09
SuNiNaTaS_10 [BINARY]  (0) 2018.09.08
SuNiNaTaS_9 [BINARY]  (0) 2018.09.07
SuNiNaTaS_7 [WEB]  (0) 2018.09.07
SuNiNaTaS_21 [FORENSIC]  (0) 2018.09.06

제가 리버싱은 잘 못해서 해석이 매끄럽지 못합니다...


저는 x86dbg를 사용했습니다. Ollydbg랑 매우 유사합니다.


해당 파일을 다운로드 받으시면 간단한 프로그램이 하나 나오게 됩니다.



"Click!"버튼을 눌러도 아무런 응답이 없습니다.


어쨌든 알맞은 값을 입력해야 해결이 될꺼라 생각합니다.



우선 모든 문제를 풀었을때 "Congratulation!"이라는 문구와 함께 해결된 것을 알기에


문자열 찾기를 통해서 다음 문자열을 찾을 수 있었습니다.



문자열을 찾으셨으면 우클릭으로 해당 어셈코드로 이동해서 분석을 시작하면 될 것 같습니다.



사실 지금 눈으로 봐도 답이 보이긴 합니다.. ^^


분석을 시작해보면 "Congratulation!"이라는 문자열이 나오게 하려면


[0045033D] 부분에 jne 를 통과해야 합니다. ( jne 비교하는 문자열이 같지 않으면 점프 )

입력한 값과 프로그램 내부에서 설정된 값이 동일해야 이 jne 문을 통과해 답이 해결되는 것 같습니다.



임의의 문자열 "1234"를 입력하고 진행해 보겠습니다.


[0045032A] 부분의 함수안에서는 사용자가 입력한 값을 불러오는 역할을 수행했습니다.



실질적으로 비교하는 함수는 [00450338] 에서 수행하므로 함수 내부로 진입해봅니다. ( F7은 내부로 이동, F8은 함수 내부x )



내부로 들어가 보시면 eax에는 입력한 값 "1234"가 들어있고 edx에는 프로그램에서 설정한 값인 "913465"가 있습니다.

이 두값을 비교해 같으면 [004046A]로 점프하여 진행되고 값이 같으니 함수밖을 나가서 점프문이 실행되지 않고 넘어가게 됩니다.



해당 키 값을 인증 페이지에서 인증하시면 됩니다.


간단한 리버싱 문제였습니다... 아직 리버싱에 익숙하지 않아서 매끄럽지 못하네요 ㅜ.

'WarGame > SuNiNaTaS' 카테고리의 다른 글

SuNiNaTaS_10 [BINARY]  (0) 2018.09.08
SuNiNaTaS_4 [WEB]  (0) 2018.09.07
SuNiNaTaS_7 [WEB]  (0) 2018.09.07
SuNiNaTaS_21 [FORENSIC]  (0) 2018.09.06
SuNiNaTaS_15 [FORENSIC]  (0) 2018.09.06

아이유 사진이 나와있습니다.


쭉 내리다보면 "Yes" 버튼이 있고 마지막에는 윤아 사진이 있습니다.


"Yes" 버튼을 눌러보면 너무 느리다는 alert창과 함께 실패하게 됩니다.


소스코드에 주석을 확인해 보시면 <!-- Hint : Faster and Faster --> 라고 되어있습니다.


"Yes"버튼을 빨리 누르라는 의미겠죠?




javascript로 다음과 같이 입력하면 버튼을 누를 수 있게 됩니다.


하지만 "submit"이 정의되지 않았다는 메시지와 함께 Error가 발생합니다.


구글에 검색해보시면 페이지가 전부 로드되기전에 찾으려고 하니깐 Error가 발생한다고 합니다.

(이것때문에 고생...많이했는데 ㅜㅜ)



그래서 Python으로 코드를 작성하고자 합니다.

Python에는 requests라는 모듈이 있는데 Post/Get 방식으로 데이터를 전송할 때 편리합니다.


"Yes" 버튼을 누르게 되면 "Do U Like girls?" 이라는 메시지가 post 방식으로 보내지게 됩니다. 해당 URL로 보내집니다.

그렇기 때문에 보낼 data도 함께 작성해줍니다.


1
2
3
4
5
6
7
import requests
 
cookies = {'YourCookie':'YourCookieValue'}
data = { 'web07':'Do U Like girls?'}
 
res = requests.post('http://suninatas.com/Part_one/web07/web07_1.asp', data=data, cookies=cookies)
print(res.text)
cs


이렇게 작성해주고 실행을 시키면 다음과 같은 결과가 나오게 됩니다.

실패를 했는데 이유가 무엇일까요...



먼저 우리가 풀려고하는 문제 페이지를 띄워야 되는 것을 알게 되었습니다. (약간의 힌트..)

그래서 get방식을 이용해서 해당 페이지를 먼저 로드한 이후 보냈더니 성공하게 되었습니다.


1
2
3
4
5
6
7
8
import requests
 
cookies = {'ASPSESSIONIDAQDTQQDT':'DHIJMHABAEOGDAOKHEIKGLCP'}
data = { 'web07':'Do U Like girls?'}
 
requests.get('http://suninatas.com/Part_one/web07/web07.asp', cookies=cookies)
res = requests.post('http://suninatas.com/Part_one/web07/web07_1.asp', data=data, cookies=cookies)
print(res.text)
cs





[성공 후]


다른 사람들은 어떻게 풀었나 봤더니.. javascript도 충분히 풀수 있었더군요.

개발자도구에서 Console창에 다음과 같이 입력하면 풀이가 되었습니다.


location.href로 먼저 페이지를 로드하고 이후에 빠르게 document.frm.submit()을 해주면 풀이가 되었습니다.


어떤사람은 document.frm.submit()만 해도 Error 없이 성공 했던데... 이유가 무엇일까요?


1
2
location.href='http://suninatas.com/Part_one/web07/web07.asp'
document.frm.submit()
cs


'WarGame > SuNiNaTaS' 카테고리의 다른 글

SuNiNaTaS_4 [WEB]  (0) 2018.09.07
SuNiNaTaS_9 [BINARY]  (0) 2018.09.07
SuNiNaTaS_21 [FORENSIC]  (0) 2018.09.06
SuNiNaTaS_15 [FORENSIC]  (0) 2018.09.06
SuNiNaTaS_3 [WEB]  (0) 2018.09.06

사진 속을 잘 들여다보면 인증 키 값이 살짝살짝 보입니다.


하지만 자에 있는 글씨 덕분에 보이지 않습니다.


어떻게서든 파일속에서 키값을 찾으면 되리라 판단됩니다.



사진을 다운로드 받고 HxD로 열어보고 찾아보겠습니다.


맨 마지막까지 봐도 특별한건 보이지 않습니다.


한가지 이상한건 jpeg의 파일 시그니처인 FF D8이라는 문자열이 상당히 많이 보였으며


형식도 반복된 것을 알게 되었습니다.




아래와 같이 FF D8 이 보이며 이 파일 속에 몇가지 사진이 더 숨겨져 있다고 생각되어


해당 부분부터 맨 밑까지 복사하여 새로운 파일을 만들어 냅니다. (monitor2.jpg)





아래 사진은 맨 밑쪽에 값들로 새로 만든 파일입니다.


처음에 보던 사진이랑 자의 위치가 다르고 안보였던 몇몇 부분이 명확하게 보이게 됩니다.


[monitor2.jpg]



"monitor2.jpg" 를 제외한 파일에서 새로 "FF D8'를 찾아 해당 값으로 새로운 파일을 만들면


다음과 같이 자의 위치가 조금 틀리게 되며 안보였던 맨 앞부분 키값을 얻을 수 있게 됩니다.


[monitor3.jpg]



이 문제처럼 사진이 한개뿐이여도 그안에 여러 사진이 존재할 수 있으며 파일이나 문자열을 사진 속에 숨길 수 있습니다.


물론 파일 같은 경우에는 용량이 크다면 만들어진 사진 용량이 그만큼 커져 의심을 받게 되지만


약간의 문자열 정도는 티가 안나기 때문에 잘 숨긴다면 충분히 감출 수 있게됩니다.


이것을 "스테가노그래피"라고 부릅니다.




[뒷말]


"스테가노그래피"에는 다양한 방법이 있는데 그중에서 사진은 RGB라는 값으로 이루어져 있는데 


그중 LSB(Least Significant Bit)를 이용해서 숨기는 방법이 있습니다. 


RGB값의 마지막 bit값을 이용해서 숨기는 방법인데 마지막 bit값이 변하더라도 눈으로 보기에는 큰 차이를 느낄 수 없어 이용하는 방법입니다.


문자열이나 파일을 2진화 시켜서 LSB마지막 bit에 정해진 위치에 넣게되면 숨겨지게 됩니다.


그밖에 여러가지 방법이 존재하므로 한번쯤 만들어봐도 재밌을꺼 같습니다^^


(한번 해봤는데 재밌었습니다^_^)

'WarGame > SuNiNaTaS' 카테고리의 다른 글

SuNiNaTaS_9 [BINARY]  (0) 2018.09.07
SuNiNaTaS_7 [WEB]  (0) 2018.09.07
SuNiNaTaS_15 [FORENSIC]  (0) 2018.09.06
SuNiNaTaS_3 [WEB]  (0) 2018.09.06
SuNiNaTaS_19 [FORENSIC]  (0) 2018.08.23

음악을 좋아햐나고 하면서 파일안에 인증키가 있다고 합니다.


"Play the Music"을 누르시면 [나비-다이어리] 라는 노래가 나옵니다.


우선 파일에 인증키가 있다고하니 다운로드 받고 확인을 해야할 것 같습니다.



조금 황당했지만.. 사진이나 동영상 같은 파일들은 


메타데이터라는 값으로 저작권이나 여러 설명들을 파일에 기록할 수 있습니다.


이 문제 역시 메타데이터 속에 인증키가 있었습니다.


HxD로 풀어야할줄 알았더니... 괜한 고생이였네요



'WarGame > SuNiNaTaS' 카테고리의 다른 글

SuNiNaTaS_7 [WEB]  (0) 2018.09.07
SuNiNaTaS_21 [FORENSIC]  (0) 2018.09.06
SuNiNaTaS_3 [WEB]  (0) 2018.09.06
SuNiNaTaS_19 [FORENSIC]  (0) 2018.08.23
SuNiNaTaS_18 [FORENSIC]  (0) 2018.08.23

처음에는 보고 어떻게 해야할지 몰라서 넘어갔던 문제입니다..


항상 풀고나면 쉽네요 ㅜ


문제는 달랑 "Notice 게시판에 글을 쓰라!" 고 나와있습니다.



Main에 보시면 Notice 가 있는데 해당 페이지로 가도 글쓰는 버튼은 보이지 않습니다.


관리자만 글쓰게 하려고 만든 게시판으로 보입니다.


어쨋든 문제는 글을 쓰라고 했으니 어떤 방법이든 있으리라 생각합니다.


다른 게시판으로 가봅니다.



"Q&A" 게시판을 가보시면 Notice와 비슷한 형태이고 "Write" 버튼이 있습니다.!!



해당 버튼을 누르면 다음과 같이 글쓰는 페이지가 나옵니다.


처음에는 URL에 항상 "suninatas.com" 만 표시 되었지만 각각의 페이지는 고유의 URL을 가지고 있으므로


개발자도구에서 해당 URL을 확인하거나 


전페이지에서 write 버튼의 이동하는 페이지가 무었인지 소스보기로 확인할 수 있습니다.


URL을 확인해 보시면 "divi=Free" 라는 것을 보실 수 있는데 Free라는 것이 게시판 이름임을 확인 할 수있으며


Free 대신 notice를 입력하면 notice 게시판에 글을 작성할 수 있습니다.



다음과 같이 글쓰기 게시판이 나오고 아무 값이나 입력하고 submit을 하면 인증키가 나오게 됩니다.



'WarGame > SuNiNaTaS' 카테고리의 다른 글

SuNiNaTaS_21 [FORENSIC]  (0) 2018.09.06
SuNiNaTaS_15 [FORENSIC]  (0) 2018.09.06
SuNiNaTaS_19 [FORENSIC]  (0) 2018.08.23
SuNiNaTaS_18 [FORENSIC]  (0) 2018.08.23
SuNiNaTaS_14 [FORENSIC]  (0) 2018.08.23

18번의 이어서 Cipher 문제입니다.

0과 1로만 이루어져 있는 수 많은 수를 보면 어쨌든 어떤 10진수가 될거고 

그게 문자가 될꺼라고 생각합니다.



python을 통해 전체 길이를 확인하니 624글자가 됩니다.

이게 어떤 문자의 2진수를 이어붙인 것이라면 일정한 간격으로 떼어놓고 풀어야겠죠?


보통 8bit 단위로 문자를 쓰기때문에 8자리로 나눠서 해봤습니다. 

(마침 길이도 624/8은 나누어 떨어지죠)


앞에 총 24개의 이진수를 8개씩 나눠 문자열로 변환해보니 NVC라는 값이 나왔습니다.

무슨말인지는 모르겠지만 이 방법이 맞는거 같아 진행합니다.



일일이 나눠도 되지만 

python에는 list compression이라는 깔끔하게 한줄로 코딩할 수 있는 기능이 있습니다.

모두 8개의 숫자로 나눠서 리스트에 저장합니다.



각각의 값들을 문자열로 바꿔주면 다음과 같은 내용이 나오는데 뭔가 잘못한줄 알았습니다.

하지만 암호학을 배우신 분들이라면 전치암호라는 말을 들어보셨을 겁니다.


전치암호는 암호문과 평문이 1:1 대응을 이루고 있습니다. 

그렇다는건 아래 알파벳들이 원래는 다른 알파벳이 아닌가 유추할 수 있습니다.


'R'이라는 문자가 혼자서 쓰이고 있습니다. 영어에서 보통 혼자 쓰이는 문자는 a, i 두가지 입니다.

① 'R'이 'A'였다고 가정합니다.


ABCDEFGHIJKLMNOPQRSTUVWXYZ


R과 A의 거리는 17입니다. 이게 맞다고 가정하고 다른 문자를 바꿔보겠습니다.

(Z까지 이동하면 다시 A로 시작)

REU라는 문자는 IVL이라는 알수없는 문자가 됩니다.


② 'R'이 'I'라고 가정합니다.


ABCDEFGHIJKLMNOPQRSTUVWXYZ


'R'과 'I'의 거리는 9입니다.

REU라는 문자는 AND



아래 python 코드를 이용해 결과값을 도출하였습니다.




'WarGame > SuNiNaTaS' 카테고리의 다른 글

SuNiNaTaS_15 [FORENSIC]  (0) 2018.09.06
SuNiNaTaS_3 [WEB]  (0) 2018.09.06
SuNiNaTaS_18 [FORENSIC]  (0) 2018.08.23
SuNiNaTaS_14 [FORENSIC]  (0) 2018.08.23
SuNiNaTaS_6 [WEB]  (0) 2018.08.22

+ Recent posts