메인 화면입니다.

소스보기를 통해 확인한 것은 5글자를 id파라미터로 넘겨준다는 것을 확인 할 수 있었습니다.

GET 방식으로 파라미터 전달하면 5글자 이상 입력이 가능합니다.

입력된 문자하나씩을 md5로 암호화하여 Base64로 인코딩 된 결과값을 userid라는 쿠키를 생성해서 값으로 저장해 놓는 것을 확인 할 수 있습니다.

[1234값 쿠키]

[1234값 Base64 디코딩]

32문자씩 잘라서 MD5 복호화 하면 '1234'를 발견할 수 있습니다.

여러 다른분의 풀이를 보았는데.

6글자인 admin 파라미터를 만들라는 것이 이번문제의 핵심인 것 같습니다.

여러가지 시도를 해본결과 'admin'문자열 사이에 'null', 'space','tab', 'z'문자열을 대입하면 인증이 가능했습니다.

[내부 로직 뇌피셜]

input값은 항상 Base64 + md5로 인코딩되어 userid쿠키에 값으로 저장된다

1. userid라는 쿠키가 있으면 값을 Base64로 디코딩하고 md5로 복호화 한다.

2. 복호화 한 결과인 문자열의 길이가 6인지 확인한다. 만약 6글자가 아니면 그냥 페이지에 문자열을 찍음 또한 문자열을 set-cookie를 통해 userid를 생성하고 Base64+md5한 값을 덮어씀 만약 기존의 userid가 존재하면 삭제함 그리고 'admin' input이 5글자가 들어왔다면 admin 아니라고 표시

3. 복호화한 userid 쿠키 값이 6글자이면서 'admin' 문자열이 포함되어 있어야 하고 '공백','tab','0x00', 'z'이 있는지 확인 후 이러한 문자가 있으면 문자를 삭제하고 인증되면 set-cookie를 통해 클라이언트 쪽에 Base64+md5 인코딩한 값을 생성하는 것 같음

'WAR GAME > Webhacking.kr' 카테고리의 다른 글

[webhacking.kr] Level21 (old)  (307) 2020.04.28
[webhacking.kr] Level20 (old)  (308) 2020.04.28
[webhacking.kr] Level18 (old)  (313) 2020.04.28
[webhacking.kr] Level17(old)  (308) 2020.04.28
[webhacking.kr] Level16 (old)  (307) 2020.04.28

+ Recent posts