Security/Web 문제풀기

Webhacking.kr 6번

하얀콩토리 2021. 1. 27. 02:46

webhacking.kr 6번 문제를 풀어보자

첫 화면에 들어가면 ID와 PW가 보인다.

먼저 소스를 보자

코드를 정리해보면

user 쿠키값이 없을 때 val_id 값에 guest, val_pw 값에 123qwe를 저장하고

20번 반복하면서 val_id, val_pw를 인코딩하고

항목 안에 1~9의 숫자가 있으면 해당되는 특수문자로 대체한 뒤 user 쿠키와 password 쿠키에 저장하는 코드이다.

디코딩 부분도 마찬가지로

user와 password 쿠키값을 가져와서

각 특수문자에 대칭되는 1~9의 숫자로 치환하고

20번의 디코딩을 한 후

디코딩한 id가 admin이고 pw가 nimda면 문제가 해결된다.

따라서 admin과 nimda를 20번 인코딩한 후 숫자를 해당되는 특수문자로 바꾼 뒤 그 값들을 user과 password 쿠키값으로 설정하면 될 것 같다!

나는 20번 인코딩 + 숫자 특수문자로 바꾸기는 파이썬 코드로 작성해서 돌렸다!

코드는 아래와 같다

import base64
import sys

val_id = "admin"
val_pw = "nimda"

val_id = val_id.encode('utf-8')
val_pw = val_pw.encode('utf-8')

for i in range(20):
    val_id = base64.b64encode(val_id)
    val_pw = base64.b64encode(val_pw)

val_id = str(val_id)
val_pw = str(val_pw)
val_id.replace("1","!")
val_id.replace("2","@")
val_id.replace("3","$")
val_id.replace("4","^")
val_id.replace("5","&")
val_id.replace("6","*")
val_id.replace("7","(")
val_id.replace("8",")")

val_pw.replace("1","!")
val_pw.replace("2","@")
val_pw.replace("3","$")
val_pw.replace("4","^")
val_pw.replace("5","&")
val_pw.replace("6","*")
val_pw.replace("7","(")
val_pw.replace("8",")")

print("id = ", val_id)
print("pw = ", val_pw)

엄청난 결과값이 나왔다. 이 값을 각각 user와 password의 쿠키값에 넣어주자!

해결!