본문 바로가기
해킹 공부/웹해킹

쿠키 변조, encoding

by zzzmilky 2020. 9. 29.


19번 문제. 150점짜리!



로그인 화면으로 보이는 듯한 페이지가 보이고 입력으로 admin이라고 주어져있다.
제출버튼을 누르면 다음과 같이 "you are not admin"이라고 뜬다.



그러면 admin 대신에 다른 임의의 값을 넣어보자.


id에 a를 넣어보았다.



id에 a를 넣게 되고 제출해보자.





어랏 hello a라고 뜨고 logout 버튼이 뜬다. 근데 logout 버튼을 눌러도 logout은 되지 않는다...
다른 임의의 입력을 넣고 제출해도 다 hello+id 형식으로 뜬다. admin으로만 로그인하려고 하면 you are not admin이라고 뜬다. 그러면 아마 admin으로 로그인이 되도록 하는게 이 문제일 것이다. 로그인과 관련해서, 쿠키를 살펴봐야할 것 같았다. 내가 webhacking문제 풀때 사용하는 크롬 익스텐션 "edit this cookie"를 열어보았다.




a로 로그인했을때의 쿠키



edit this cookie에서 봤을때 a로 로그인하면, userid가 생성되고 여기에 다음과 같은 값이 들어가있다. 그리고 이 값을 지우고, 다시 새로고침하면 로그아웃도 가능하다. 그렇다면 admin에 해당하는 저 값을 userid에 넣게 되면 admin으로 로그인이 가능해질 것이다! 라고 추측할 수 있다. 그래서 문제는 저 값을 구하는 거였다. 물론 다양한 인코딩 방식이 있지만, 나는 아직 인코딩을 잘 모르기에...(ㅠ) 임의로 login에 문자들을 넣어보면서 규칙성을 추측해보기로 했다. 정보보호 수업시간에 배운 chosen-ciphertext attack를 몸소 해 볼 수 있었다. (그냥 노가다했단 뜻)


일단 a를 넣어봤을때 쿠키값이 MGNjMTc1YjljMGYxYjZhODMxYzM5OWUyNjk3NzI2NjE%3D
b를 넣었을때 쿠키값이 OTJlYjVmZmVlNmFlMmZlYzNhZDcxYzc3NzUzMTU3OGY%3D
c를 넣었을때 쿠키값이 NGE4YTA4ZjA5ZDM3YjczNzk1NjQ5MDM4NDA4YjVmMzM%3D
abc를 넣었을 때 쿠키값이 MGNjMTc1YjljMGYxYjZhODMxYzM5OWUyNjk3NzI2NjE
5MmViNWZmZWU2YWUyZmVjM2FkNzFjNzc3NTMxNTc4ZjRhOGEwOGYwOWQzN2I3Mzc5NTY0OTAzODQwOGI1ZjMz


라고 나왔다. 특징이, 쿠키값 끝에 %3D라고 뜨는건 제외하고 생각하고, 인풋에 a와 b와 c가 다 합해졌다고 쿠키값도 다 순서대로 합쳐져서 뜨는건 아니었다. 단, 맨 앞 a의 쿠키값은 보존 됐다. 또, 여러번 해보니, %3D는, id가 문자 1개일때에는 끝에 %3D, 2개일때 %3D%3D, 3개일때에는 없었다. 이렇게 id길이에 mod3 한 결과로 %3D의 갯수가 정해졌다.

admi를 넣었을 때 쿠키값이 다음과 같다. MGNjMTc1YjljMGYxYjZhODMxYzM5OWUyNjk3NzI2NjE
4Mjc3ZTA5MTBkNzUwMTk1YjQ0ODc5NzYxNmUwOTFhZDZmOGY1NzcxNTA5MGRhMjYzMjQ1Mzk4OGQ5YTE1MDFiODY1YzBjMGI0YWIwZTA2M2U1Y2FhMzM4N2MxYTg3NDE%3D



maxlength와 size를 늘려준다.



admin보다 더 긴 문자열을 입력하려고 하는데, 지금 최대 인풋 길이가 5로 되어있어서 인풋 길이를 늘리고 입력해준다.




인풋 길이를 늘리고 admins라고 입력해준다.

admins를 넣었을 때 쿠키값이 다음과 같이 나왔다.
MGNjMTc1YjljMGYxYjZhODMxYzM5OWUyNjk3NzI2NjE4Mjc3ZTA5MTBkNzUwMTk1YjQ0ODc5NzYxNmUwOTFhZDZmOGY1NzcxNTA5MGRhMjYzMjQ1Mzk4OGQ5YTE1MDFiODY1YzBjMGI0YWIwZTA2M2U1Y2FhMzM4N2MxYTg3NDE3YjhiOTY1YWQ0YmNhMGU0MWFiNTFkZTdiMzEzNjNhMTAzYzdjMGFjZTM5NWQ4MDE4MmRiMDdhZTJjMzBmMDM0

마찬가지로 admina라고 입력해보았는데, 쿠키값이 MGNjMTc1YjljMGYxYjZhODMxYzM5OWUyNjk3NzI2NjE4Mjc3ZTA5MTBkNzUwMTk1YjQ0ODc5NzYxNmUwOTFhZDZmOGY1NzcxNTA5MGRhMjYzMjQ1Mzk4OGQ5YTE1MDFiODY1YzBjMGI0YWIwZTA2M2U1Y2FhMzM4N2MxYTg3NDE3YjhiOTY1YWQ0YmNhMGU0MWFiNTFkZTdiMzEzNjNhMTBjYzE3NWI5YzBmMWI2YTgzMWMzOTllMjY5NzcyNjYx라고 나왔다.


그렇다면, admins와 admina의 쿠키값을 비교해봤을때, 같은 부분은

MGNjMTc1YjljMGYxYjZhODMxYzM5OWUyNjk3NzI2NjE4Mjc3ZTA5MTBkNzUwMTk1YjQ0ODc5NzYxNmUwOTFhZDZmOGY1NzcxNTA5MGRhMjYzMjQ1Mzk4OGQ5YTE1MDFiODY1YzBjMGI0YWIwZTA2M2U1Y2FhMzM4N2MxYTg3NDE3YjhiOTY1YWQ0YmNhMGU0MWFiNTFkZTdiMzEzNjNhMT

여기 였다.


이 쿠키값에는, admi의 쿠키값도 포함돼 있었다. 따라서 admin 쿠키값을 찾아낼 수 있었다. 뒤에 붙이는 %3D의 경우, 위에 설명한 나의 추측에 따르면 admin은 뒤에 %3D를 2개 붙여야 할 것 같았다.

MGNjMTc1YjljMGYxYjZhODMxYzM5OWUyNjk3NzI2NjE4Mjc3ZTA5MTBkNzUwMTk1YjQ0ODc5NzYxNmUwOTFhZDZmOGY1NzcxNTA5MGRhMjYzMjQ1Mzk4OGQ5YTE1MDFiODY1YzBjMGI0YWIwZTA2M2U1Y2FhMzM4N2MxYTg3NDE3YjhiOTY1YWQ0YmNhMGU0MWFiNTFkZTdiMzEzNjNhMT%3D%3D라고 입력해보았다.

edit your cookie에 admin의 쿠키값 추측해 넣기




admin의 쿠키값을 추측해낼 수 있었고, hello admin이라고 뜨면서 문제를 풀 수 있었다!

성공!



이상 노가다를 해봤는데, 이 문제를 기회삼아 encoding 방식에 대해 한번 알아보기도 했다. 다른 풀이들을 살펴보니, 나처럼 한 사람은 많지 않았다. 다들 노가다를 하긴 했지만, encoding 방식을 추측하면서 푼 사람들이 많았는데, base 64 encoding과 url encoding에 대해 더 알아보고자 했다,,,

%3D가 있으니 URL인코딩된 거였나보다.
그리고 base64로 인코딩 하는 것 같았다.
id에 한 문자를 입력하면 쿠키값 길이가 32인데, 이게 MD5 해시의 특징이라고 한다.

MD5 해시 decryption 사이트다.
www.md5online.org/md5-decrypt.html

MD5 Online | Free MD5 Decryption, MD5 Hash Decoder

www.md5online.org

이 문제의 경우, 각 문자에 MD5암호화를 하고, 마지막으로 문장 전체를 MD5암호화한 다음, base64 인코딩을 하고 URL인코딩을 한 문제였다고 한다.

'해킹 공부 > 웹해킹' 카테고리의 다른 글

포트포워딩(port forwarding)  (0) 2020.10.02
SMTP/ Mail header injection  (0) 2020.10.01
LFI 취약점, php wrapper  (0) 2020.09.30
CR-LF INJECTION  (0) 2020.09.23
SQL INJECTION  (0) 2020.09.22

댓글