2016. 8. 13. 20:23 :: 문제풀이/WebHacking,kr

안녕하세요. 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 연산처럼 횟수를 지정할 수 있도록 구현했습니다.

그래도 삽질 끝에 뭔가 하나라도 얻었으니 다행이네요.

posted by Red_Message