본문 바로가기
워게임/LOS

[los - SQL injection] goblin ( 3단계 )

by B T Y 2017. 9. 23.
반응형

[los - SQL injection] goblin ( 3단계 )







[ 풀이과정 ]



goblin 문제도 이전 문제와 같이 if($result['id'] == 'admin') 조건이 만족이 되야 풀리는 문제이다..


prob  _  .  (  )  '  "  ` 기호가 모두 막혀있어서 다른 테이블로의 접근이나 쿼터사용이 불가능해졌다.


id의 값은 guest로 고정이 되어있고 no값을 이용해서만 sql injection이 가능한데 

no는 string이 아닌 numeric 값을 받는다.


no에 1을 넣었을때 Hello guest라는 문자가 출력되는걸 확인하고 guest는 첫번째 행에 있는걸 추측 해볼 수 있다..

그렇다면 guest가 어떤 no에 있는지를 알았기 때문에 앞의 쿼리를 만족하지 못하도록

no 값에 2를 주고 뒤이어 union을 이용해서 union select char(97,100,109,105,110)을 입력해주는데

아스키코드값과 char() 함수를 이용해서 실행이 되면서 union select 'admin'으로 실행이 된다.


char() 함수는 SQL 내장함수로 아스키코드값을 해당 문자로 변경해서 반환해주는 역할을 한다.


그리고 numer SQL injection을 할때는 공백을 이용해서 뒤에 SQL 쿼리문을 이어갈 수 있다.

이렇게 되면 앞의 쿼리에는 만족하는 조건이 없어서 출력이 안될테고

그렇게 되면 뒤에 컬럼의 결과만 출력이 되는데 이때 union에 의해서 해당 컬럼에 같이 출력 된 내용이

mysql_fetch_array() 함수로 인해 $result의 결과를 확인하면 admin에 대한 한줄의 행을 가져오게된다.


SQL 내장함수인 char() 함수를 이용한 이유는 문자로 표현하려면 쿼터를 이용해야 하는데 

여기서는 앞에 말했다시피 쿼터가 모두 막혀있기 때문에 char함수를 이용해서 문자로 변환해줬다.


select id from prob_goblin where id='guest' and no=2 union select char(97,100,109,105,110)





3단계 클리어~~~




반응형

댓글