Yozzang의 해킹일기 💻
article thumbnail
728x90

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


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

phantom

## 문제 해석 :

해당 문제는 preg_match() 함수를 통해 duplicate를 필터링하고 있다는 것을 알 수 있다.

또한 no=1의 email값을 알아야 문제를 해결할 수 있는 것으로 보인다.

## 문제 풀이 :

일단 joinmail 파라미터에 아무 값을 넣어서 결과를 확인해보겠다.

### 사용할 공격문 : joinmail=haha

### 실행 결과 :

1차 시도

테이블에 no=0, ip, 'haha'가 새로 삽입된 것을 확인할 수 있다.

 

insert문은 별도의 필터링이 없다면 여러 열을 삽입할 수 있는 취약점이 존재한다.

해당 취약점을 활용하여 공격해보겠다.

### 사용할 공격문 : joinmail=haha'), (0, 'ip', (select email from prob_phantom where no = 1)) %23

### 실행 결과 :

2차 시도

아무런 반응이 일어나지 않았다.

 

검색해본 결과 mysql은 쿼리문 내에서 같은 테이블을 참조할 때 오류가 생긴다고 한다.

따하서 as문을 이용하여 테이블에 별칭을 추가한 다음에 공격을 시도해보겠다.

### 사용할 공격문 : joinmail=haha'), (0,'ip',(select email from prob_phantom as a where no=1)) %23

### 실행 결과 :

email 출력 성공

### 최종 공격문 : 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로 치환한 다음에 공격을 시도한다.

profile

Yozzang의 해킹일기 💻

@요짱

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