ASP 구멍 전체 접촉-진급 편

입문 편 에서 우 리 는 SQL 주입 의 판단 방법 을 배 웠 지만 진정 으로 사이트 의 비밀 내용 을 얻 으 려 면 턱 없 이 부족 하 다.그 다음 에 우 리 는 데이터 베이스 에서 얻 고 싶 은 내용 을 얻 는 방법 을 계속 배 울 것 이다.먼저,우 리 는 SQL 주입 의 일반적인 절 차 를 살 펴 보 자.첫 번 째 절,SQL 주입 의 일반적인 절 차 는 먼저 환경 을 판단 하고 주입 점 을 찾 아 데이터 베이스 유형 을 판단 하 는 것 이다.이것 은 입문 편 에서 이미 말 했다.그 다음 에 주입 매개 변수 유형 에 따라 머 릿 속 에서 SQL 문장의 원래 모습 을 재 구성 하고 매개 변수 유형 에 따라 다음 과 같은 세 가지 로 나 뉜 다.(A)ID=49 이런 주입 매개 변 수 는 디지털 형 이 고 SQL 문장의 원래 모습 은 대체적으로 다음 과 같다.Select*from 표 명 where 필드=49 주입 매개 변 수 는 ID=49 And[조회 조건]이다.즉,생 성 문구:Select*from 표 명 where 필드=49 And[조회 조건](B)Class=드라마 와 같은 주 입 된 매개 변 수 는 문자 형 이 고 SQL 문장의 원래 모습 은 대체적으로 다음 과 같다.Select*from 표 명 where 필드='연속극'에 주 입 된 매개 변 수 는 Class=연속극'and[조회 조건]and'='이다.즉 생 성 문구:Select*from 표 명 where 필드='연속극'and[조회 조건]and'='(C)검색 시 매개 변 수 를 걸 러 내지 않 은 경우,예 를 들 어 keyword=키워드,SQL 문 구 는 원래 모습 이 다음 과 같 습 니 다.Select*from 표 명 where 필드 like'%키워드%'가 주입 한 매개 변 수 는 keyword='and[조회 조건]and'%25'='입 니 다.즉,생 성 문구:Select*from 표 이름 where 필드 like'%'and[조회 조건]and'%'='%'이 어 조회 조건 을 SQL 구문 으로 바 꾸 고 표 이름 을 맞 추 는 것 입 니 다.예 를 들 어 ID=49 And(Select Count(*)from Admin)>=0 페이지 가 ID=49 와 같 으 면 추가 조건 이 성립 된다 고 말 합 니 다.즉,표 Admin 이 존재 하 는 것 입 니 다.반대로,즉 존재 하지 않 는 다.시계 이름 을 맞 힐 때 까지 이렇게 순환 합 니 다.표 이름 을 맞 힌 후 Count(*)를 Count(필드 이름)로 바 꾸 고 같은 원리 로 필드 이름 을 맞 춥 니 다.여기 에는 우연 한 성분 이 있다.시계 이름 이 복잡 하고 불규칙 하 게 지 어 졌 다 면 더 이상 놀 수 없 었 을 것 이다.맞 는 말이다.이 세상 에는 100%성공 한 해 킹 기술 이 존재 하지 않 는 다.파 리 는 틈 이 없 는 알 을 물 지 않 는 다.아무리 기술 이 높 은 해 킹 이라도 다른 사람의 프로그램 이 엄밀 하지 않 거나 사용자 의 비밀 유지 의식 이 부족 하기 때문에 손 을 쓸 수 있다.주제 에서 벗 어 났 습 니 다.그 나 저 나 SQLServer 라 이브 러 리 에 대해 서 는 프로그램 이 표 이름과 필드 이름 을 알려 줄 수 있 는 방법 이 있 습 니 다.고급 편 에서 소개 하 겠 습 니 다.마지막 으로 표 이름과 열 명 추측 에 성공 한 후에 SQL 문 구 를 사용 하여 필드 의 값 을 얻 을 수 있 습 니 다.다음은 가장 자주 사용 하 는 방법 인 Ascii 축 자 디 코딩 법 을 소개 합 니 다.비록 이런 방법 은 속도 가 매우 느 리 지만 실행 가능 한 방법 일 것 입 니 다.예 를 들 어 표 Admin 에 username 필드 가 존재 한 다 는 것 을 알 고 있 습 니 다.먼저 첫 번 째 기록 을 취하 고 길 이 를 테스트 합 니 다.http://www.19cn.com/showdetail.asp?id=49 ;;and(select top 1 len(username)from Admin)>0 먼저 원 리 를 설명 합 니 다.top 1 의 username 길이 가 0 보다 크 면 조건 이 성립 됩 니 다.그 다음 에>1,>2,>3 이렇게 테스트 를 하면 조건 이 성립 되 지 않 을 때 까지 예 를 들 어>7 이 성립 되 지 않 고>8 이 성립 되 지 않 으 면 len(username)=8 은 당연히 0,1,2,3 에서 하나씩 테스트 하 는 사람 이 없 을 것 이다.어떻게 해 야 각자 의 발휘 에 달 려 있다.username 의 길 이 를 얻 은 후에 mid(username,N,1)로 N 번 째 문 자 를 캡 처 하고 asc(mid(username,N,1)로 ASCII 코드 를 얻 습 니 다.예 를 들 어 id=49 and(select top 1 asc(mid(username,1,1)from Admin)>0 역시 범 위 를 점차적으로 축소 하 는 방법 으로 1 번 째 문 자 를 얻 은 ASCII 코드 입 니 다.영어 와 숫자의 ASCII 코드 는 1-128 사이 에 있 습 니 다.절반법 으로 추측 을 가속 화 할 수 있 으 며,프로그램 테스트 로 쓰 면 효율 이 크게 향상 된다.2 절,SQL 주입 상용 함수 가 SQL 언어 기반 이 있 는 사람 은 SQL 주입 시 성 공률 이 익숙 하지 않 은 사람 보다 훨씬 높다.우 리 는 자신의 SQL 수준,특히 자주 사용 하 는 함수 와 명령 을 향상 시 킬 필요 가 있다.Access:asc(문자)SQLServer:unicode(문자)역할:특정한 문 자 를 되 돌려 주 는 ASCII 코드 Access:chr(숫자)SQLServer:nchar(숫자)역할:asc 와 반대로 ASCII 코드 에 따라 문 자 를 되 돌려 줍 니 다 Access:mid(문자열,N,L)SQLServer:substring(문자열,N,L)역할:문자열 을 N 글자 에서 L 길이 의 하위 문자열 로 되 돌려 줍 니 다.즉 N 에서 N+L 사이 의 문자열 Access:abc(숫자)SQLServer:abc(숫자)역할:숫자의 절대 값 을 되 돌려 줍 니 다(한 자 를 맞 출 때 사용 합 니 다)Access:A between B And C SQLServer:A between B And C 역할:A 가 B 와 C 사이 의 세 번 째 절 에 있 는 지 판단 합 니 다.중국어 처리 방법 은 주입 중 에 중국어 문 자 를 만 나 는 것 은 흔히 있 는 일이 고,어떤 사람들 은 중국어 문 자 를 만 나 기만 하면 중도 에서 물 러 나 려 고 한다.사실 중국어 인 코딩 에 대해 알 면'중국어 공포 증'은 곧 극복 할 수 있다.먼저 상식 을 말씀 드 리 겠 습 니 다.Access 에서 중국어 의 ASCII 코드 는 마이너스 가 발생 할 수 있 습 니 다.이 음 수 를 꺼 낸 후에 abs()로 절대 치 를 취하 고 한자 문 자 는 변 하지 않 습 니 다.SQLServer 에서 중국어 ASCII 는 정수 이지 만 유 니 코드 의 두 자리 인 코딩 이기 때문에 함수 ascii()로 ASCII 코드 를 얻 을 수 없습니다.함수 유 니 코드()로 유 니 코드 값 을 되 돌려 주 고 nchar 함수 로 대응 하 는 중국어 문 자 를 가 져 와 야 합 니 다.위의 두 가 지 를 알 게 된 후에 중국어 로 맞 히 는 것 도 사실 영어 와 차이 가 많 지 않다 고 생각 하지 않 습 니까?사용 하 는 함 수 를 제외 하고 주의 하고 추측 하 는 범위 가 좀 넓 은 것 외 에 방법 은 별 반 다 르 지 않다.

좋은 웹페이지 즐겨찾기