현대사회는 곧 유비쿼터스(Ubiquitous) 사회가 된다고 합니다. 소프트웨어가 점점 발전하여 컴퓨터 및 인터넷의 세대가 되는 만큼 보안 역시 중요한 요소가 되고 있습니다. 인터넷이 발전함으로써 접근성은 높아지지만 이를 악용하여 불법적으로 침입하는 사례도 늘어날 것이기 때문입니다.
이번 시간에는 해킹 기초 중 SQL Injection에 대해 알아보겠습니다.
이 강의는 JDBC를 기반으로 하는 내용이므로, JDBC를 모르시는 분들은 아래 링크에서 먼저 학습을 해주세요!
https://sharpcoder.tistory.com/44
SQL Injection(SQL 삽입)은 응용 프로그램 보안 상의 허점을 의도적으로 이용해 악의적인 SQL문을 실행되게 함으로써 데이터베이스를 비정상적으로 조작하는 코드 인젝션 공격 방법입니다.
해킹 기초를 살펴보기 위해 샘플 프로그램을 하나 만들어보았습니다. 이 프로그램은 아이디와 비밀번호를 입력받은 후 두 개가 모두 일치하면 로그인 성공을 출력하는 프로그램입니다. 현재 테이블에 삽입된 데이터는 아래와 같습니다.
따라서 아이디(Username)가 'sharping' 이고 비밀번호(Password)가 'default1234' 이면 로그인에 성공하는 프로그램입니다. 이제 프로그램을 분석하고 취약점을 찾아보도록 하겠습니다.
제가 만든 프로그램의 소스코드 입니다.
솔직히 이것을 다 읽고 분석하는 것은 시간 낭비 입니다 (...) 다른 것은 다 볼 필요 없어요 ㅋㅋ 아래의 명령문만 보시면 됩니다.
String query = "SELECT * FROM MEMBER WHERE Username = '" + username + "' AND Password = '" + password + "'";
이것은 변수 username과 password를 입력받은 후 SELECT문을 String형으로 생성하는 명령문인데요. 이 명령문을 집중해서 분석해보겠습니다.
아이디 sharping 과 비밀번호 default1234 를 입력하면 위와 같은 쿼리문이 형성됩니다. 보시다시피 Username과 Password가 모두 일치(TRUE)하므로 로그인에 성공하는 것입니다.
그런데 아이디는 그대로 하고 비밀번호 란에 ' or ''=' 를 입력해보겠습니다. 해보니 로그인에 성공하였네요?? ㅋㅋㅋ 비밀번호랑 일치하지 않는데도...
왜 이런 값을 입력하면 로그인에 성공하는지 살펴보겠습니다.
비밀번호 란에 ' or ''=' 를 입력하면 위와 같은 쿼리문이 형성됩니다. Password 부분에서 보시다시피, Password = '' 는 FALSE 이지만 ''='' 는 TRUE 입니다. ('' 하고 '' 는 서로 같은 값이므로)
이 2가지가 OR로 연결되어 있으므로 TRUE가 되고 모두 일치하다는 것으로 판단하여 로그인에 성공하는 것입니다.
아직 해킹 공부를 많이 해보지는 않아서 잘 모르지만, 이렇게 프로그램 내에서 취약점을 찾은 후 공격하는 것이 바로 해킹이라고 할 수 있습니다.
'IT강의 > 보안및해킹' 카테고리의 다른 글
웹 해킹 기초 (0) | 2021.07.21 |
---|---|
보안의 3대 요소: CIA (0) | 2021.04.20 |
데이터베이스 해킹 기초 (2/2) (0) | 2020.12.27 |