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 |