WarGame/Webhacking.kr

[Webhacking.kr] old-06 Answer

Old-06 Domain & Tool

  • 구분 : 코드 잘 읽기
  • 문제풀이에 사용된 도구 
    • Chrome 103.0.5060.66 관리도구[F12]
    • python 3.10
      • Module : requests

Old-06 Question & Answer

들어가면 특별한 코드는 보이지 않고, ID가 guest라는것, pw가 123qwe라는것이 보인다. 이를 활용한 문제인듯 쿠키에 길고도 긴 user와 password라는 값이 보인다.  view-source를 확인해서 문제가 어떻게 구성되는지 알아보자 오른쪽 사진의 php코드를 확인할 수 있다.

코드는 단순하다. 

  1. 사전 쿠키설정
    1. 웹페이지에 접속하면 'guest'와 '123qwe'를 base64 인코딩을 20번 수행한다. 
    2. 인코딩된 값의 숫자("12345678")를 특정한 특수문자와 지정해서 매칭해서 변환한다.("!" : 31 ~ ")" : 44까지) 
    3. 'user'와 'password'라는 쿠키에 변환된 값을 각각 할당한다.
  2. 문제해결
    1. 사전 쿠키설정을 역순으로 수행해서 user와 password의 값이 admin과 nimda이면 성공이다.

base64의 결과가 워낙에 20번을 돌리면 길어져서 python으로 스크립트를 만들어서 문제를 풀이했다. 코드의 해석은 주석으로 달아둔다.

import base64
from requests import get

### base64 지정된 횟수만큼 인코딩하는 함수
def base_64_encode_iter(s,count) :
    tmp_val = s
  
    for _ in range(count) :
        if(type(tmp_val) == type("")) :
            tmp_val = base64.b64encode(tmp_val.encode())
        else : 
            tmp_val = base64.b64encode(tmp_val)

    return tmp_val.decode()

### base64 지정된 횟수만큼 디코딩하는 함수(실상 안쓴다. 그냥 해봤다)
def base_64_decode_iter(s,count) :
    tmp_val = s
    
    for _ in range(count) :
        if(type(tmp_val) == type("")) :
            tmp_val = base64.b64decode(tmp_val.encode())
        else : 
            tmp_val = base64.b64decode(tmp_val)

    return tmp_val.decode()

### 지정된 리스트/튜블로 변환하는 함수 사실 string 모듈에 이거 있다.
def mapper_change(s, map_str) :
    tmp_val = s
    for x in map_str :
        tmp_val.replace(x[0],x[1],tmp_val.count(x[0]))
    return tmp_val

if __name__=="__main__" :

	### 변환 리스트 만들기
    num=list("12345678")
    spec=list("!@$^&*()")
    trans_map = list(zip(num,spec))

	### base64인코딩 수행 수 문자열 변환
    admin_id_b64 = base_64_encode_iter("admin",20)
    admin_pw_b64 = base_64_encode_iter("nimda",20)
    result_trans_id_b64 = mapper_change(admin_id_b64,trans_map)
    result_trans_pw_b64 = mapper_change(admin_pw_b64,trans_map)

	### 쿠키설정 후 웹페이지 전달
    url = "https://webhacking.kr/challenge/web-06"
    header = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.77 Safari/537.36"}
    cookie = {"PHPSESSID":"n7bhc7gvaqq27hfftvfb8l534j",
              "user" : result_trans_id_b64,
              "password":result_trans_pw_b64}

    res = get(url, headers=header, cookies=cookie)
    print(res.content)

결과는 아름답다 중간에 old-06 pwned를 확인할 수있다.

b'<html>\n<head>\n<title>Challenge 6</title>\n<style type="text/css">\nbody { background:black; color:white; font-size:10pt; }\n</style>\n</head>\n<body>\n<hr><a href=./?view_source=1 style=color:yellow;>view-source</a><br><br>ID : admin<br>PW : nimda<hr><script>alert(\'old-06 Pwned!\');</script><hr>old-06 Pwned. You got 10point. Congratz!<hr></body>\n</html>\n'

 

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

[Webhacking.kr] old-08 Answer  (0) 2022.07.10
[Webhacking.kr] old-07 Answer  (0) 2022.07.10
[Webhacking.kr] old-05 Answer  (0) 2022.07.10
[Webhacking.kr] old-04 Answer  (0) 2022.07.08
[Webhacking.kr] old-03 Answer  (0) 2022.07.07