이번 포스트에서는 Lord of SQLInjection의 gremlin 문제에 대해 다루겠다.
문제를 클릭하면 다음과 같이 쿼리와 php코드가 표시된 화면을 볼 수 있다.
## 문제 해석 :
여기서 우리가 주목해야할 줄은 preg_match('/prob|_|\.|\(\)/i', $_GET[id])이다.
preg_match('/prob|_|\.|\(\)/i', $_GET[id])
: preg_match는 php의 필터링 함수이다. 형식은 다음과 같다.
### preg_match('/필터링할 문자/', '입력할 문자')
해당 문제에서는 prob, _, ., (, )를 필터링 한 것을 알 수 있다. 뒤에 붙어 있는 i는 대소문자 구별하지 않겠다는 뜻이다.
즉, 해당 문제는 prob과 _를 필터링함으로써 특정 테이블에 접근하지 못하도록 막고, ()를 필터링함으로써 특정 함수의 사용을 차단했다.
## 문제 풀이 :
- $result 값이 존재하게끔 하면된다.
- 문제의 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 |