SQL 인젝션 이란?

보안/웹 2015. 11. 20. 20:20

  SQL인젝션


SQL인젝션은 현재 웹 해킹 공격중 많은 부분을 차지하는 공격기법이다.
웹페이지에서 입력한 정보는 서버로 이동하여 서버에 있는 DB로 접속하여 필요한 정보를 
주게된다.

예를들어


로그인창을 예시로 들면 ID 와  Password를 입력하는 부분이있다.

이곳으로    ID ; test    Pass : 123 이런식으로  입력을하여 로그인버튼을 누르게 되면

이정보는 서버측의 DB로 접속하여 ID가 test 인것을 찾아 Pass가 123인지 확인후 맞다면
로그인된 정보를 보내주게 된다.


이런 방식에는 문제점들이 존재한다. ID와 Pass를 검사하기 위하여  조건식으로 검사하기도하는데
입력되는값에 특수문자등을 이용하여 조건을 변경하여 인증을 우회할수 있다.

예를들어 밑의 검사식으로 아디와 비밀번호를 판독한다고 가정하자.

$login = " SELECT * FROM user WHERE id='test' and pass='123'";


여기서 SQL 인젝션을 응용하면

$login = " SELECT * FROM user WHERE id='test' and pass='8' or '1=1'";

이런식으로 변경할수있다.


로그인창이라고 가정한다면


ID : test
Password  : 8' or '1=1

이런식으로 입력이 된것이다. id가 test인것을 찾고 비밀번호를 확인하는데 1=1 이 참이라
or 연산을 통해 현재 SQL식이 참이 되버린다.

 
이러한 방식으로 test라는 id의 비밀번호를 모르고도 접속할수 있는 것이다.

 

다음은 Tomcat 을 이용해 Sql인젝션 방법에 대해 다시 알아본다.

이 페이지는 이름을 입력하면 입력된 이름을 db에서 검색하여 정보를 출력해 주는 페이지이다.
위 설명을 읽어보면 Smith 라는 이름이 등록되있다는것을 알수있다.

Smith 라는 이름을 입력하여 보았다.

스미스의 유저번호와 넘버 값등 여러가지 정보가 나왔다.




여기서 이름 입력 구문을 조금 변경하여 SQL인젝션을 수행할수 있다.



입력창에 smith' or '8=8 을 입력하였다.
8=8 은 참이고 or연산을 통하여 참으로 인지된다.
그래서 스미스 이외의 다른 모든정보들이 페이지에 출력된다.





이와같이 SQL 인젝션은 쉬우면서도 위험한 기법이다.

다음 포스팅때 SQL 인젝션에 대해 좀더 알아보겠다.

수고하셨습니다.


블로그 이미지

532

처음 프로그래밍을 시작한 개발자들은 Hello World!를 기억 할 것이다. Hello world가 Hell World가 될 줄 몰랐던 한 개발자의 이야기. 게시글의 출처를 표기하며, 출처를 남기지 않고 펌을 하는것에 대해 법적 책임을 묻지 않습니다.

,