Prob 34
리버싱 문제이다.
파일은 실행파일 하나와 읽어들이는 것을 보이는 dat파일 하나가 있다.
PEiD로 보면 .Net으로 만들어 졌다.
.Net프로그램이라면 .Net Reflector로 보는것이 좋기 때문에
읽어들이면 다음과 같다.
소스를 보면 간단하다.
먼저 textBox2의 문자열이 a-z 또는 0-9로 이루어 지지 않거나 5자가 아니면 실패를 출력한다. textBox2는 pw입력 부분이다. 그리고 account.dat파일에서 데이터를 라인으로 읽어오는데 여기서 읽어온 값을 ':'를 기준으로 나누어 strArray에 저장한다.
만약 strArray[0]번의 값과 textBox1의 값이 같으면 진행을 하는데 textBox1은 id를 입력하는 부분이고 strArray[0]번은 admin, guest등 account.dat에서의 제일 앞 부분이다.
MD5CryptoServiceProvider().ComputeHash(Encoding.ASCII.GetBytes(strArray[0] + this.textBox2.Text + strArray[2]));
이 코드를 이용해 md5해쉬화를 진행하는데 해쉬화 하는 데이터는 id+비밀번호+account.dat의 3번째 숫자이다.
이 문제에 제시된 guest의 비밀번호는 guest이다.
따라서 'guestguest01541'을 해쉬화 하면 account.dat에 있는 '7C685308952F1AC56FD3CAA2B2CB2D5A'가 나와야 한다.
직접 해보면 같다. 이제 비밀번호를 알아내는 방법을 알았으니 찾아야 하는데 찾는 방법은 해쉬값이기 때문에 브루트 포스밖에 생각이 나지 않는다.
오래 걸릴 것 같아서 스레드를 이용하려 했는데 다른 작업때문에 팅겨서 그냥 처음부터 쭉 돌리는 소스를 이용했다.
a부터 z, 0부터 9까지 쭉 돌려보면 비밀번호를 얻을 수 있다. 비밀번호는 9oo9l이다.
입력을 하면 Auth 에 9oo9l을 넣으라고 한다.
값을 넣으면 Auth Key를 얻을 수 있다.
XCZ.kr Answer : 19d0400fd86c3fdcdee0631ac01af09f
'CTF | wargame' 카테고리의 다른 글
Hack-me / Apple Online Store (쿠키, 에이전트 변조) (0) | 2016.07.22 |
---|---|
XCZ.kr / Prob36 (포렌식, lnk파일) (0) | 2016.07.22 |
XCZ.kr / Prob32 (웹,php trick) (0) | 2016.07.22 |
XCZ.kr / Prob26 (암호, 3자리 암호화) (0) | 2016.07.22 |
XCZ.kr / Prob24 (포렌식, 메모리덤프) (0) | 2016.07.22 |