문제
페이지 소스코드

소스코드를 간단히 요약하면

 

1. 우리가 입력하는 값은 'no'라는 이름으로 index.php에 GET 방식으로 넘겨진다.

2. 입력 시 공백  /   (   )   |    &   select   from   0x 문자열은 모두 걸러진다.

3. 우리가 입력하면 select id from chall18 where id='guest' and no=$_GET[no] 이 문장에 들어가게 된다.

 

1을 입력

1을 입력하니 hi guest 문자열이 뜬다.

우리는 admin의 no는 2라는 것을 알고 있다.

따라서 우리는 id가 admin이고 no=2일 때의 result가 나오게 하면 된다.

 

SQL 인젝션 공격으로 문제를 해결해보겠다.

 

where id='guest' and no=입력값

 

where 절에서 true와 false의 경우로 생각해보자.

 

TRUE and TRUE -> TRUE

TRUE and FALSE -> FALSE

TRUE or FALSE -> TRUE

(TRUE and FALSE) or TRUE -> TRUE

 

그러면 우리는 FALSE가 되게 하는 값을 입력해주고 or 로 TRUE 문을 연결해주면 되겠다.

 

입력 : 0 or no=2

 

하지만 이 문제에선 입력할 때 GET 방식으로 요청을 처리하고, 공백을 필터링 해주고 있으므로

URL 창에 입력 & 공백 자리는 URL 인코딩 방식으로 적어준다.

 

 

URL 인코딩 표 참고https://0x3700.tistory.com/entry/SQL-%EC%9D%B8%EC%A0%9D%EC%85%98-%EA%B3%B5%EB%B0%B1-%EC%9A%B0%ED%9A%8C-URL-Encode

:: 공백 문자 필터링 우회 시 %09를 사용한다.

 

 

+ Recent posts