sql 주입 공격 상세 해석 (원리 이해)

얼마 전 많은 블 로그 와 웨 이 보 에서 12306 철도 부 사이트 의 허점 이 드 러 났 다. 이렇게 큰 프로젝트 로 구멍 이 있다 고 해서 불가능 한 것 은 아니 지만 그 구멍 은 일부 초보 급 프로그래머 들 이 저 지 른 잘못 이다.사실 sql 주입 구멍 은 하나 입 니 다.초보 프로그래머 로 서 저 는 sql 이 주입 한 것 에 대해 깊이 알 지 못 해서 시간 을 내 서 전문 적 으로 공 부 했 습 니 다.이제 학습 성 과 를 여러분 에 게 나 누 어 드 리 고 여러분 의 학습 을 도 울 수 있 기 를 바 랍 니 다.다음은 한번 봅 시다.
1. sql 주입 은 무엇 입 니까?
SQL 주입 이란 SQL 명령 을 웹 폼 에 삽입 하여 도 메 인 이나 페이지 에서 요청 한 조회 문자열 을 제출 하거나 입력 함으로써 서버 를 속 이 고 악의 적 인 SQL 명령 을 수행 하 는 것 이다. 예 를 들 어 예전 의 많은 영상 사이트 에서 VIP 회원 비밀 번 호 를 누설 한 것 은 대부분 WEB 폼 을 통 해 조회 문 자 를 전달 하 는 것 이다.이러한 폼 은 특히 SQL 주입 식 공격 을 받 기 쉽다. 응용 프로그램 이 입력 내용 을 사용 하여 동적 sql 문 구 를 구성 하여 데이터 베 이 스 를 방문 할 때 sql 주입 공격 이 발생 한다.코드 가 저장 과정 을 사용 하면 이 저장 과정 은 선택 되 지 않 은 사용자 가 입력 한 문자열 로 전달 되 고 sql 주입 도 발생 합 니 다.해커 는 SQL 주입 공격 을 통 해 사이트 데이터베이스 에 접근 할 수 있 는 권한 을 얻 을 수 있다. 그 후에 그들 은 사이트 데이터베이스 에 있 는 모든 데 이 터 를 얻 을 수 있다. 악의 적 인 해커 는 SQL 주입 기능 을 통 해 데이터베이스 에 있 는 데 이 터 를 변경 할 수 있 고 심지어 데이터베이스 에 있 는 데 이 터 를 파괴 할 수도 있다.인터넷 개발 자로 서 당신 은 이러한 해 킹 행 위 를 뼈 에 사무 치도 록 원망 합 니 다. 물론 SQL 이 이러한 기능 방식 을 주입 하 는 원 리 를 알 고 코드 를 통 해 자신의 사이트 데이터 베 이 스 를 보호 하 는 방법 을 배 울 필요 가 있 습 니 다.
2. sql 주입 원인
sql 주입 공격 이란 디자인 상의 허점 을 이용 하여 대상 서버 에서 Sql 문 구 를 실행 하고 다른 방식 으로 공격 하 는 것 을 말한다. Sql 문 구 를 동적 으로 생 성 할 때 사용자 가 입력 한 데 이 터 를 검증 하지 않 은 것 이 Sql 주입 공격 이 이 루어 진 주요 원인 이다.자바 데이터베이스 연결 JDBC 의 경우 SQL 주입 공격 은 Statement 에 만 유효 하고 PreparedStatement 에는 유효 하지 않 으 며 PreparedStatement 서로 다른 삽입 시간 에 조회 의 논리 구 조 를 바 꿀 수 없 기 때문이다.사용자 가 존재 하 는 지 검증 하 는 SQL 문 구 는 '사용자 이름' and pswd = '암호 입 니 다. 사용자 이름 필드 에' or 1 = 1 '을 입력 하거나 암호 필드 에' or 1 = 1 '을 입력 하면
검증 을 우회 하지만 이런 수단 은 Statement 에 만 효과 가 있 고 PreparedStatement 에 만 효과 가 없다.상대 적 으로 Statement 다음 과 같은 장점 이 있다.
1. 주입 공격 방지 2. 여러 번 의 운행 속도 가 빠르다 3. 데이터베이스 버퍼 가 넘 치 는 것 을 방지 4. 코드 의 가 독성 유지 가능성 이 좋다
이 네 가지 점 으로 인해 PreparedStatement 은 데이터 베 이 스 를 방문 하 는 문장의 대상 이 되 었 다. 단점 은 유연성 이 좋 지 않 고 어떤 경우 에는 반드시 사용 해 야 한 다 는 것 이다 Statement.
3. sql 주입 원리
다음은 sql 주입 원 리 를 말 하여 독자 로 하여 금 sql 주입 공격 에 대해 감성 적 인 인식 을 가지 게 하고 다른 공격 에 대해 원 리 는 일치 하 게 한다.
SQL 주입 은 공격 자가 인증 메커니즘 을 돌아 원 격 서버 의 데이터 베 이 스 를 완전히 제어 할 수 있 도록 한다.SQL 은 구조 적 조회 언어의 약칭 으로 데이터베이스 에 접근 하 는 사실 기준 이다.현재 대부분의 웹 응용 프로그램 은 SQL 데이터 베 이 스 를 사용 하여 응용 프로그램의 데 이 터 를 저장 하고 있다.거의 모든 웹 은 배경 에서 어떤 SQL 데이터 베 이 스 를 사용 합 니 다.대부분의 언어 와 마찬가지 로 SQL 문법 은 데이터베이스 명령 과 사용자 데 이 터 를 혼합 할 수 있 습 니 다.개발 자가 세심 하지 않 으 면 사용자 데이터 가 명령 으로 해 석 될 수 있 습 니 다. 그러면 원 격 사용 자 는 웹 애플 리 케 이 션 에 데 이 터 를 입력 할 수 있 을 뿐만 아니 라 데이터 베이스 에서 도 임 의 명령 을 수행 할 수 있 습 니 다.
SQL 주입식 공격 의 주요 형식 은 두 가지 가 있다.
첫째, SQL 명령 과 연 결 된 사용자 입력 변수 에 코드 를 직접 삽입 합 니 다.위 에서 필자 가 든 예 는 바로 이런 방법 을 채택 한 것 이다.SQL 구문 과 직접 묶 여 있 기 때문에 직접 주입 식 공격 법 이 라 고도 불 린 다.
두 번 째 는 간접 적 인 공격 방법 으로 악성 코드 를 표 에 저장 하거나 원 데이터 로 저장 할 문자열 에 주입 하 는 것 이다.저 장 된 문자열 에 서 는 악성 SQL 코드 를 실행 하기 위해 동적 SQL 명령 에 연 결 됩 니 다.주입 과정의 작업 방식 은 텍스트 문자열 을 미리 종료 한 다음 새로운 명령 을 추가 하 는 것 입 니 다.직접 주입 식 공격 을 예 로 들 면사용자 가 변 수 를 입력 할 때 현재 문 구 를 분점 으로 끝 내 는 것 입 니 다.그리고 악성 SQL 문 구 를 하나 더 삽입 하면 됩 니 다.삽 입 된 명령 이 실행 되 기 전에 다른 문자열 을 추가 할 수 있 기 때문에 공격 자 는 '-' 를 주석 으로 표시 하여 주 입 된 문자열 을 종료 합 니 다.실행 할 때 시스템 은 이후 문장의 위치 주석 이 라 고 생각 하기 때문에 후속 텍스트 는 무시 되 고 컴 파일 과 실행 을 외우 지 않 습 니 다.
4. SQL 주입 공격 의 간단 한 예제:
여기 서 우 리 는 비교적 흔히 볼 수 있 는 예 를 들 어 sql 주입 의 원 리 를 간략하게 설명 한다.만약 우리 에 게 users 표 가 있다 면 그 안에 두 필드 usernamepassword 가 있다.우리 의 자바 코드 에서 우리 초보 자 들 은 모두 sql 연결 방식 으로 사용자 검증 을 하 는 것 에 익숙 하 다.예 를 들 어 "select id from users where username = '"+username +"' and password = '" + password +"'" 여기 usernamepassword 는 모두 우리 가 웹 폼 에서 얻 은 데 이 터 를 액세스 한 것 이다.다음은 간단 한 주입 을 살 펴 보 겠 습 니 다. 만약 에 우리 가 폼 에 username 의 입력 상자 에 입력 ' or 1=1-- 하면 password 의 폼 에 아무 것 이나 입력 합 니 다. 만약 에 여기에 123 을 입력 하면 우리 가 실행 하고 자 하 는 sql 문 구 는 select id from users where username = '' or 1=1 -- and password = '123' 이 됩 니 다. 우리 가 이 sql 을 살 펴 보 겠 습 니 다. 1 = 1 은 true 이 고 뒤에 and password = '123' 이 주석 되 었 기 때 문 입 니 다.그래서 여 기 는 sql 인증 을 완전히 건 너 뛰 었 습 니 다.여 기 는 단지 간단 한 예 일 뿐이다.많은 sql 주입 방식 이 아직 많 습 니 다. 아래 블 로그 에서 일일이 설명 하 겠 습 니 다.

좋은 웹페이지 즐겨찾기