WEB/webhacking.kr (old)

webhacking.kr 27번

hongjw 2020. 2. 8. 00:38

level 27 첫화면

SQL인젝션 문제 !

먼저 소스코드를 확인해봐야겠다.

코드를 해석해보면,

GET방식으로 입력된 변수 no에 #,select,(,limit,=,0x가 포함되면 no hack을 출력한다.

입력된 no는 테이블에 있는 데이터를 조회하는 select문에 쓰인다.

select문 결과에서 id가 admin이면, 문제가 해결된다 !

그러나 id는 guest로 고정되어있고, 우리는 no만 바꿀 수 있다.

 

먼저 admin의 no값인 2를 입력해보면, query error가 출력된다. guest의 no=1이므로 올바르지 않은 select문이 만들어졌기 때문이다.

 

올바른 select문을 만들어주기 위해서는 or을 이용해야한다. (FALSE or TRUE = TRUE 원리)

or연산을 이용해 guest는 거짓으로, admin은 참으로 만들어주면 결과적으로 select문은 참이 되어 admin값만 출력하게 될 것이기 때문이다.

따라서, select문은 select id from chall27 where id='guest' and no=(3) or no=2 가 되어야 한다.

'3) or no=2 -- '를 입력하면되지만, 여기서 공백과 =는 우회해줘야한다.

 

공백은 %09로, =은 like를 이용해 우회시켰더니

문제 해결 ~!!~!

 

=> 입력값 : 3) or no like 23)%09or%09no%09like%092%09--%09

처음에 like 대신 in을 쓰려고 했으나 ( 도 필터링이 되어있어서 like로 우회했다. ( 가 필터링되어있으면, 함수를 쓰면 안되겠구나!고 생각해야한다는 ..,

주석도 #를 쓸 수 있지만 #가 필터링되어있어서 --로 대체했다. --를 쓸 때는 --뒤에 꼭 공백을 붙여줘야한다는 것도 까먹지 말기 !!

여기서 맨 마지막에 주석처리를 해줘야하는 이유는, select문에서

select id from chall27 where id='guest' and no=({$_GET['no']}) no를 괄호로 묶어 입력값 뒤에 자동으로 )가 붙기 때문이다.

'WEB > webhacking.kr (old)' 카테고리의 다른 글

webhacking.kr 31번  (0) 2020.02.11
webhacking.kr 21번  (0) 2020.02.11
webhacking.kr 26번  (0) 2020.02.06
webhacking.kr 25번  (0) 2020.02.06
webhacking.kr 23번  (0) 2020.02.05