GOBLIN

2022. 3. 29. 22:42Site/LOS

이번시간에는 GOBLIN에 대하여 작성하겠습니다

아직 공부하는 입장이니 틀린 것이 있더라도 양해부탁드리겠습니다


소스코드를 보니 $db변수에 db를 연결해서 저장을 하고있고

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

두번째 preg_match함수는 get으로 받은 no값중에 ', ", ` 가 있으면 No Quotes ~_~을 출력합니다

$query에 prob_goblin 테이블에서 get으로 받은 id값이 guest이고 get으로 받은 id값을 no에 대입하여 일치는 id값을 저장을 합니다. 그리고 $result의 id값이 있다면 Hello result[id]값 출력하고 id값이 admin이라면 클리어입니다

 

정리하면 이번에는 모든 쿼터부분을 필터링하기 하고 

admin의 id값을 알아내는것이 핵심인 것 같습니다...

 

 

먼저 no에 1을 주었습니다

그랬더는 Hello guest라고 출력이 됩니다

-> guest의 id값 = 1 인 것을 확인

 

이번에는 no에 0을 입력했는데 아무것도 출력이 안되네요

-> 0값을 가진 id가 없다는 것을 확인

 

지금까지를 정리하면은 0값을 가진 id는 없고 1은 guest의 id값인 것을 확인했습니다

여기서 좀 생각을 해봤는데 이 문제를 풀기위해서는 admin의 id값이 필요한데 관리자가 db를 생성할때 guest의 id가 1이라면 admin의 id값도 순차적으로 근처에 있지 않을까라고 생각이 들었습니다

 

따라서 admin의 id값을 2로 가정을 하고 no=0 or no=2 라는 쿼리를 입력하겠습니다

이렇게 되면은 where id='guest' and no=0 or no=2 쿼리문이 작성이 됩니다 

이미 guest로 정해진 id값은 바꿀 수 없으므로 쓰레기 값으로 확인한 0을 no에 넣어주면은 당연히 guest의 id값 1과 일치가 되지않으므로 false값이 나올겁니다

where id='guest' and no=0 or no=2 

위처럼 false값을 넘기고 or 연산자에 들어와 이하에 있는 no=2을 true값으로 반환하여  admin의 id값이 추출될 것 같습니다

 

 

공백에 url인코딩값 %20을 넣어주어 url에 작성하니 클리어 되었습니다

 

 

 

 

 

 

 

 

cf) webhacking.kr level 18[old] 문제랑 비슷한 원리인 것 같습니다

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

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