crypto1 문제로 암호학 문제이다.
(crypto1 문제 화면)
누가 AES 암호화 특징을 이용해서 풀었다고 했다...
그래서 AES 암호방식을 공부하고 키를 찾으려했지만 AES 특징이라기보다는 블럭암호의 특징이라고 하는게 맞을것 같다...
덕분에 AES 암호 알고리즘 과정을 뒤져보는 시간을 갖게 된거 같다...ㅜ
해당 프로그램은 클라이언트와 서버 두개로 이루어져있다. 클라이언트 프로그램을 먼저 분석해보았다.
(클라이언트 프로그램)
(클라이언트 프로그램)
특정 형태란 ID-PW-Cookie 이런식으로 사이에 대쉬(-) 를 입력하여 문자열을 구성해준다.
서버로 입력을 보낸 결과가 admin이 아니라면 프로그램이 중간에 종료된다.
admin으로 로그인해야 된다고 생각이 들었다.
이제 서버 프로그램을 분석해보았다
(서버 프로그램)
여기서 알 수 있는 것은 SHA-256(id+cookie) = pw 라는 것이다.
비밀번호를 알기 위해 우리는 cookie 값만 알면 된다.
여기서 많은 삽질이 있었다. 쿠키 값을 찾기 위해 AES 키를 찾으려고 했다. 그 과정에서 암호화 알고리즘을 분석하게 되었고 알게 된 것이 키를 알아내기 쉽지 않다는 것이었다. 다른 방법으로 접근 해보게 되었다.
바이트 단위로 노출하기!
보면 id-pw-cookie 이렇게 문자열이 구성된 후 암호화가 이루어진다.
만약 여기서 id에 – 를 13개를 입력하고 비밀번호를 입력하지 않는다면
Cookie 앞에 ‘-‘ 가 15개 입력이 된다. AES는 16바이트씩 블록으로 암호화가 이루어지므로 첫번째 블록은 쿠키의 한글자가 포함되어 “-“*15 + “쿠키 첫글자” 이런식으로 암호화가 된다.
그렇게 되면 여기서 우리는 가능한 글자를 대입해 보아 첫글자를 맞출 수 있다.
이런식으로 한글자씩 노출시키는 것이다.
(exploit 코드 일부)
(전체 exploit 코드는 공개하지 않겠습니다. 궁금하시면 글 주세요.)
(쿠키값)
(pw를 생성하기 위한 코드)
그 값을 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 |