본문 바로가기

Web/wargame

[Webhacking.kr] old-06

view-source 를 클릭해서 소스코드를 보자. 2개의 부분으로 나눠서 보려고 한다.

 

user 라는 쿠키 값이 존재하지 않다면, guest 와 123qwe 를 변수 val_id 와 val_pw 에 각각 대입,

for문을 통해 변수 val_id 와 val_pw 를 20번 base64 인코딩,

인코딩된 val_id 와 val_pw 를 str_replace() 를 통해 문자 치환,

변환된 val_id 와 val_pw 를 user 쿠키 값과 password 쿠키 값으로 지정.

 

base64_encode()

64진법. 0부터 63까지 각각 문자를 지정해준 후, 그에 맞게 문자를 치환하는 방식.

즉, 이진 데이터를 ASCII 문자열로 바꾸는 인코딩 방식을 의미함.

참고 https://poci.tistory.com/56?category=340024 

 

Setcookie(쿠키 명, 쿠키 값, 만료시간, 경로, 도메인, 보안, httponly);

- 쿠키 명은 필수

- 만료시간은 초단위로. 문제에서는 time()+86400 이므로 24시간을 쿠키 값으로 설정하였음. default는 0

- 경로를 지정할 경우 특정 위치와 하위 경로에서만 사용 가능하도록 설정됨

- 사용될 도메인 지정 가능

참고 https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&blogId=aneminw&logNo=220991183903 

 

개발자 도구로 쿠키를 확인해보면 user 쿠키 값과 password 쿠키 값이 base64로 인코딩되어 있는 것을 볼 수 있다. ↑

 

user 쿠키 값과 password 쿠키 값을 각각 변수 decode_id 와 decode_pw 에 대입,

str_replace() 를 통해 decode_id 와 decode_pw 의 특수문자를 숫자로 치환,

for문을 통해 decode_id 와 decode_pw 를 20번 base64 디코딩,

메인 화면에 view-source, decode_id, decode_pw 출력,

만약 decode_id 값이 admin 이고, decode_pw 값이 nimda 면 문제 해결.

 

즉, admin 과 nimda 를 20번 base64 인코딩 → 숫자를 특수문자로 치환 → 각각 user 와 password 쿠키 값으로 대입하면 다시 디코딩 과정을 거쳐서 문제가 해결될 것으로 보인다. 

 

파이썬을 사용해서 코딩했다. 주의할 점은 base64 함수에서 암호화하기 위해서는 문자열(유니코드)을 UTF-8 형식의 byte코드로 인코딩해줘야 하고 나중에 다시 반대로 디코딩해줘야 한다.

위의 코드를 실행시키면,

 

이렇게 id와 pw의 값이 나온다.

 

각각 user 쿠키 값과 password 쿠키 값으로 넣어주고 새로고침하면,

 

해결!

 

참고 https://h-bread.tistory.com/12

'Web > wargame' 카테고리의 다른 글

[Webhacking.kr] old-26  (0) 2021.11.07
[Webhacking.kr] old-20  (0) 2021.10.31
[Webhacking.kr] old-18  (0) 2021.10.02
[Webhacking.kr] old-14  (0) 2021.09.26
[Webhacking.kr] old-17  (0) 2021.09.24