다음과 같은 창이 나와 index.phps 들어가 보았다.

   

나온 코드 php 부분만 가져왔다.

   

먼저 코드에서 eregi 함수를 통해

" ,/,\(,\),\t,\|,&,union,select,from,0x"

같은 문자열이 있으면 종료되게 하였다.

   

$q=@mysql_fetch_array(mysql_query("select id from challenge18_table where id='guest' and no=$_GET[no]")); 

   

if($q[0]=="guest") echo ("hi guest"); 

if($q[0]=="admin"

@solve(); 

echo ("hi admin!"); 

   

코드에서는, no 받아온 것을 통해 쿼리문을 완성하여 받아온 값이 guest이면 'hi guest' 출력하고 admin이면 문제가 풀리게 되어 있다.

   

select id from challenge18_table where id='guest' and no=$_GET[no]

   

no 받아올 인젝션 시켜서 다음 id admin으로 인식되도록 만들어야 한다.

   

일단 입력 창에 여러가지 값들을 넣어 보았다.

1 넣자 hi guest 나왔다.

no 2이면 admin 것이라고 유추하고 문제를 풀어 보자.

   

만약 쿼리문이

select id from challenge18_table where id='guest' and no=123 or no=2

같이 되어 있다면 게스트 로그인에 실패하고 admin 계정으로 로그인 것이다. 하지만 여기엔 공백이 들어가 있으므로 공백 우회가 필요하다.

   

공백 우회의 방법은 여러 가지가 있다.

   

1. tab - %09

2. line feed(\n) - %0a

3. carrage return(wr) - %0d

4. 주석 - /**/

5. 괄호 - ()

6. 더하기 - +

   

공백 우회를 이용하여 값을 입력해 보자.

   

   

결과 문제가 풀린 것을 확인할 있다.

   

다른 방법으로 풀어 보자.

쿼리문을

select id from challenge18_table where id='guest' and no=1 or no=2 limit 1,1

다음과 같이 전달해 주어도 문제가 풀릴 것이다.

guest 계정이 no=1 인해 참이 되고, admin계정이 no=2 인해 참이 되어서 guest admin 결과값이 배열에 차례로 들어가게 된다.

   

이런 경우 admin 값만 선택하기 위해서 limit구문을 사용한다.

   

여기에 공백 우회를 적용하여 값을 입력해 보자.

   

   

역시 문제가 풀린 것을 있다.

   

   

'워게임 > webhacking.kr' 카테고리의 다른 글

webhacking.kr 6번  (0) 2016.09.01
webhacking.kr 14번  (0) 2016.09.01
webhacking.kr 16번  (0) 2016.09.01
webhacking.kr 4번  (0) 2016.09.01
Webhacking.kr 39번  (1) 2016.07.10

다음과 같은 창이 나온다. 소스코드를 보자.

코드를 보고 문제 화면에서 100, 97, 119, 115 아스키코드표에 대응하는 문자 d, a, w, s 키를 누르면 이쁜 별이 나오는 것을 있다.

마우스 오버를 하면 별이 사라진다.

   

이떄 124 아스키코드표에 대응하는 문자 | 누르면 답이 나온다.

   

   

문장에서 문자 번호를 진짜 문자로 바꾸는 fromCharCode 함수를 이용해 124 | 바꾼 현재페이지에서 수를 합친 것에 해당하는 주소로 이동시킨다.

   

다음과 같이 웹페이지가 이동되어 비밀번호가 나타났다.

   

'워게임 > webhacking.kr' 카테고리의 다른 글

webhacking.kr 14번  (0) 2016.09.01
webhacking.kr 18번  (1) 2016.09.01
webhacking.kr 4번  (0) 2016.09.01
Webhacking.kr 39번  (1) 2016.07.10
Webhacking.kr 15번  (0) 2016.07.08

4번을 들어가 보면 다음과 같이 암호화 되어 있는 걸로 보이는 문장이 나온다.

base64에는 bit수를 맞춰주기 위해 '='(padding) 들어가는데, 코드 뒤에 == 들어간 보아 base64라고 유추할 있다(base64 대한 자세한 내용은 암호 카테고리에서 있다).

   

base64 Decode 보니 다음과 같은 문자열이 나왔다. 문자열은 느낌상 16진수 해쉬 같다.

16진수 해쉬 40자리의 해시 함수를 찾아보니 sha1 있어 sha1으로 2 해독하니 답이 나왔다.

   

'워게임 > webhacking.kr' 카테고리의 다른 글

webhacking.kr 18번  (1) 2016.09.01
webhacking.kr 16번  (0) 2016.09.01
Webhacking.kr 39번  (1) 2016.07.10
Webhacking.kr 15번  (0) 2016.07.08
Webhacking.kr 1번  (7) 2016.07.07

+ Recent posts