GBK 문자 인 코딩(문자 집합)결함 으로 웹 보안 에 구멍 이 생 겼 습 니 다.

4598 단어 GBK 문자 인 코딩
다 중 바이트 인 코딩 유래
가장 많이 사용 되 는 최소 문자 집합 은 ascii 이 고 대응 하 는 2 급 제 는 00-7F 인 코딩 이 라 고 할 수 있 습 니 다.그것 도 우리 컴퓨터 에서 최초 로 통용 되 는 문자 집합 이다.전기 에는 거의 모든 영문 문 자 를 표시 할 수 있다.나중에 컴퓨터 를 더 많이 사용 하 는 국가 가 가입 한 후에 우 리 는 컴퓨터 에 중국어 문 자 를 표시 하고 싶 었 다.우 리 는 흔히 볼 수 있 는 중국어 에 7000 여 개의 문자 가 있다 는 것 을 안다.ascii 코드 는 128 글자 만 있 고 0-127 인 코딩 위치 만 있어 서 사용 하기에 매우 부족 합 니 다.그래서 우 리 는 더 큰 문자 집합 을 만 들 고 ascii 인 코딩 을 호 환 할 것 을 보장 합 니 다.더 많은 문 자 를 지원 하려 면 더 큰 문자 집합 을 선택 하 십시오.우 리 는 단지 여러 개의 바이트 로 한 문 자 를 묘사 할 수 있 을 뿐이다.ascii 코드 와 잘 구분 하기 위해 서!일반적인 방법 은 각 바이트 의 값 이>7F 보다 크 고 2 개의 바이트 라면[>7F][>7F]이다.이렇게 인 코딩 하면 ascii 구역 과 잘 분리 되 고 문자 집합 을 확대 할 수 있 습 니 다.gb 2312 범위 가[0xA 1-0xF 7][0xA 1-0xFE](중간 에 많이 채 워 지지 않 았 음)와 같이 모든 바이트 가 A0 위 에 있 는 것 을 완전히 보장 하고 7F 위 에 만족 합 니 다.
GBK 인 코딩 구멍 원인
위의 분석 을 통 해 우 리 는 gb 2312 인 코딩 이 ascii 코드 와 잘 분리 되 었 다 는 것 을 알 게 되 었 다.그럼 어디 보 자.GBK 인 코딩 은 gb 2312 를 완전히 호 환 하 는 것 이다.위 에서 보면 아래 순 서 를 선택 할 수 밖 에 없다.바로 A1A 0 에서 아래로 배열 되 었 습 니 다.우 리 는 인 코딩 의 실제 범 위 는[0x81-0xFE]([0x40-0x7E|0x80-0xFE])(GBK 인 코딩)인 것 을 발 견 했 습 니 다.우 리 는 2 개의 바이트 로 구성 되 고 첫 번 째 바이트 범 위 는 7F 위 에 있 으 며 두 번 째 바이트 의 일부분 은 0x40-0x7E 에 있 습 니 다.이것 이 바로 bug 를 야기 하 는 원인 이다.다음 예 를 봅 시다!
ASCII 메타 에서 우 리 는 0x40-0x7E 에 문자 가 포함 되 어 있다 는 것 을 알 고 있다."

gbk 인 코딩 을 선택 하고 위 코드 를 실행 하면 간단 한 명령 으로 오류 가 발생 합 니 다.문자열 할당 이 끝나 지 않 았 다 고 합 니 다!허허,많은 사람들 이 이 걸 보면 php 버그 라 고 생각 할 거 야.하지만 우리 가$a="\a"가 되면 정상적으로 작 동 할 수 있 습 니 다.너무 진기한 것 같 지 않 아!!
원인 분석:우 리 는 파일 에 디스크 가 존재 하 는 것 이 모두 2 급 방식 이라는 것 을 알 고 있 습 니 다.어떤 문 자 를 저장 하 든 최종 적 으로 이 문자 로 선택 한 문자 집중 문자 인 코딩 으로 저 장 됩 니 다.php 분석 시 최소 분석 단원 은 바이트 입 니 다.다 바이트 든 단일 바이트 든결국 바이트 로 처리 되 었 습 니 다."\"GBK 인 코딩 은 D55C 이 고 php 는 바이트 로 해석 하 며 5C 대응 문 자 는'\'문자 입 니 다.뒤에 바로''를 따 르 는 것 은 전의 에 해당 하 는 것 이다.닫 히 지 않 았 기 때문에 오류 가 발생 했 습 니 다!문제 의 소 재 를 알 아 보 셨 죠?스스로 처리 하면 자 연 스 럽 게 다 바이트 가 단일 바이트 로 분 리 됩 니 다.이렇게 하면 이상 한 문제 가 많이 생 길 것 이다.
요약:위의 설명 을 통 해 우 리 는 다 중 바이트 인 코딩 과정 과 GBK 가 간단 한 프로그램 에 오 류 를 일 으 키 는 원인 을 알 게 되 었 다.사실 우 리 는 많은 프로그램 언어 에서 하나의 바이트 로 해석 할 것 이다.이렇게 하면 다 중 바이트 GBK 인 코딩 중국 어 를 선택 할 때 마침 바이트 가 특수 한 위치 에 떨 어 지면 이상 한 오류 가 발생 할 수 있 습 니 다.그리고 시스템 에 자체 의 구멍 을 가 져 다 줄 것 입 니 다.나중에 말씀 드 리 겠 습 니 다.GBK 인 코딩 결함 으로 인해 구멍 이 생 겼 고 이 인 코딩 결함 을 전문 적 으로 이용 하여 시스템 침입 을 할 것 입 니 다!자,여기까지 왔 습 니 다.교 류 를 환영 합 니 다!
GBK 문자 인 코딩(문자 집합)결함 공격(주입)원리
지난 절 에 우 리 는 분석 했다.서로 다른 인 코딩 을 선택 하면 프로그램 자체 에 잠재 적 인 구멍 이 생 길 수 있 습 니 다.이번에 우 리 는 GBK 인 코딩 을 예 로 들 어 이 인 코딩 을 통 해 시스템 에 어떻게 주입 하 는 지 보 자.현재 많은 오픈 소스 시스템 에 유사 한 주입 문제 가 존재 한다.우리 먼저!데모 부터!
GBK 문자 집합 구멍 주입 원리

<?php
$u=isset($_GET['u'])? $_GET['u']:'';
$u=addslashes($u);
$sql = "select * from user where user='$u'";
이상 은 우리 가 쓴 테스트 예(GBK 인 코딩)입 니 다.현재 많은 오픈 소스 시스템 이 비교적 적 고 통 일 된 매개 변 수 를 여과 합 니 다.가끔 은 주입 을 방지 하기 위해 매개 변 수 를 직접 전의 처리 합 니 다.우 리 는 이런 예 를 보 자.우 리 는 어떻게 시스템 에 주입 하 는 지!
순서
비고
1.입력 값%D5%27 or 1=1\#
u 매개 변 수 는 위의 값 에 참 여 됩 니 다(%27 은''작은 따옴표 문자'에 대응 합 니 다)
2.GET 가 져 온 값
0xD50x27 or 1=1#
3.Addslashes 후 값
0xD50x5C0x 27 or 1=1(뜻:\\'or 1=1\#')\#문자 뒤에 주석 이 달 려 있 습 니 다.
4.sql 값 이
select * from user where user='\' or 1=1#'
\#번 호 는 sql 주석 기호 이 며,뒤의 문 자 는 절 제 됩 니 다.

GPC 전의 가 열 리 거나 addslashes 함 수 를 통 해 자동 으로 문자 앞 에 작은 따옴표('),작은 따옴표('),역 사선(\)과 NUL(NULL 문자)등 문자 앞 에'\'문자(0x5c)를 추가 합 니 다.예 를 들 어 우 리 는 특수 한 앞 바이트 0xD 5 를 사용 합 니 다.이 바이트 와 조합 하여 0xD50x5c 로 바 꿉 니 다.마침 gbk 문자 집중 문자:'\'입 니 다.뒤의×27.이 작은 따옴표 가 보류 되 었 습 니 다!
GBK 문자 집합 구멍 주입 총화
허허,이거 재 미 있 지?됐어.우리 가 정리 해 보 자.이런 주입 은 두 가지 조건 이다.첫 번 째 는 gbk 인 코딩 이 고,두 번 째 는 프로그램 이 전의 방법 을 채택 하여 입력 을 전의 했다.이 두 가지 조건 은 까다 롭 지 않 습 니 다.현재 대부분의 오픈 소스 시스템 은 gbk,utf-8 인 코딩 의 소스 코드 가 있 습 니 다.나머지 는 소스 코드 에 유사 한 전의 방법 으로 문자열 을 걸 러 냈 는 지 확인 하 십시오.만약 있다 면,이 시스템 의 어떤 기능 이 있 으 면,너 는 침투 할 수 있다.이 인 코딩 구멍 은 인터넷 에서 많이 제기 되 었 지만 개발 자 들 의 충분 한 중 시 를 받 지 못 하고 계속 재현 되 고 있 습 니 다!
그렇다면 우리 가 인 자 를 주입 하려 면 어떤 인 자 를 선택해 야 합 니까?사실 이 전의 문 자 는 작은 따옴표('),작은 따옴표('),역 사선(\)과 NUL(NULL 문자)입 니 다.우 리 는 프로그램 에서 특별한 역할 을 합 니 다.우 리 는 앞 에>7F 문 자 를 추가 하고 뒤에%27('),%22('),%5C(\),%00(NULL 문자)을 연결 하면 이 네 글 자 를 스스로 전의 에서 벗 어 날 수 있 습 니 다.
자,이 구멍 원리 와 주입 과정 분석 은 여기까지 입 니 다.우리 가 개발 할 때 이 문 제 를 주의해 야 한다.특히 GBK 인 코딩 개발 프로그램 을 사용 할 때 이 분야 의 예비 지식 을 가지 고 안전 한 코드 를 개발 하 는 데 도움 이 될 것 이다.더 많은 GBK 인 코딩,볼 수 있 습 니 다.http://doc.chacuo.net/gbk !(여기 5c 중국어 로 떨 어 진 문자 가 많 네요)토론 도 환영 합 니 다!

좋은 웹페이지 즐겨찾기