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 쿠키 값으로 넣어주고 새로고침하면,
해결!
'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 |