오랜만에 해결된 문제이다.

crypto1 문제로 암호학 문제이다.



(crypto1 문제 화면)



암호방식은 AES-CBC 방식으로 암호화된 내용을 주고받는 프로그램인데 결론적으로 admin으로 로그인 하는 것이다기사공부때 공부했던 AES 암호 방식 알고리즘을 차근차근 다시 뜯어보게 된 계기가 된 문제이다

누가 AES 암호화 특징을 이용해서 풀었다고 했다...
그래서 AES 암호방식을 공부하고 키를 찾으려했지만 AES 특징이라기보다는 블럭암호의 특징이라고 하는게 맞을것 같다...
덕분에 AES 암호 알고리즘 과정을 뒤져보는 시간을 갖게 된거 같다...ㅜ

 

해당 프로그램은 클라이언트와 서버 두개로 이루어져있다클라이언트 프로그램을 먼저 분석해보았다.



(클라이언트 프로그램)



(클라이언트 프로그램)



클라이언트 프로그램은 아이디와 비밀번호를 입력받아서 특정형태의 문자열을 만든 후 그 문자열을 AES암호화 과정을 한 패킷을 전송한다여기서 이 패킷을 보내기 전에 출력해준다.
특정 형태란 ID-PW-Cookie 이런식으로 사이에 대쉬(-) 를 입력하여 문자열을 구성해준다.
 
서버로 입력을 보낸 결과가 admin이 아니라면 프로그램이 중간에 종료된다.
admin으로 로그인해야 된다고 생각이 들었다.
 

이제 서버 프로그램을 분석해보았다



(서버 프로그램)



서버 프로그램에서는 전달받은 내용을 복호화한 후 아이디와 쿠키값을 연결하여 SHA-256으로 해쉬한 값이 pw와 일치하는지 확인한다
여기서 알 수 있는 것은 SHA-256(id+cookie) = pw 라는 것이다.
비밀번호를 알기 위해 우리는 cookie 값만 알면 된다.
 
여기서 많은 삽질이 있었다쿠키 값을 찾기 위해 AES 키를 찾으려고 했다그 과정에서 암호화 알고리즘을 분석하게 되었고 알게 된 것이 키를 알아내기 쉽지 않다는 것이었다다른 방법으로 접근 해보게 되었다.
바이트 단위로 노출하기!
보면 id-pw-cookie 이렇게 문자열이 구성된 후 암호화가 이루어진다.
만약 여기서 id에 –  13개를 입력하고 비밀번호를 입력하지 않는다면
Cookie 앞에 ‘-‘  15개 입력이 된다. AES 16바이트씩 블록으로 암호화가 이루어지므로 첫번째 블록은 쿠키의 한글자가 포함되어 “-“*15 + “쿠키 첫글자” 이런식으로 암호화가 된다.
그렇게 되면 여기서 우리는 가능한 글자를 대입해 보아 첫글자를 맞출 수 있다.
 
 

이런식으로 한글자씩 노출시키는 것이다.



(exploit 코드 일부)



쿠키의 앞 14자리를  찾는 코드이다이런식으로 한자리씩 맞추어 찾을 수 있다

(전체 exploit 코드는 공개하지 않겠습니다. 궁금하시면 글 주세요.)



(쿠키값)



Exploit 코드를 이용해 찾은 쿠키값을 찾았다.




(pw를 생성하기 위한 코드)



이제 쿠키와 id를 이어 SHA 해쉬해준다.

그 값을 pw로 admin으로 로그인 하면 플래그가 나온다.



(문제 해결)

'WarGame > 500 Project' 카테고리의 다른 글

(62/500) NOE.systems - BURYBURY  (0) 2017.10.01
(61/500) NOE.systems - double_input  (0) 2017.09.17
(59/500) pwnable.kr - dragon  (0) 2017.08.17
(58/500) pwnable.kr - fsb  (0) 2017.08.12
(57/500) pwnable.kr - ascii_easy  (2) 2017.08.09

+ Recent posts