본문 바로가기

SWUFORCE 워게임👊🏻

[Webhacking] old-6 ; web

<워게임_Webhacking_web_old-6>

 

1. 접속한 화면이다. ID는 guest, PW는 123qwe.

 

2. 페이지 소스코드이다. 분석은 아래와 같다.

 

1) 페이지 접근 시 초기 설정 (10~29번째 줄)
- 14번째 줄: $_GET['view_source']가 설정되면 view_source() 호출됨. 소스 코드를 확인할 수 있도록 동작.
- 15~29번째 줄: $_COOKIE['user']가 없으면 기본값 생성됨. ID는 "guest", PW는 "123qwe"로 설정됨. 20번 Base64로 인코딩 작업 수행됨.
- 22~29번째 줄: 인코딩된 값에서 숫자를 기호로 치환함. 예: 숫자 1은 !, 숫자 2는 @로 변환됨.
- 28번째 줄: 변환된 값이 user, password 쿠키로 저장됨. 쿠키의 유효기간은 하루로 설정됨.
- 29번째 줄: 새로고침 수행됨.

 

2) 쿠키 값 처리 (34~49번째 줄)
- 34~35번째 줄: 저장된 user와 password 쿠키 값 가져옴.
- 37~44번째 줄: 치환된 기호를 다시 숫자로 복원함. 예: ! → 1, @ → 2로 변환됨.
- 46~49번째 줄: 쿠키 값을 20번 Base64 디코딩하여 원래 값으로 복원함. 예: "guest"와 "123qwe"로 변환됨.

 

3) 인증 확인 및 출력 (51~57번째 줄)
- 54번째 줄: 복원된 ID와 PW 출력됨. 예: ID: guest, PW: 123qwe.
- 56번째 줄: ID가 "admin"이고 PW가 "nimda"이면 solve(6) 호출됨. -> 문제 풀이 완료를 의미함!

 

=> ID "admin"과 PW "nimda"를 20번 Base64로 인코딩, 인코딩된 값에서 숫자를 기호로 치환함. (예: 1은 !, 2는 @로 변환) 치환된 값을 user와 password 쿠키로 설정하면 풀릴 듯!

 

 # 문자열을 20번 Base64로 인코딩한 후, 숫자를 지정된 기호로 치환하는 Python 코드
 
 import base64

# 숫자를 치환할 기호 사전
char_map = {
    "1": "!", "2": "@", "3": "$", "4": "^",
    "5": "&", "6": "*", "7": "(", "8": ")"
}

# 20번 Base64 인코딩
def base64_encode_n_times(text, n):
    encoded = text.encode()  # 문자열을 바이트로 변환
    for _ in range(n):
        encoded = base64.b64encode(encoded)  # Base64로 인코딩
    return encoded.decode()  # 최종 바이트를 문자열로 변환

# 숫자를 기호로 치환
def replace_numbers_with_symbols(encoded):
    for num, symbol in char_map.items():
        encoded = encoded.replace(num, symbol)  # 숫자를 대응되는 기호로 변환
    return encoded

# admin과 nimda 처리
def process_text_with_base64_and_replacement(text):
    encoded = base64_encode_n_times(text, 20)  # 20번 Base64 인코딩
    replaced = replace_numbers_with_symbols(encoded)  # 숫자를 기호로 치환
    return replaced

# 결과 출력
admin_final = process_text_with_base64_and_replacement("admin")
nimda_final = process_text_with_base64_and_replacement("nimda")

print("Encoded and replaced 'admin':", admin_final)
print("Encoded and replaced 'nimda':", nimda_final)

3. 문자열을 20번 Base64로 인코딩한 후, 숫자를 지정된 기호로 치환하는 Python 코드이다. 

 

4. 실행 결과이다. 무척 길다..!

 

5. 쿠키 value값을 둘다 바꿔 넣어주었다. 새로고침 했더니

 

 

해결 완👊🏻 base64 문제가 매우 많다. 재밌다!