뉴비에욤

Webhacking.kr 59번 본문

Webhacking.kr

Webhacking.kr 59번

초보에욤 2015. 8. 16. 23:45

 

(LOGIN Form 제출 클릭 시)

POST 메소드로 전송되는 id, lv 파라미터 값을 쿼리문에 포함하여 c59 테이블에서 id,lv

컬럼 값을 조회한다.

 

조회한 id가 존재하는 경우 id,lv 컬럼 값을 출력한다.

그리고 lv 컬럼 값이 "admin" 인 경우 문제가 풀린다.

 

 

(JOIN Form 제출 클릭 시)

phone 파라미터 값의 길이가 20글자 이상이면 오류가 발생한다.

id 파라미터의 값이 "admin"인 경우 오류가 발생한다.

phone 파라미터 값 내에 "admin, 0x, #, hex" 등 magic_quotes_gpc 우회해 사용되는 함수가

존재하는 경우 오류가 발생한다.

 

인젝션 포인트는 바로 INSERT 쿼리에서 사용되는 $phone 변수이다.

특히 $phone 변수 앞, 뒤쪽에 싱글 쿼테이션(')이 없는 것으로 보아 정수만 입력할 수 있다.

 

 

위와 같이 입력하면 실행되는 INSERT 쿼리는 다음과 같다.

- INSERT INTO c59 VALUES ('test', 1, 123)-- ,'guest'

- INSERT INTO c59 VALUES ('test', 1, 123)

 

주의할 점은 주석을 의미하는 '--' 끝에 공백이 존재해야 풀리는데 이유는 잘 모르겠음...

'-- ' <- 이것처럼 입력

 

 

 

JOIN 하고 Login 해보면 위와 같이 출력된다.

(캡쳐 순서 잘못해서 lv 값이 '1234'로 출력되었는데 '123' 으로 출력되는게 맞음)

 

 

 

어쨌든 인젝션 포인트는 알아냈으니 이제 "admin" 문자열을 만들어야 된다.(필터링에 걸리는게 문제)

 

우선 알아두어야 하는 것은 INSERT 쿼리 사용시 VALUES 부분에 문자열 대신 컬럼을 지정할 수 있다는 점이다.

- INSERT INTO member(id,lv) VALUES ("test", id);

- 위와 같이 lv 컬럼의 VALEUS 부분에 id 컬럼을 입력한다.

- SELETE 쿼리를 실행시키면 다음과 같은 결과가 나올 것이다.

+------+------+

|    id    |   lv    |

+------+------+

|   test  |   test  |

+------+------+

 

 

위와 같이 입력하면 다음과 같은 쿼리가 실행된다.

- INSERT INTO c59 VALUES ('nimda', 1, reverse(id))

- reverse 함수는 인자로 들어온 값을 거꾸로 출력한다.

- id 부분에 "nimda" ("admin" 거꾸로) 가 입력되었으니 reverse(id)를 하면 "admin" 이 나온다.

- 쿼리를 해석하면 아래 쿼리와 동일하게 실행된다.

- INSERT INTO c59 VALUES ('nimda', 1, 'admin')

 

 

 

'Webhacking.kr' 카테고리의 다른 글

Webhacking.kr 61번  (0) 2015.08.16
Webhacking.kr 60번  (0) 2015.08.16
Webhacking.kr 58번  (0) 2015.08.16
Webhacking.kr 57번  (0) 2015.08.16
Webhacking.kr 56번  (0) 2015.08.16
Comments