안녕하세요. Message입니다.
Webhacking.kr Lv6 문제풀이 달립니다!
! 빠른 문제풀이 보다는 풀이과정 속에서 이것 저것 배우는것을 목표로 합니다.
------------------------------------------------------------------------------------------------------------------------------------------
1. 문제분석
------------------------------------------------------------------------------------------------------------------------------------------
6번 문제에 접속합니다.
Hint로 base64가 주어졌고, ID와 PW가 써져있군요....?!
소스코드를 살펴보면 초기 Cookie 값을 설정하기 위해
20번의 base64 인코딩과 특수문자 치환을 하고 있음을 알 수 있습니다.
이후 동일하게 base64로 디코딩 과정을 거치고 있군요!
디코딩 결과값이 "admin" 인 경우에 solve 함수를 호출합니다.
------------------------------------------------------------------------------------------------------------------------------------------
2. 문제풀이
------------------------------------------------------------------------------------------------------------------------------------------
우리가 문제를 풀이하기 위해서는
20번의 디코딩 + 특수문자 치환 => "admin" 이라는 결과값을 만들어 내야 합니다.
즉, 반대로 "admin" 값을 20번 인코딩 한후 특수문자 치환을 하고나서
아래의 Cookie 값에 설정하면 됩니다.
전 이번 문제를 해결하기 위해 룰루랄라 하면서
파이썬으로 간단히 20번의 for문을 작성했습니다.
아래와같이 말이죠! 심지어 이번 문제는 삽질 없이 빨리 끝내겠네~ 라는 생각과 함께요
id = base64.encodestring(id)
그런데...안되더군요
인코딩 방법을 바꾸어 보았습니다.
id = id.encode("base64")
안됩니다. 뭐가 문제지 싶었습니다.
삽질끝에 알고 왔더니 encodestring과 encode("base64")에 포함된 개행문자 "\n" 때문입니다.
encodestring의 경우는 print로 찍어보면 print 메소드 자체의 개행문자까지 총 2번의 개행이 됨을 볼 수 있습니다.
이를 해결하기 위해 rstrip 함수를 사용한다고 해도 아래 그림처럼
8번째 줄부터는 자동으로 개행 문자가 삽입되어 우리가 원하는 값을 얻을 수 없습니다.
물론, 개행문자가 들어갔다 하더라도 동일 함수로 디코딩 하면 최초 문자열인 "admin"이 나옵니다.
결과적으로 제가 원했던 "파이썬 코딩을 이용한 해결"은 b64encode 함수를 써야합니다.
그러면 아래와 같이 개행문자가 삽입되지 않고 결과값이 나옴을 볼 수 있습니다.
WebHacking 홈페이지에서 제공하는 base64 인코딩 기능을 사용하는 방법도 있습니다.
특수문자를 치환하는 부분은 딱히 치환되는 부분이 없기 때문에
단순히 디코딩만 20번 해준뒤에 Coockie 값을 변경해주면
문제를 해결할 수 있습니다.
그냥 삽질만 하면 아쉬운것 같아서, Tab이 허전한 RDT에 BASE64 탭을 추가했습니다.
이번 케이스를 통해서 BASE64 인코딩이나 디코딩이 여러번 중첩되는 경우
놓치는 부분을 최소화 하기 위해 , XOR 연산처럼 횟수를 지정할 수 있도록 구현했습니다.
그래도 삽질 끝에 뭔가 하나라도 얻었으니 다행이네요.
':: 문제풀이 > WebHacking,kr' 카테고리의 다른 글
webhacking.kr 문제풀이 - Lv8 (0) | 2016.11.06 |
---|---|
webhacking.kr 문제풀이 - Lv7 (0) | 2016.11.04 |
Red_Message :: webhacking.kr 문제풀이 - Lv5 (0) | 2016.08.12 |
Red_Message :: webhacking.kr 문제풀이 - Lv4 (0) | 2016.08.06 |
Red_Message :: webhacking.kr 문제풀이 - Lv3 (0) | 2016.08.05 |