ASP 빈틈 풀 터치-입문 편

B/S 모델 응용 개발 이 발전 함 에 따라 이런 모델 로 응용 프로그램 을 작성 하 는 프로그래머 도 점점 많아 지고 있다.그러나 이 업계 의 입문 문턱 이 높 지 않 기 때문에 프로그래머 의 수준 과 경험 도 들쭉날쭉 하 다.상당 한 프로그래머 들 이 코드 를 작성 할 때 사용자 가 입력 한 데이터 의 합 법성 을 판단 하지 않 아 응용 프로그램 에 안전 위험 이 존재 한다.사용 자 는 데이터베이스 조회 코드 를 제출 하여 프로그램 이 돌아 온 결과 에 따라 그 가 알 고 싶 은 데 이 터 를 얻 을 수 있 습 니 다.이것 이 바로 SQL Injection,즉 SQL 주입 입 니 다.SQL 주입 은 정상 적 인 WWW 포트 에서 접근 하 는 것 이 며,겉보기 에는 일반적인 웹 페이지 방문 과 별 차이 가 없 는 것 처럼 보이 기 때문에 현재 시중 의 방화벽 은 SQL 주입 에 경 보 를 보 내지 않 으 며,관리자 가 IIS 로 그 를 보 는 습관 이 없 으 면 오랫동안 침입 되 어 알 아차 리 지 못 할 수도 있다.그러나 SQL 주입 기법 은 상당히 유연 해 주입 할 때 의외 의 상황 을 많이 만 날 수 있다.구체 적 인 상황 에 따라 분석 하고 교묘 한 SQL 문 구 를 구성 하여 원 하 는 데 이 터 를 성공 적 으로 얻 을 수 있 는 지 하 는 것 은 고수 와'초보'의 근본 적 인 차이 이다.국정 에 따 르 면 국내 사 이 트 는 ASP+Access 또는 SQLServer 가 70%이상,PHP+MySQ 가 L20%,기타 가 10%미 만 이다.본 논문 에서 우 리 는 입문,진급 에서 고급 까지 ASP 주입 방법 과 기 교 를 설명 하고 PHP 가 주입 한 글 은 NB 연맹 의 다른 친구 인 zwell 이 작성 하여 안전 종사자 와 프로그래머 에 게 모두 도움 이 되 기 를 바 랍 니 다.ASP 주입 을 잘 아 는 친구 들 도 입문 편 을 뛰 어 넘 지 마 세 요.일부 사람들 은 주입 에 대한 기본 적 인 판단 방법 에 잘못된 부분 이 있 기 때 문 입 니 다.여러분,준비 되 셨 나 요?Lets Go...입문 편 SQL 주입 을 시도 해 본 적 이 없다 면 첫 번 째 단 계 는 IE 메뉴=>도구=>인터넷 옵션=>고급=>우호 적 인 HTTP 오류 정보 앞 에 있 는 체크 를 삭제 합 니 다.그렇지 않 으 면 서버 가 어떤 오 류 를 되 돌려 주 든 IE 는 HTTP 500 서버 오류 로 만 표시 되 며 더 많은 알림 정 보 를 얻 을 수 없습니다.제1 절,SQL 주입 원 리 는 다음 과 같 습 니 다.저 희 는 한 사이트 www.19cn.com 에서 시작 합 니 다.홈 페이지 첫 페이지 에'IE 새 창 을 열 수 없 는 다양한 해결 방법'이라는 링크 가 있 습 니 다.주 소 는?http://www.19cn.com/showdetail.asp?id=49우 리 는 이 주소 뒤에 작은 따옴표 를 붙 였 다.서버 는 다음 오류 알림 을 되 돌려 줍 니 다.Microsoft JET Database Engine 오류 80040 e14 문자열 의 문법 오 류 는 검색 표현 식 ID=49 에 있 습 니 다./show detail.asp,행 8 은 이 오류 알림 에서 다음 과 같은 몇 가 지 를 알 수 있 습 니 다.1.사 이 트 는 Access 데이터 베 이 스 를 사용 하고 JET 엔진 을 통 해 데이터 베 이 스 를 연결 하 며 ODBC 가 아 닙 니 다.2.프로그램 은 클 라 이언 트 가 제출 한 데이터 가 프로그램의 요구 에 부합 되 는 지 판단 하지 않 았 다.3.이 SQL 구문 이 조회 하 는 표 에 ID 라 는 필드 가 있 습 니 다.위의 예 에서 알 수 있 듯 이 SQL 주입 의 원 리 는 클 라 이언 트 로부터 특수 한 코드 를 제출 하여 프로그램 과 서버 의 정 보 를 수집 하여 당신 이 생각 하 는 자 료 를 얻 는 것 이다.2 절,SQL 주입 여부 판단  1 절 을 보고 어떤 사람들 은 나 도 자주 이렇게 주입 할 수 있 는 지 를 테스트 하 는 것 이 간단 하지 않 겠 느 냐 고 생각 할 것 이다.  사실 이것 은 결코 가장 좋 은 방법 이 아니다.왜 일 까?  우선,모든 서버 의 IIS 가 클 라 이언 트 에 게 구체 적 인 오류 알림 을 되 돌려 주 는 것 은 아 닙 니 다.프로그램 에 cint(매개 변수)와 같은 문 구 를 추가 하면 SQL 주입 이 성공 하지 못 하지만 서버 역시 오류 가 발생 할 수 있 습 니 다.구체 적 인 알림 정 보 는 URL 을 처리 할 때 서버 에 오류 가 발생 할 수 있 습 니 다.시스템 관리자 에 게 연락 하 세 요.  그 다음으로 SQL 주입 에 대해 조금 알 고 있 는 프로그래머 들 은 작은 따옴표 만 걸 러 내 면 안전 하 다 고 생각 합 니 다.이런 경우 가 적지 않 습 니 다.작은 따옴표 로 테스트 하면 주입 점 을 측정 할 수 없습니다.  그렇다면 어떤 테스트 방법 이 정확 할 까?답 은 다음 과 같다.    ①http://www.19cn.com/showdetail.asp?id=49    ②http://www.19cn.com/showdetail.asp?id=49 ;;and 1=1    ③http://www.19cn.com/showdetail.asp?id=49 ;;and 1=2  이것 이 바로 고전적 인 1=1,1=2 시험 법 인 데 어떻게 판단 합 니까?위의 세 개의 사이트 주 소 를 보고 돌아 온 결 과 를 보면 알 수 있다.  주입 가능 한 표현:    ① 정상 디 스 플레이(이것 은 필연 적 인 것 입 니 다.그렇지 않 으 면 프로그램 이 잘못 되 었 습 니 다)    ② 정상 적 인 디 스 플레이,내용 은 기본적으로 ① 와 같다.    ③ 알림 BOF 또는 EOF(프로그램 이 판단 하지 않 았 을 때),알림 이 기록 을 찾 지 못 하거나(rs.eof 를 판단 할 때)내용 이 비어 있 거나(프로그램 이 on 을 추가 하 였 습 니 다. error resume next)  주입 하지 않 으 면 쉽게 판단 할 수 있 습 니 다.① 똑 같이 정상적으로 표 시 됩 니 다.② 와 ③ 일반적으로 프로그램 이 정의 하 는 오류 알림 이나 알림 형식 전환 시 오류 가 발생 합 니 다.  물론 이것 은 매개 변수 가 디지털 형 일 때 사용 하 는 판단 방법 일 뿐 실제 응용 할 때 문자 형 과 검색 형 매개 변수 가 있 습 니 다.저 는 중급 편의'SQL 주입 일반 절차'에서 분석 하 겠 습 니 다.제3 절,데이터베이스 유형 판단 및 주입 방법  서로 다른 데이터 뱅 크 의 함수,주입 방법 은 모두 차이 가 있 기 때문에 주입 하기 전에 우 리 는 데이터 뱅 크 의 유형 을 판단 해 야 한다.일반적으로 ASP 가 가장 많이 조합 하 는 데이터 베 이 스 는 Access 와 SQLServer 로 인터넷 에서 99%가 넘 는 사이트 가 그 중의 하나 이다.  어떻게 프로그램 에 게 그것 이 사용 하 는 어떤 데이터 베 이 스 를 알려 줍 니까?어디 보 자:  SQLServer 에는 일부 시스템 변수 가 있 습 니 다.서버 IIS 알림 이 닫 히 지 않 았 고 SQLServer 가 오류 알림 을 되 돌려 주면 오류 정 보 를 직접 얻 을 수 있 습 니 다.방법 은 다음 과 같 습 니 다.    http://www.19cn.com/showdetail.asp?id=49 ;;and user>0  이 문 구 는 매우 간단 하지만 SQLServer 특유 의 주입 방법의 정 수 를 포함 하고 있 습 니 다.저도 본의 아니 게 테스트 에서 이런 효율 이 매우 높 은 추측 방법 을 발 견 했 습 니 다.내 가 보기에 그것 의 의 미 를 좀 보 자.우선,앞의 문 구 는 정상 적 이 고 중점 은 and 이다. user>0,user 는 SQLServer 의 내 장 된 변수 입 니 다.그 값 은 현재 연 결 된 사용자 이름 이 고 유형 은 nvarchar 입 니 다.nvarchar 의 값 을 int 의 수 0 과 비교 하면 시스템 은 nvarchar 의 값 을 int 형 으로 바 꾸 려 고 합 니 다.물론 바 꾸 는 과정 에서 오류 가 발생 할 수 있 습 니 다.SQLServer 의 오류 알림 은 nvarchar 값 입 니 다. ”abc” 데이터 형식 변환 int 의 열 에 문법 오류 가 발생 했 습 니 다.하하,abc 는 바로 변수 user 의 값 입 니 다.그러면 먼지 를 털 지 않 고 데이터 뱅 크 의 사용자 이름 을 얻 을 수 있 습 니 다.앞으로 의 지면 에 서 는 이런 방법 을 사용 하 는 문 구 를 많이 볼 수 있 을 것 이다.  참고 로 SQLServer 의 사용자 sa 는 Adminstrators 권한 과 같은 역할 로 sa 권한 을 얻 었 습 니 다.호스트 의 Administrator 를 받 을 수 있 을 것 입 니 다.위의 방법 은 sa 로 로그 인 하 는 지 여 부 를 편리 하 게 테스트 할 수 있 습 니 다.주의해 야 할 것 은 sa 로그 인 이 라면'dbo'를 int 로 변환 하 는 열 에 오류 가 발생 하 는 것 이지'sa'가 아 닙 니 다.  서버 IIS 가 오류 알림 을 되 돌려 주지 않 는 다 면 데이터베이스 종 류 를 어떻게 판단 합 니까?저 희 는 Access 와 SQLServer 의 차이 점 에 착안 하여 Access 와 SQLServer 는 모두 자신의 시스템 표를 가지 고 있 습 니 다.예 를 들 어 데이터 베 이 스 를 저장 하 는 모든 대상 의 표,Access 는 시스템 표[msysobject]에 있 지만 웹 환경 에서 이 표를 읽 으 면'권한 이 없습니다'라 는 것 을 알 립 니 다.SQLServer 는 표[sysobject]에서 웹 환경 에서 정상적으로 읽 을 수 있 습 니 다.  주입 이 가능 한 지 확인 한 상태 에서 다음 문장 을 사용 하 십시오.    http://www.19cn.com/showdetail.asp?id=49 ;;and (select count(*) from sysobjects)>0    http://www.19cn.com/showdetail.asp?id=49 ;;and (select count(*) from msysobjects)>0  데이터베이스 가 SQLServer 라면 첫 번 째 사이트 의 페이지 와 원본 페이지 입 니 다.http://www.19cn.com/showdetail.asp?id=49대체로 같다.두 번 째 주 소 는 표 msysobjects 를 찾 지 못 해 오류 가 발생 할 수 있 습 니 다.프로그램 이 잘못 처리 되 더 라 도 페이지 는 원래 페이지 와 완전히 다 릅 니 다.  만약 에 데이터 베 이 스 를 Access 로 사용한다 면 상황 이 다 르 고 첫 번 째 사이트 의 페이지 는 원래 페이지 와 완전히 다르다.두 번 째 주 소 는 데이터베이스 설정 이 이 시스템 표를 읽 을 수 있 는 지 여부 에 따라 일반적으로 허용 되 지 않 기 때문에 원래 의 사이트 와 도 완전히 다르다.대부분의 경우 첫 번 째 주 소 를 사용 하면 시스템 이 사용 하 는 데이터베이스 유형 을 알 수 있 고 두 번 째 주 소 는 IIS 오류 알림 을 열 때 만 검증 된다.

좋은 웹페이지 즐겨찾기