오늘은 잘못된 쿼리문 작성으로 인한 Spooky Login 오류에 대해 말씀 드리려고 합니다.
제가 이 Login방식을 여러 사이트에서 테스트 해보았는데 대부분 잘 처리되어 있지만 한두군데 이런곳이 있 더군요.
로긴 페이지에서 아이디와 패스워드를 입력 받을때 패스워드 부분에 ‘ OR ”=’ 이 문자열을 넣어 보세요~
최종적인 쿼리는 다음과 같습니다. 이 쿼리는 OR로 묶여 있기 때문에 이 조건 중의 하나만을 만족하더라도 최종 로우 세트에 포함 됩니다.
id 입력을 king 이라고 입력하고 password를’ OR ”=’ 입력 했을 경우 쿼리문은 SELECT * FROM 멤버테이블 WHERE id컬럼=’king’ and password컬럼=” OR ”=” 이렇게 작성됩니다.
위의 쿼리문을 가지고 Recordset 생성시 EOF가 아니므로 로긴 되겠죠?
이러한 SQL Injection을 Spooky Login Bug라고 이야기 합니다.
위의 Bug를 수정하기 위한 방법이 여러가지 있는데…
- Replace 를 사용하여 문자열을 대체.
- 위의 쿼리문에서 회원 ID, 비밀번호로 조회를 하지를 말고 회원 ID로만 조회한후에 asp 코드상에서 비밀 번호 일치 여부를 확인.
SELECT password컬럼 FROM 멤버테이블 WHERE id컬럼 = 'king' If Trim(Request("password")) = Trim(Rs("password컬럼")) Then 인증 성공 Else 인증 실패 End If
- 저장 프로시져를 사용 한다. (권장)
출처 : 강컴 (오래전에 스크랩한 내용이라 정확하지는 않음)
Notice
