본문 바로가기

Hacking/- Webhacking.kr

[Webhacking.kr] Problem 02-1

반응형

2번 문제는 500점에 해당하는 문제로 "홍길동 문제"라고 불리는 악명 높은 문제이다.


문제 링크


이 문제의 경우 소스코드의 취약점을 찾고 그것을 통해서 데이터를 빼내는 방법을 알아내어야 한다. 문제 이름이 "홍길동 문제"인 이유는 아래와 같이 문제 사이트에 들어가면 홍길동이 명상을 하고 있는 모습을 볼 수 있기 때문이다.



먼저 메인 페이지의 소스코드를 열고 내용을 뒤지다보면 admin/이라는 수상한 링크를 볼 수 있다.



그래서 이 링크가 관리자 페이지로 갈 수 있는 링크라고 생각을 하여 직접 링크에 접속을 하였더니 admin 페이지라고 하면서 password를 입력해야만 접근이 가능하도록 되어 있었다. 물론 이것을 BruteForce로 일일히 대입을 해서 공격을 할 수는 없기 때문에 패스워드에 대한 정보를 가지고 있는 것을 알아내어야 한다.



일단 admin 페이지에서는 더이상 할 수 있는 것이 없기 때문에, 메인 페이지에서 들어갈 수 있는 다른 링크들에 직접 접속해서 다른 정보를 얻을 수 없는지 확인해보았다.

게시판에 들어가보니 비밀글로 글이 하나가 작성되어 있다는 것을 확인할 수 있었다. 보통 게시물의 경우에는 Mysql과 같은 데이터베이스를 통해서 관리가 되기 때문에 sql injection을 통해서 비밀번호를 가지고 오면 된다는 것을 추측할 수 있었다.



다른 링크에서는 주석부분까지 확인을 했지만 아무런 정보를 얻을 수가 없었다. 그런데, 다시 메인 페이지로 돌아가서 소스코드를 보았더니 다음과 같은 주석을 확인 할 수 있었다. 시간에 대한 정보를 출력하는데, 이 출력된 값이 지금 시간이 아닌 과거의 사간으로 설정되어 있는 것을 확인할 수 있었다.



그렇다는 소리는 어디에선가 시간에 대한 정보를 저장하고 있다는 것을 의미하였고, 이 때 쉽게 생각할 수 있는 것이 시간에 대한 정보를 쿠키 값으로 저장하고 있는 것이었다. 그래서 쿠키값을 확인해본 결과 time이라는 못보던 쿠키값이 생겨 있는 것을 확인할 수 있었다.



그리고 이 쿠키값에는 우리가 알고 있는 시간 형식으로 값이 들어 있지 않고, 자연수 값으로 들어간 것을 확인할 수 있었다. 즉, 쿠키가 만들어진 시간의 timestamp값을 담고 있는 것을 알 수 있었다. 물론 php에서도 timestamp를 우리가 보기 편한 형식으로 바꾸어서 출력을 해주는 함수가 있기도 했지만, 혹시 Mysql을 통해서 출력을 하고 있지 않을까 싶어서 time 쿠키에 1458045202 AND 1=1를 넣어 주고 주석을 확인해보았다.


위의 사진처럼 에러를 출력하지 않고 정상적으로 값을 출력하는 것으로 보아 이 부분이 Mysql을 이용해서 출력한다는 것을 알 수 있었다.

<!--<?=mysql_fetch_row(mysql_query("SELECT FROM_UNIXTIME("+$_COOKIE['time']+")"))[0];?>-->


일단 글이 한 번에 올라가지 않아서 뒷 부분의 내용은 다음 글에서 살펴보도록 하겠다...


반응형

'Hacking > - Webhacking.kr' 카테고리의 다른 글

[Webhacking.kr] Problem 03  (0) 2016.07.11
[Webhacking.kr] Problem 02-2  (0) 2016.03.19
[Webhacking.kr] Problem 01  (1) 2016.03.12
[Webhacking.kr] 0. webhacking.kr 소개  (0) 2016.03.10