Webhacking.kr 35번
GET 메소드로 전송되는 "phone" 파라미터 값에 필터링이 적용되어 있다.
그 다음에는 쿼리가 실행되는데, 각 변수의 의미는 아래와 같다.
- SESSION[id] = id 값
- SERVER[REMOTE_ADDR] = 클라이언트 공인 IP 값
- GET[phone] = 사용자가 입력한 값
내 환경상 아마 "VALUES ('wraith', '58.xx.xx.xx', 정수_입력값)" 쿼리가 실행될 것이다.
그리고 id 값이 "admin" 이면서 ip 값이 내 공인 IP와 동일한 컬럼이 존재하면 해당 결과에서 id 를
보여줄 것이다.
공인 IP는 바뀌지 않으니 쉽게 말하면 (SESSION[id]) 값이 "admin" 일 때만 클리어 된다는 소리다.
문제는 해당 값은 가입할 때 세팅되고 변경할 수 없다는 점이다.
결국 INSERT 쿼리에서 사용되는 GET[phone) 변수가 인젝션 포인트라는 소리다.
INSERT 쿼리에서는 VALUES 를 이용할 때 위 사진처럼 한번에 여러 개의 컬럼을 추가 할 수 있다.
phone 값을 위와 같이 입력하면 쿼리는 아래와 같이 실행된다.
INSERT INTO challenge35_list(id,ip,phone)
VALUES ('wraith', '58.xx.xx.xx', 1), char(97,100,109,105,110), 0b0011010100111~~~~~, 2)
char(97,100,109,105,110) 함수 실행 결과는 "admin"을 의미하고, 굉장히 긴 이진수는 내 공인 IP를
의미한다.