gremlin

2022. 3. 29. 00:32Site/LOS

이번시간에는 sql injection과 관련된 문제를 풀 수 있는 wargame인 LORD OF SQLINJECTION의 gremlin을 풀어보겠습니다

 

gremlin을 누르니 위의 소스코드가 보입니다

일단 $db변수에 db를 연결해서 저장을 하고있고

preg_match함수를 통해 get으로 받은 id값중에 /prob, _, ., (, ) 가 있으면 No Hack ~_~을 출력하네요

두번째 preg_match함수도 get으로 받은 pw값중에 /prob, _, ., (, ) 가 있으면 No Hack ~_~을 출력합니다

$query에 prob_gremlin 테이블에서 get으로 받은 id값과 pw값이 일치하면 id값을 저장을 합니다

그리고 $result의 id값이 참이라면 클리어 되는 것 같습니다

 

접근방법

$query "select id from prob_gremlin where id='{$_GET[id]}' and pw='{$_GET[pw]}'";

쿼리부분에서 id값 pw값을 아무값을 집어넣어 거짓으로 만들고 or 연산자를 붙여 뒤에 항상 참인값인 1=1을 넣어주면  모든 정보가 출력되므로 클리어 될 것 같습니다

cf) 1 or 1은 항상 참이므로 조건에 or을 추가하여 이러한 방법을 사용하면 앞의 값이 false라도 false or true -> true인 방법으로 접근할 수 있음

 

$query "select id from prob_gremlin where id='gremlin' and pw='1' or '1'='1'";

이렇게 작성을하면 

$query "select id from prob_gremlin where id='gremlin' and pw='1' or '1'='1'";

sql에서 where절에서의 and는 or보다 선행되서 처리되므로 where id  ='gremlin' and pw='1'부분이 먼저실행되서 false가 되고 그다음 or 뒤의 '1'='1'이 실행되어 항상 참인값이 되므로 클리어 할 수 있을것 같습니다

 

 

 

cf) '위치에 신경을 좀 써야 될 것 같습니다

'Site > LOS' 카테고리의 다른 글

darkelf  (0) 2022.03.31
wolfman  (0) 2022.03.31
ORC  (0) 2022.03.31
GOBLIN  (0) 2022.03.29
COBOLT  (0) 2022.03.29