4 건의
hacking 검색결과
  1. 2014.06.19 rootnix
  2. 2014.06.17 rootnix
  3. 2014.06.13 rootnix
  4. 2014.06.10 rootnix

Webhaking.kr 3번 문제




문제를 들어가보자




이런 퍼즐판을 보게되는데

소스보기를 해봐도 딱히 넘어가는방법은 찾지못했다.

근데 퍼즐판이 옛날에 해본 퍼즐과 유사해서 직접 풀어봤다.

무튼 비슷한 퍼즐을 학교다닐때 해봤고

숫자가 그 줄의 체크되어야 하는 갯수이다.



체크된곳과 숫자들을 보면 대충 어떤 느낌인지 알 것이다.

그 줄에 표시된 숫자만큼 색이 채워질 수 있다.

숫자들이 겹치는 부분에 체크를 하다보면

이렇게 퍼즐을 풀 수 있다.

gogo 해보자




이런 화면을 만나게 되고,

느낌이 SQL Injection 이다.


아무거나 입력을 해보면



이런식으로 입력한 데이터들을 보여준다.


실제로 name 과 answer 값을 POST로 넘기고있는걸 확인할 수 있다.

즉 name 또는 answer 값을 조작하여 SQL Injection 을 시도하면 되는데,

여러 SQL Injection 구문을 사용해 보면 no hack 이라는 단어를 만나기 쉽다.

우리가 평소에 쓰는 or 등도 필터링 되어있어서 시도할 수 없다.


그래서 나는 answer 부분 맨 뒤에 or 대신 or와 같은 역할을 가지고있는 || 를 넣고 true 를 리턴하게 했더니

문제를 해결하게되었다.



 = 도 필터링이 되어있어서

||1 을 보내주고 이름은 위와 같이 zxcv 를 주었다.




여기에서 보여주는 answer 에 authKey를 출력해준다.

이 authKey로 인증하면 3번을 클리어하게된다.

'Security > Wargame' 카테고리의 다른 글

[Webhacking.kr] Challenge 5  (0) 2014.07.10
[Webhacking.kr] Challenge 4  (0) 2014.07.10
[Webhacking.kr] Challenge 3  (0) 2014.06.19
[Webhacking.kr] Challenge 2  (5) 2014.06.17
[Webhacking.kr] Challenge 1  (0) 2014.06.13
[Webhacking.kr] Challenge 8  (0) 2014.06.10

Webhacking.kr 의 2번 문제.

예전에 대회에서도 나왔던 문제였던걸로 기억하는데..

꽤 어려웠던 문제

이번에 풀면서도 한참 헤매게된 문제이다.

차근차근 한번 풀어보자








해킹대회/워게임을 열심히 하는 사람들에게 "홍길동문제"라고 물어보면 다들 이 문제를 떠오르게 될만한 메인화면

홍길동이 명상을 잘 하고 있는 그림이 나온다.


홈페이지 환경으로 문제를 구축해두었는데.

각 메뉴마다 들어가보면서 와.. 무슨말인지모르겠다 라고 한번씩 느껴주자.


그리고 메인화면으로 돌아와 소스보기를 한번 해보자.





이 소스에서 눈여겨 봐야할 몇가지가 있다.



 <area shape="rect" coords="851,7,890,65" href="admin/" target="" alt="" />

1. admin 페이지가 노출되어있다는 것.



 <!--2014-06-16 02:23:52--></td>

2. 알수없지만, 시간정보가 주석처리 되어 있다는 것.


그리고 메뉴들을 돌아다니다 보면

board 메뉴에서 다음과 같은 화면을 볼 수 있다.





매우.. 넌 이 비밀번호를 알아야 이 문제를 풀 수 있어. 같은 느낌을 주는 화면이다.


또 아까 html 소스에서 본 admin 페이지에 접속을 해보자.


admin페이지도 마찬가지로..

여길 뚫어야만해 라는 느낌을 팍팍 준다.


종합해보면.

1. admin 페이지 암호를 알아내야 한다.

2. board 게시판의 oldzombie의 게시글 암호를 알아내야한다.

3. main 페이지에 알수없는 시간정보 주석문이 있다.

이다.


또 한가지, 이 문제에 접속하게되면서

쿠키값이 새로 구워진것이 있다.



 time=1402896232

이러한 값이다.

이 time값을 date형식으로 변환하게 되면,

3번의 시간정보 주석문의 시간이 나온다.


즉 3번의 시간정보 주석문은 time 쿠키값으로 정해진다.

또 한가지 테스트를 통해 알아낼 수 있는 것은

이 쿠키값으로 SQL쿼리가 동작한다는것을 알 수 있다.



Cookie: time=1402896232 and 1=1

=> <!--2070-01-01 09:00:01--></td>


Cookie: time=1402896232 and 1=0

=> <!--2070-01-01 09:00:00--></td>

이와 같은 쿼리를 보냈을때, 쿼리 결과가 true 일 경우 맨뒤의 초가 1

false 일 경우 0 인 것을 확인할 수 있다.


즉 우리는 이 부분을 통해서 Blind SQL Injection 을 행할수 있고,

결과적으로 board 의 비밀번호나 admin의 비밀번호를 DB로 부터 찾아낼 수 있는것이다.


예전에 해당 문제에 힌트가 있었는데, 검색해보니 다음과 같다.


 board table name: FreeB0aRd

 admin table name: admin


이 힌트를 통해서 Board 의 암호는 FreeB0aRd 테이블에서,

admin 페이지의 암호는 admin 테이블에서 Blind SQL Injection 을 통해

알아오면 되겠다.



 Cookie: time=123141232 and (select ascii(substr(password,1,1))from admin)=32

와 같은 방법으로 Blind SQL Injection 을 통해

admin 페이지의 암호를 알아내고



 Cookie time=123123123 and (select ascii(substr(password,1,1))from FreeB0aRd)=32

와 같이 Board의 암호를 알아내면 되겠다.

이 암호를 알아내는 Python 코드는 아래에 첨부된 파일을 참고하면 되겠다.



challege2.py



암호를 모두 알아내면,

게시판에 접근하여 글을 읽으면 다음과 같은 글이 있다.



admin manual 을 클릭하면 파일을 다운로드 받을 수 있다.

zip 파일을 받게되는데.. 암호로 묶여있어서 암호를 풀 수 없다.


또 우리가 알아낸 admin 페이지 암호로 admin페이지에 접속해보자.




다음과 같은 화면을 볼 수 있고,

여기서 알려주는 메뉴얼 패스워드로 압축을 해제하면

manual.html

파일을 얻을 수 있다.

브라우저나 에디터로 열어보면 인증암호를 획득할 수 있다.






'Security > Wargame' 카테고리의 다른 글

[Webhacking.kr] Challenge 4  (0) 2014.07.10
[Webhacking.kr] Challenge 3  (0) 2014.06.19
[Webhacking.kr] Challenge 2  (5) 2014.06.17
[Webhacking.kr] Challenge 1  (0) 2014.06.13
[Webhacking.kr] Challenge 8  (0) 2014.06.10
[ftz.hackerschool.org] Level 1  (0) 2012.09.20

WebHacking.kr 을 1번부터 풀이해볼까 한다. [끝까지 다할 수 있을지는...]


1번 문제를 보자




위의 문제를 접속해보자







별거 없는 화면이다.


index.phps 라는 문구가 있는데,

현재 이 화면을 보여주는 url 주소를 보게되면


http://host/challenge/web/web-01/

라는 주소이다.


web-01/ 뒤에는 기본으로 보여줄 index 페이지 주소가 생략되어있는 것.

index.html, index.htm, index.php, index.jsp, index.asp, defaul.html

등 현재 Directory 의 메인페이지를 보여줄것이다.


화면에서 보여주는 문구를 보아

현재 페이지는 index.php

일 것이고, index.phps 를 열어보라는 의미일 것이다.



.phps 확장자는 PHP Source 파일의 약자로

해당 php 의 소스를 저장하는 파일로 쓰여지고 있다.


즉 문구에서 보여주는 index.phps 는 페이지의 소스를 보고 문제를 풀라는 뜻이 되겠다.

(일종의 힌트...? 문제를 보여주는것)


index.php 파일을 열어보자



http://host/challenge/web/web-01/index.phps





다음과 같은 화면을 보게될 것이다.

방금 우리가 보았던 페이지의 소스이다.


이 페이지는 php 와 html로 구성된 것을 알 수 있다.


문자를 해결하기 위해선 소스를 분석해서 문제점을 찾아내고, 문제점을 통해 공격해가면 되겠다.


html 소스는 우리가 볼 필요가 없고,

php 소스를 보고 문제점을 찾아보자



이 소스부분과

이 소스부분으로 나누어져 있다.


보게되면 페이지를 로드할때 Cookie값에 user_lv 라는 값이 없으면 user_lv=1 값으로 쿠키를 구워준다

그럼 처음접속한 사용자는 user_lv 의 쿠키값은 기본으로 1을 가지고 있게된다.


그리고 아래의 소스를 보게되면 3개의 if문으로 조건을 저리하는데


첫번째 if문은 정규식을 이용하여  패턴에 해당되는 쿠키값을 쓰게되면 값을 1로 설정해버린다.

두번째는 쿠키값이 6이상이면 1로 설정해버린다.

세번째는 쿠키값이 5보다 크면 문제를 클리어한다.


위의 조건을 만족해야 문제를 클리어하게되는데

5보다 커야하고 6보다는 작아야한다.

5 다음은 6인데 어떻게......?

5 도 안되고 6도 안된다.

그럼 5와 6사이엔 어떤 숫자가 있지?


소수점을 이용하면 이 문제는 해결할 수 있다.

정수로는 5와 6사이의 값이 존재하지않지만.

실수로는 존재하기 때문에, 5.1~5.9 의 값을 이용하여 문제를 해결할 수 있겠다.


쿠키값을 변조하는 방법은 javascript 를 이용하여 직접 변경할 수 도있고,

Cooxie Toolbar 를 이용하거나, EditThisCookie와 같은 인터넷확장프로그램을 이용해도 간단하게 해결할 수 있다.



필자는 javascript 를 이용하여 해결하는 방법을 게시하겠다.


브라우저는 기본적으로 주소창에서 javascript 를 지원한다.

즉 이 문제에선 브라우저 주소창을 통해서 javascript 로 쿠키값을 보거나, 변조할 수 있다.


주소창에 javascript:alert(document.cookie); 라고  적고 엔터를 눌러보자




위와 같은 메세지창을 확인 할 수 있을것이다.

(박스가 큰 이유는 다른 쿠키값들도 있는데, 필자가 보이지않도록 블러처리하였다)


그럼 user_lv=1 이란 값을 볼 수 있는데, 이 쿠키는 페이지에 처음 접속했을때

php 소스에 의해 구워진 쿠키이다.


그럼 이 쿠키값을 5.1~5.9의 값으로 설정시켜주면 된다.



 javascript:alert(document.cookie="user_lv=5.5");

브라우저 주소창에 위와 같이 입력해보자




다음과 같은 메세지를 볼 수 있는데, 위의 값으로 쿠키값을 변조한 것이다.


확인을 누른 후 새로고침을 해보면




위와 같은 메세지박스가 뜨고 문제를 클리어했다.



'Security > Wargame' 카테고리의 다른 글

[Webhacking.kr] Challenge 3  (0) 2014.06.19
[Webhacking.kr] Challenge 2  (5) 2014.06.17
[Webhacking.kr] Challenge 1  (0) 2014.06.13
[Webhacking.kr] Challenge 8  (0) 2014.06.10
[ftz.hackerschool.org] Level 1  (0) 2012.09.20
[Wargame.kr] Login Fillttering  (0) 2012.08.09



요 몇일째 웹해킹에 재미들려서 webhacking.kr 을 열심히 풀어헤치는중

다른 문제들도 풀이를 하나씩 써 나갈거지만 8번 문제를 풀다가 풀이가 쓰고 싶어서 먼저 써본다.




8번문제 링크에 접근하게 되면



이와 같은 화면을 보게 된다.



일단 문제를 풀기 위해 소스를 한번 살펴보자

/index.phps

로 접하게되면 다음과 같은 소스를 볼 수 있다.




문제를 solve 하기 위해선 'lv0' 테이블의 id가 admin 이어야 solved 된다.

이 id를 구해오기 위해서 'HTTP_USER_AGENT' 를 where문으로 찾는다.


그리고, 해당 'HTTP_USER_AGENT'의 대한 데이터가 없으면, 새로운 'guest' ID의 데이터를 추가하게 된다.


즉 우리가 해야 하는건, admin 이란 id를 가진 agent 를 추가해야하는데,

우리는 agent 값을 조작해서, insert 구문에 SQL Injection 을 행하는 방법이다.



우리가 먼저 알아야 할 것이 있는데,

Insert 문은 한번에 하나의 데이터만 삽입해야하는 것이 아니다.

다시 말해, insert는 여러개의 데이터를 한번에 삽입할 수 있다.



위의 예제를 보면, VALUES 에 여러개의 괄호로 여러개의 데이터가 삽입 가능하다.


즉 우리는 이 문제를 해결하기 위해서

첫번째 데이터에 임의로 데이터를 넣어주고,

두번째 데이터는 서버사이드스크립트에 의해 삽입되도록 두번

2개의 데이터가 삽입될 것이고.


해당 문제는 1번 Index 의 값을 가져와 체크하기 때문에

우리가 넣은 첫번째 데이터를 검사하게 될 것이다.


그렇게 되면 우리가 첫번째로 넣음 admin 데이터에 의해서

문제가 해결될 것이다.


그럼 실제로 문제를 풀어보자


'HTTP_USER_AGENT'를 조작하기 위해서는 HTTP REQUEST를 수정할 수 있어야 하는데.

이는 HTTP REQUEST 툴이나, 파로스 또는 직접 코딩을 하여 조작하면 되겠다.


필자는 Python 을 통해 코드를 작성하여 문제를 해결 하였다.




위와 같이 UserAgent 를 통해 SQL Injection 을 수행한다면
해당 문제를 풀이하는 결과를 볼 수 있다.


'Security > Wargame' 카테고리의 다른 글

[Webhacking.kr] Challenge 2  (5) 2014.06.17
[Webhacking.kr] Challenge 1  (0) 2014.06.13
[Webhacking.kr] Challenge 8  (0) 2014.06.10
[ftz.hackerschool.org] Level 1  (0) 2012.09.20
[Wargame.kr] Login Fillttering  (0) 2012.08.09
[Wargame.kr] Flee Button  (0) 2012.08.09

티스토리 툴바