webhacking.kr 6번 풀이

2015. 8. 13. 03:13wargame/webhacking.kr

webhacking.kr 6번 풀이

webhacking.kr의 100점짜리로 매우 쉬운 문제이다.

php 소스만 읽을 줄 안다면 약간의 노가다로도 풀어지는 문제고

필자도 처음엔 일일이 인코딩해서 풀었다.




[HINT]


1. base64 Encoding







문제의 첫 화면을 보게 되면 ID : guest 와 PW : 123qwe 을 볼 수 있다.

그리고 HINT인 base64와 php source 파일 링크가 있다.


여기에서 정보는 이 정도이니 phps 파일을 보도록 하자.



소스 파일을 열게 되면 가장 먼저 보이는 소스인데,

먼저 문제 풀이에 쿠키를 사용함을 볼 수 있다. 


이 소스를 해석하자면

만약 user라는 이름의 쿠키가 존재하지 않을 때, 

$val_id  $val_pw인 'guest'와 '123qwe'를 base64 인코딩 20번 반복한다.


그리고 인코딩 한 두 값에서 str_replace() 함수를 이용해 1,2,3,4,5,6,7,8 을 바꾸어 준다.

인코딩 한 두 값을 user와 password라는 이름의 쿠키의 값으로 넣어주고 생성한다.

이다.

여기서 쓰이는 base64란 간단히 말해 

8bit 이진 데이터 ASCII 영역의 문자들(알파벳 대문자, 소문자, 숫자,+,/,=(종결문자))로만 

이루어진 일련의 문자열로 바꾸는 인코딩 방식이다

base64 인코딩 디코딩은 https://www.base64encode.org/ 여기서 가능하다.



리고 6번 문제의 clear 하는 데에 관련된 소스이다.

user와 password라는 이름의 쿠키를 값을 불러와 문자열을 치환한다.

그리고 base64 디코딩을 20번 반복하고 나온 결과 값을 출력한다. 이것이 index.php에서 보았던 ID  PW 값이 되는 것이다.


그리고 이 ID PW가 admin이 된다면 문제는 해결된다.

즉, 6번 문제는 admin을 20번 인코딩한 값을 쿠키에 넣게 되면 풀리게 된다.

(str_replace 같은 경우는 변조해 넣은 쿠키값과 디코딩되어 나온 값 사이에서 전부 일어나는 일이므로 무시해도 된다)

str_replace를 고려하지 않아도 되는 이유는 str_replace에 바꿀 값이 없으면 아무 값도 바뀌지 않기 때문이다

특수문자로 바뀐 값이 str_replace를 거치면 숫자로 바뀐 원래의 base64코드가 반환되지만,

str_replace에 해당되는 특수문자가 없는 원래의 base64코드가 str_replace를 거치면 원래의 base64코드를 반환한다. 

즉, 변조한 값을 넣을 때 str_replace를 고려한 값을 넣으나 마나 for문을 돌기 시작할 때는 같은 base64코드를 decoding한다.


+

위의 주소에서 admin이라는 값을 20번 인코딩 반복하는 방법도 있지만, 코딩을 못 하지 않는 이상 번거로운 작업은 하지 말자.

https://ideone.com

간단한 코드를 작성하고 코드가 제대로 동작하는지 확인하기 좋은 사이트이므로 

코딩하고 확인할 서버가 없는 사람에게 유용하다. 

















'wargame > webhacking.kr' 카테고리의 다른 글

webhacking.kr 17번 풀이  (0) 2018.08.08
webhacking.kr 4번 풀이  (0) 2018.08.08
webhacking.kr 14번 풀이  (0) 2015.08.14
webhacking.kr 6번 풀이  (0) 2015.08.13
webhacking.kr 15번 풀이  (0) 2015.08.13
webhacking.kr 1번 풀이  (0) 2015.08.08