Yozzang의 해킹일기 💻
article thumbnail
728x90

이번 포스트에서는 Lord of SQLInjection의 gremlin 문제에 대해 다루겠다.

 


문제를 클릭하면 다음과 같이 쿼리와 php코드가 표시된 화면을 볼 수 있다.

 

gremlin

## 문제 해석 : 

여기서 우리가 주목해야할 줄은 preg_match('/prob|_|\.|\(\)/i', $_GET[id])이다.

 

 preg_match('/prob|_|\.|\(\)/i', $_GET[id])

: preg_match는 php의 필터링 함수이다. 형식은 다음과 같다.

### preg_match('/필터링할 문자/', '입력할 문자')

 

해당 문제에서는 prob, _, ., (, )를 필터링 한 것을 알 수 있다. 뒤에 붙어 있는 i는 대소문자 구별하지 않겠다는 뜻이다.

즉, 해당 문제는 prob과 _를 필터링함으로써 특정 테이블에 접근하지 못하도록 막고, ()를 필터링함으로써 특정 함수의 사용을 차단했다.

 

## 문제 풀이 :

  1. $result 값이 존재하게끔 하면된다.
  2. 문제의 ID와 비밀번호를 다 모르기 때문에 해당 쿼리를 참으로 만든다.

### 사용할 공격문 : id=&pw=' or '1' = '1

### 실행 결과 : 

공격 성공

## 추가 해석 : 

쿼리문 : select id from prob_gremlin where id='' and pw=''or'1'='1'

OR연산자는 AND연산자보다 늦게 처리되기 때문에 해당 쿼리문은 다음과 같다.

*** select id from prob_gremlin where id='' and pw=''or'1'='1' ***

즉, prob_gremlin라는 데이터베이스에서 id를 가져온다가 된다.

 

or'1'='1' = or 1과 같으며, 0 or 1의 값이 1이고 1 or 1의 값도 1이기 때문에 해당 쿼리문은 무조선 1(참)일 것을 의미한다.

'Wargame > Lord of SQLInjection' 카테고리의 다른 글

Lord of SQLInjection (6. darkelf)  (0) 2022.05.19
Lord of SQLInjection (5. wolfman)  (0) 2022.05.18
Lord of SQLInjection (4. orc)  (0) 2022.05.17
Lord of SQLInjection (3. goblin)  (0) 2022.05.16
Lord of SQLInjection (2. cobolt)  (0) 2022.05.15
profile

Yozzang의 해킹일기 💻

@요짱

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!