더북(TheBook)

2. 다음과 같이 로그인 창에 논리적 오류를 발생시키면 정상적인 로그인 절차 없이도 바로 로그인에 성공할 수 있다. ID에 admin을, Password에 ' or ''='를 넣고 로그인하면 성공한다.

▲ 그림 4-7 Password 입력 창에 SQL 문을 넣어 로그인 성공

Password에 취약점을 발생시키는 코드를 넣으면(SQL을 삽입하면) 데이터베이스에서는 다음과 같은 질의문을 처리한다.

select id,pw,name,level from member WHERE id = 'admin' and pw=' or ''='

 

질의문에서 pw를 분석하면 논리연산 우선 순위를 기준으로 볼 때 false AND false OR true가 되는데 AND 연산이 먼저 실행되기 때문에 최종적으로 true가 되면서 로그인에 성공한다. 이외에 SQL 인젝션 공격에는 Union, Blind SQL 삽입 등 다양한 방식이 있으므로 웹 서버와 데이터베이스를 연동할 때는 질의문에 대한 입력 값을 검증하는 작업이 필요하다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.