SWLUG/μ›Ή ν•΄ν‚Ή

[webhacking.kr] old-19번

waterproof 2023. 9. 19. 01:52

 

문제λ₯Ό ν΄λ¦­ν•˜λ©΄ λ‚˜μ˜€λŠ” 초기 화면이닀.

id칸에 "admin"이 κΈ°λ³Έκ°’μœΌλ‘œ μž…λ ₯λ˜μ–΄μžˆλ‹€.

 

 

μœ„μ˜ 초기 νŽ˜μ΄μ§€μ˜ μ†ŒμŠ€μ½”λ“œλ₯Ό μ‚΄νŽ΄λ³΄κ² λ‹€.

 

 

μ•Œμ•„λ‚Ό 수 μžˆλŠ” 게 μ—†μ—ˆλ‹€.

 

 

 

처음 ν™”λ©΄μ—μ„œ id μž…λ ₯ 칸에 적힌 "admin" 값을 바꾸지 μ•Šκ³  κ·ΈλŒ€λ‘œ 제좜 λ²„νŠΌμ„ λˆ„λ₯΄λ©΄ λ‚˜μ˜€λŠ” 창이닀.

 

이 νŽ˜μ΄μ§€μ˜ μ†ŒμŠ€μ½”λ“œλ₯Ό μ‚΄νŽ΄λ³΄μ•˜λ‹€.

 

 

μ—¬κΈ°μ—μ„œλ„ μ•Œμ•„λ‚Ό 수 μžˆλŠ” 게 μ—†μ—ˆλ‹€.

 

 

 

 

뭘 ν•΄μ•Όν•  지 λͺ¨λ₯΄κ² μ–΄μ„œ id μž…λ ₯칸에 "123" 이라고 적고 μ œμΆœν–ˆλ”λ‹ˆ μœ„μ˜ ν™”λ©΄μœΌλ‘œ λ„˜μ–΄κ°”λ‹€.

logout λ²„νŠΌμ„ λˆŒλŸ¬λ„ 초기 ν™”λ©΄μœΌλ‘œ λŒμ•„μ˜€μ§€ μ•ŠλŠ”λ‹€.

 

이 νŽ˜μ΄μ§€μ˜ μ†ŒμŠ€μ½”λ“œλ₯Ό μ‚΄νŽ΄λ³΄μ•˜λ‹€.

 

 

logout λ²„νŠΌμ„ λˆŒλŸ¬λ„ 초기 ν™”λ©΄μœΌλ‘œ λŒμ•„μ˜€μ§€ μ•ŠλŠ” μ΄μœ λŠ”

 

<input type=button value='logout' onclick=location.href='?logout=1'> μ—μ„œ

μ‚¬μš©μžκ°€ 이 λ²„νŠΌμ„ ν΄λ¦­ν•˜λ©΄ location.hrefλ₯Ό μ‚¬μš©ν•˜μ—¬ ν˜„μž¬ νŽ˜μ΄μ§€λ₯Ό μƒˆλ‘œκ³ μΉ¨ν•˜κ²Œ 되기 λ•Œλ¬Έμ΄λ‹€.

μ΄λ•Œ, URL νŒŒλΌλ―Έν„°λ‘œ logout=1이 ν•¨κ»˜ μ „μ†‘λœλ‹€.

 

 

 

id μž…λ ₯μΉΈκ³Ό 제좜 λ²„νŠΌμ΄ μžˆμ—ˆλ˜ 초기 ν™”λ©΄μœΌλ‘œ λŒμ•„κ°€κ³  μ‹Άμ–΄μ„œ

μ›Ήν•΄ν‚Ή.kr μ—μ„œ λ‚΄ 계정을 μ•„μ˜ˆ λ‘œκ·Έμ•„μ›ƒ ν–ˆλŠ”λ°, (19번 문제 μ•ˆμ˜ λ‘œκ·Έμ•„μ›ƒ λ²„νŠΌμ„ λˆŒλ €λ‹€λŠ” 뜻 μ•„λ‹˜)

 

 

계속 이 화면이 λ‚˜μ™”λ‹€.

 

μ™œ κ·ΈλŸ°κ±΄μ§€ κ³ λ―Όν•΄λ³Έ κ²°κ³Ό, λ‚΄κ°€ ν•œ ν™œλ™λ“€μ΄ μ €μž₯λ˜μ–΄μžˆλŠ” 걸둜 보아

μΏ ν‚€κ°’κ³Ό 관련이 μžˆλ‚˜? ν•˜λŠ” 생각이 λ“€μ—ˆλ‹€.

κ·Έλž˜μ„œ 쿠킀값을 ν™•μΈν•΄λ³΄μ•˜λ‹€.

(쿠킀값을 μ–΄λ–»κ²Œ ν™•μΈν•˜λŠ”μ§€λ„ λͺ°λΌμ„œ μ—¬λŸ¬ κΈ°λŠ₯듀을 만져보며 ν—€λ§Έλ‹€.)

 

 

 

 

 

κ·ΈλŸ¬λ‹€κ°€ 이름이 userid 인 쿠킀값을 λ°œκ²¬ν–ˆλ‹€. (맀우 μˆ˜μƒ)

λ¬Έμ œμ™€ 연관이 μžˆμ„ 것 κ°™μ•˜λ‹€.

 

 

 

쿠킀값인 "YzRjYTQyMzhhMGI5MjM4MjBkY2M1MDlhNmY3NTg0OWJjODFlNzI4ZDlkNGMyZjYzNmYwNjdmODljYzE0ODYyY2VjY2JjODdlNGI1Y2UyZmUyODMwOGZkOWYyYTdiYWYz" λ₯Ό 해석해야 문제λ₯Ό ν’€ 수 μžˆμ„ 것 κ°™λ‹€λŠ” 생각이 λ“€μ—ˆλ‹€.

 

 

 

일단 μ €λ²ˆ 문제처럼 Base64 디코딩을 ν•΄λ³΄μ•˜λ‹€.

 

 

 

이 μ •μ‹  μ—†λŠ” λ¬Έμžλ“€μ€ 뭐지...? ν˜Ήμ‹œλ‚˜ μ‹Άμ–΄μ„œ 이 결괏값을 ν•œ 번 더 Base 64 λ””μ½”λ”©ν•΄λ΄€λ‹€.

 

 

 

 

이 방법이 μ•„λ‹Œκ°€λ³΄λ‹€!

 

 

 

문자 인코딩에 λŒ€ν•œ μœ„ν‚€λ°±κ³Όλ₯Ό 보닀가

λ‚΄κ°€ μœ„μ—μ„œ λ³΄μ•˜λ˜ 문자깨짐 ν˜„μƒμ΄ μ™œ μΌμ–΄λ‚˜λŠ”μ§€λ„ μ•Œκ²Œ λ˜μ—ˆλ‹€!

 

 

μ„œλ‘œ λ‹€λ₯Έ 문자의 인코딩 방식을 μ‚¬μš©ν•΄μ„œ 그런 κ±°μ˜€λ‹€.

κ·Έλ ‡λ‹€λ©΄ Base 64 인코딩 방식이 μ•„λ‹Œ λ‹€λ₯Έ 방식을 μ‚¬μš©ν•˜λ©΄ 문제λ₯Ό ν’€ 수 μžˆμ„ 것 κ°™λ‹€λŠ” 생각이 λ“€μ—ˆλ‹€.

 

 

 

 

 

 

 

 

그런데 μ–΄λ–€ 인코딩 방식을 μ‚¬μš©ν•΄μ•Ό ν•˜λŠ”μ§€ λͺ¨λ₯΄κ² μ–΄ μ°Ύμ•„λ³΄λ‹ˆ

파이썬 chardet 라이브러리둜 인코딩 μ’…λ₯˜λ₯Ό 감지할 수 μžˆλ‹€κ³ ν•΄μ„œ μ‹œλ„ν•΄λ΄€λŠ”λ°

μ–΄λ–€ μ΄μœ μ—μ„œμΈμ§€ λͺ¨λ₯΄κ² μœΌλ‚˜ μ‹€νŒ¨ν–ˆλ‹€...

 

 

 

더 이상 방법이 λ– μ˜€λ₯΄μ§€ μ•Šμ•„μ„œ λ‹€λ₯Έ λΈ”λ‘œκ·Έ 글을 μ°Ύμ•„λ³΄μ•˜λ‹€.

 

μ›λž˜ κ°’ -> md5 -> base64 -> url encode == μΏ ν‚€ κ°’ 이라고 ν•œλ‹€.

 

이 사싀이 λ§žλŠ”μ§€ 확인해보도둝 ν•˜κ² λ‹€.

 

 

 

 

 

쿠킀값을 url λ””μ½”λ”©ν–ˆλŠ”λ°, λ””μ½”λ”© 이전 κ°’μ΄λž‘ λ˜‘κ°™μ΄ λ‚˜μ™”λ‹€.

μ—¬κΈ°μ„œ ν˜Όλž€μŠ€λŸ¬μ› λŠ”λ°... λ‚΄κ°€ μž…λ ₯ν•œ 값이 "123" μ΄λΌλŠ” μˆ«μžμ—¬μ„œ

λ§ˆμ§€λ§‰ 뢀뢄에 %3Dκ°€ μ•ˆ λΆ™μ–΄μžˆμ„ μˆ˜λ°–μ— μ—†μ—ˆκ³ 

결과적으둜 쿠킀값을 url λ””μ½”λ”©ν•œ 이전과 μ΄ν›„μ˜ 값이 κ°™μ•˜λ‹€.

 

 

λ‹€λ₯Έ λΈ”λ‘œκ·Έ 글을 보면 μΏ ν‚€κ°’ λ§ˆμ§€λ§‰μ— %3Dκ°€ λΆ™μ–΄μžˆμ–΄μ„œ

url λ””μ½”λ”©ν•˜μ—¬ %3Dλ₯Ό =으둜 λ°”κΏ”μ£Όμ—ˆκ³ 

λ§ˆμ§€λ§‰ 뢀뢄에 =λ₯Ό λ„£λŠ” μ•”ν˜Έν™” 방식은 Base64 μž„μ„ μ•Œκ³  μžˆμœΌλ―€λ‘œ Base64 디코딩을 ν•˜λŠ” μˆœμ„œλ₯Ό 거쳐

λ§ˆμ§€λ§‰μ— MD5 해쉬 ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•œλ‹€λŠ” μ‚¬μ‹€κΉŒμ§€ μ•Œμ•„λƒˆλ‹€.

 

 

 

μ•„λ¬΄νŠΌ λ‹€μŒμ€ 쿠킀값을 url 디코딩을 ν•œ 값을(λ‚˜μ˜ κ²½μš°μ—λŠ” 이전 이후 차이가 μ—†λ‹€.)

λ‹€μ‹œ Base 64 λ””μ½”λ”©ν•œ 결과값이닀.

 

 

 

c4ca4238a0b923820dcc509a6f75849bc81e728d9d4c2f636f067f89cc14862ceccbc87e4b5ce2fe28308fd9f2a7baf3

 

이 값은 96 byte둜, λ‚΄κ°€ "123"을 λŒ€μž…ν–ˆκΈ° λ•Œλ¬Έμ—

ν•œ κΈ€μžλ‹Ή 32 byte * 3 = 96byte κ°€ λ‚˜μ™”μŒμ„ μ•Œ 수 μžˆλ‹€.

32자리 λ¬Έμžμ—΄μ€ ν”νžˆ MD5 해쉬 ν•¨μˆ˜μ— μ˜ν•΄ λ‚˜μ˜¨λ‹€κ³  ν•œλ‹€.

 

 

 

κ·Έλž˜μ„œ "123"μ—μ„œ "1", "2", "3" 각각의 MD5값을 ν™•μΈν•΄λ³΄μ•˜λ‹€.

 

 

 

μœ„μ˜ κ²°κ³Όλ₯Ό ν•©μΉ˜λ©΄ 

c4ca4238a0b923820dcc509a6f75849bc81e728d9d4c2f636f067f89cc14862ceccbc87e4b5ce2fe28308fd9f2a7baf3

 

κ°€ λ‚˜μ˜€λ―€λ‘œ κ²°κ΅­

 

μ›λž˜ κ°’ -> md5 -> base64 -> url encode == μΏ ν‚€ κ°’ 

 

이 κ³Όμ •μœΌλ‘œ μ•”ν˜Έν™”ν•œ 것이 λ§žλ‹€λŠ” 것을 확인할 수 μžˆμ—ˆλ‹€.

 

 

 

 

정리λ₯Ό ν•΄λ³΄μžλ©΄ 각각 λ¬Έμžμ—΄μ— λŒ€ν•œ md5값을 얻은 λ‹€μŒ λ¬Έμžμ—΄μ„ ν•©μΉ˜κ³  base64μΈμ½”λ”©ν•œ 값을 μΏ ν‚€κ°’μœΌλ‘œ λ„£λŠ” 것이닀.

 

 

 

κ·ΈλŸ¬λ―€λ‘œ "admin" 각각의 λ¬Έμžμ—΄μ— λŒ€ν•œ md5값을 μ–»μœΌλ©΄ μ•„λž˜μ™€ κ°™λ‹€.

 

a = 0cc175b9c0f1b6a831c399e269772661

d = 8277e0910d750195b448797616e091ad

m = 6f8f57715090da2632453988d9a1501b

i = 865c0c0b4ab0e063e5caa3387c1a8741

n = 7b8b965ad4bca0e41ab51de7b31363a1

 

 

 

λ‹€μŒμœΌλ‘œ, μœ„μ—μ„œ 얻은 각각의 md5 값을 ν•©μΉ˜λ©΄ μ•„λž˜μ™€ κ°™λ‹€.

 

 

0cc175b9c0f1b6a831c399e2697726618277e0910d750195b448797616e091ad6f8f57715090da2632453988d9a1501b865c0c0b4ab0e063e5caa3387c1a87417b8b965ad4bca0e41ab51de7b31363a1

 

 

 

μœ„μ˜ 값을 Base 64 μΈμ½”λ”©ν•œ 값은 λ‹€μŒκ³Ό κ°™λ‹€.

 

 

 

url μΈμ½”λ”©ν•˜κΈ° μœ„ν•΄ 뒀에 '==' 만 '%3d%3d'둜 λ°”κΏ”μ£Όλ©΄ 끝!

 

 

MGNjMTc1YjljMGYxYjZhODMxYzM5OWUyNjk3NzI2NjE4Mjc3ZTA5MTBkNzUwMTk1YjQ0ODc5NzYxNmUwOTFhZDZmOGY1NzcxNTA5MGRhMjYzMjQ1Mzk4OGQ5YTE1MDFiODY1YzBjMGI0YWIwZTA2M2U1Y2FhMzM4N2MxYTg3NDE3YjhiOTY1YWQ0YmNhMGU0MWFiNTFkZTdiMzEzNjNhMQ%3d%3d

 

 

λ₯Ό 쿠킀에 λ„£μ–΄μ£Όκ³  μƒˆλ‘œκ³ μΉ¨ν•˜λ©΄ μ •λ‹΅!

 

 

 

'SWLUG > μ›Ή ν•΄ν‚Ή' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€

[webhacking.kr] old-12번  (0) 2023.09.27
[Root Me] Javascript - Webpack  (0) 2023.09.26
[Root Me] Javascript - Authentication 2  (0) 2023.09.23
[Root Me] HTTP - COOKIES  (0) 2023.09.23
[webhacking.kr] old-42번  (0) 2023.09.18