IT강의/보안및해킹

데이터베이스 해킹 기초 (2/2)

샤핑 2020. 12. 27. 08:49
728x90
반응형

지난 시간에 SQL Injection을 이용한 해킹 기초를 살펴보았다면, 이번 시간에는 SQL Injection을 이용해 복수 쿼리문을 실행시키는 것을 알아보겠습니다. 단 이것은 JDBC에서 복수 쿼리문 실행을 허용했을 때만 가능한 방법입니다.
그리고 이 강의는 MySQL을 기반으로 진행하는 강의입니다. MsSQL과 Oracle은 복수 쿼리문 실행이 아예 불가능한 것으로 알고 있습니다.

우선 복수 쿼리문 실행을 허용하려면 DriverManager.getConnection() 함수에서 URL을 아래와 같이 세팅해놓아야 합니다. allowMultiQueries 인자 값을 true로 설정해주면 복수 쿼리문 실행 가능 상태가 됩니다.

jdbc:mysql://localhost/testdb?allowMultiQueries=true

 

 

 

소스 코드는 방금 전에 언급한 getConnection() 함수만 제외하면 지난 시간과 같습니다.

 

 

 

사진에서 보시다시피, 이번에는 비밀번호 부분에 ' or ''=''; DROP TABLE MEMBER CASCADE; # 값을 입력해보겠습니다. 이 값을 입력하면 어떤 일이 발생하는지 분석해보도록 하겠습니다.

 

 

 

입력한 값에서 ' or ''=''; 하고 DROP TABLE MEMBER CASCADE; 는 세미콜론(;)이 존재하므로 따로 실행됩니다. SELECT문과 DROP문이 순차적으로 실행되는 것이지요.

SELECT문은 지난 시간에 이미 살펴보았기 때문에 생략하겠습니다.
밑의 DROP문은 회원 테이블을 연쇄 삭제하는 명령입니다. 연쇄 삭제(CASCADE) 이므로 해당 테이블을 참조하는 모든 테이블도 같이 삭제됩니다. 즉, 회원 정보 뿐만 아니라 이와 연결된 정보도 완전히 삭제하는 명령문 인거지요 ㄷㄷㄷ
그리고 #은 주석을 의미합니다. Syntax Error를 방지하기 위해 끝에 붙은 '; 값은 주석 처리 한 것입니다. 맨 끝에 주석 문자를 삽입함으로써 자신만의 쿼리문이 실행되도록 할 수 있습니다.

따라서 로그인 성공을 유도한 후 회원 정보를 완전히 삭제하는 명령문이라고 할 수 있겠습니다.
값을 삽입한 후 프로그램을 다시 실행시켜서 확인해보겠습니다.

 

 

 

올바른 값을 입력하였는데도 에러가 발생하죠? 해당 테이블이 없다는 에러 메시지(Table 'testdb.member' doesn't exist)를 출력하는 것을 보아 테이블이 연쇄 삭제된 것을 볼 수 있습니다.

728x90
반응형
LIST

'IT강의 > 보안및해킹' 카테고리의 다른 글

웹 해킹 기초  (0) 2021.07.21
보안의 3대 요소: CIA  (0) 2021.04.20
데이터베이스 해킹 기초 (1/2)  (0) 2020.12.27