sql 주입 의 초보 입문 예시 상세 설명

머리말
이 글 을 배우 기 전에 SQL 주입 의 전제 지식 을 배 워 야 하 므 로 앞서 쓴 한 편sql 주입 에 필요 한 기초 지식을 참고 할 수 있다.
SQL 주입 인식
처음부터 가장 간단 한 것 부터 less-1 에 들 어가 서 우리 의 SQL 주입 학습 여행 을 시작 합 니 다.http://localhost/sqlilabs/Less-1/?id=3의 id 값 을 변경 함으로써 페이지 에 서로 다른 내용(username,password)을 보 여 줍 니 다.
그러면 배경 에 있 는 SQL 문 구 는 프론트 데스크 에서 들 어 오 는 id 값 에 따라 대응 하 는 데이터 라 고 추측 할 수 있 습 니 다.
그러면 SQL 문장의 쓰 기 는:

select username,password from table where id=input
SQL 구문 존재 판단
다음은 테스트 를 하고 다음 문장 을 사용 하여 테스트 를 진행한다.

http://localhost/sqlilabs/Less-1/?id=3 and 1=1
http://localhost/sqlilabs/Less-1/?id=3 and 1=2
이때 페이지 는 아무런 변화 가 없 었 다.이것 은 우리 가 예상 한 결과 에 부합 되 지 않 았 다.id=3 and 1=2때 SQL 문 구 는select username,password from table where id=3 and 1=2페이지 로 바 뀌 었 기 때문에 내용 이 없 을 것 이다.
SQL 구문 존재 확인
이전의 문 구 를 사용 하면 안 된다.그 후에 우 리 는 다음 과 같은 문 구 를 사용한다.

http://localhost/sqlilabs/Less-1/?id=3'
URL 이 위의 SQL 문장 일 때 페이지 에 SQL 실행 오류 정보You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near ''3'' LIMIT 0,1' at line 1가 표 시 됩 니 다.
그 중에서 가장 중요 한 오류 정 보 는:''3'' LIMIT 0,1'가장 바깥쪽 따옴표 는 my sql 오류 가 발생 했 을 때 자동 으로 추 가 됩 니 다.그럼 실제 SQL 문 구 는'3'' LIMIT 0,1입 니 다.우 리 는 우리 가 입력 한 3'이 따옴표 에 둘러싸 인 것 을 발견 했다.그러면 우리 가 이전에 추측 한select username,password from table where id=input이 잘못 되 었 고 실제 배경 에 있 는 SQL 문 구 는 다음 과 같 아야 한다.

select username,password from table where id='input'
SQL 주입 검증
SQL 주입 이 존재 하 는 지 확인 한 후에 배경 SQL 쓰기 도 알 게 되 었 습 니 다.그러면 이때 우 리 는 자신의 SQL 주입 코드 를 주입 할 수 있 습 니 다.
id 의 값 을 제어 할 수 있 기 때문에 최종 입력 한 SQL 문 구 는 다음 과 같 습 니 다.

select username,password from table where id='input     '
이때 우 리 는 다음 과 같은 payload 를 구성 하여 우리 의 생각 을 검증 할 수 있다.우리 의 입력 은 한 쌍 의 따옴표 에 싸 여 있 기 때문에 우리 가 입력 한 문 구 는 반드시 따옴표 에 영향 을 받 지 않 아야 한다.작은 따옴표 를 닫 거나 작은 따옴표 를 주석 합 니 다.앞 에문장.참조 가능

#     
id=1 and '1' = '1 # 
#     
id=1 and 1=1 #    id=1 and 1=1--+
우리 가 위의 이 세 개의 payload 를 사용 한 후에 페이지 에 표 시 된 결 과 는 예상 에 부합 되 었 다.그러면 우 리 는 id 매개 변수 가 SQL 주입 이 확실히 존재 한 다 는 것 을 확인 할 수 있 습 니 다.백 엔 드 의 SQL 문 구 를 쓰 는 방법 도 확실 하 다select username,password from table where id='input'.
SQL 문 구 를 확정 한 후에 이어서 SQL 주입 코드 를 주입 합 니 다.
SQL 주입 실행
SQL 문 구 를 사용 해 바 지 를 벗 는 것 이 관건 이다.SQL 주입 이 존재 한 다 는 것 만 알 고 바 지 를 벗 을 수 없다 면 실제로 이 구멍 은 이 사이트 에 대한 위해 성 이 적다.정확 한 SQL 문 구 를 어떻게 구성 하여 탈 바 지 를 하 느 냐 도 중요 하 다.다음 글 에 서 는 SQL 주입 의 상세 한 절 차 를 상세히 설명 할 것 이다.
주입 유형 판단
이 문제 의 SQL 문 구 는 문자 형 SQL 주입 이 라 고 합 니 다.SQL 문 구 를 실행 하 는 과정 에서 작은 따옴표 에 포함 되 어 있 기 때 문 입 니 다.사실은 SQL 문 구 를 실행 하 는 과정 에서 이 id 매개 변 수 는 문자 형식의 데이터 로 여 겨 집 니 다.문자 형 SQL 주입 외 에 도 디지털 형 SQL 문 구 는 물론 있다.그렇다면 이 두 가 지 를 어떻게 구분 할 것 인가?
문자 형 SQL 주입
SQL 구문 이 존재 하 는 지 확인 하 는 절 에서 우리 가 입력id=3'하면 페이지 의 오류 정 보 는'3'' LIMIT 0,1입 니 다.우 리 는 3'이 따옴표 에 둘러싸 인 것 을 발견 했다.그러면 이것 이 바로 문자 형의 SQL 주입 이라는 것 을 설명 한다.
디지털 SQL 주입
less-2 에서 우리 가 똑 같이 입력id=3'할 때 페이지 의 오류 정 보 는 ' LIMIT 0,1입 니 다.그러면 하나의 디지털 주입 과 동시에limit키워드 가 존재 한 다 는 것 을 설명 합 니 다.그러면 less-2 의 SQL 주입 은:

select username,password from table where id=input limit 0,1
이상 은 소스 코드 를 보 는 방식 으로 검증 할 수 있 습 니 다.
SQL 구문 판단
그러나 우 리 는 작은 따옴표 방식 으로 sql 실행 문장의 잘못된 정 보 를 되 돌려 주지 못 하고 잘못된 정 보 를 통 해 유형 을 주입 할 수 없 는 경우 가 많다.배경 에 있 는 SQL 문 구 는 여러 가지 기괴 한 기법 이 있 기 때문이다.
less-3 과 less-4 에서 의 문법 은 다음 과 같다.

$sql="SELECT * FROM users WHERE id=('$id') LIMIT 0,1"
less-3 에서 괄호 를 사용 하여 사용자 의 입력 을 감 쌌 습 니 다.

$id = '"' . $id . '"';
$sql="SELECT * FROM users WHERE id=($id) LIMIT 0,1";
less-4 에서 더 블 따옴표 로 사용자 의 입력 을 감 쌌 습 니 다.작은 따옴표 를 붙 여 테스트 를 진행 하 더 라 도 SQL 문 구 를 시작 할 수 없습니다.
그래서 많은 경우 에 단일 한 기호 로 만 판단 하 는 것 은 전혀 부족 하 다.서로 다른 유형의 기 호 를 사용 하여 테스트 하 는 판단 을 해 야 한다.',',','등 문 자 를 사용 해 야 한다.(,=,&등 문 자 를 포함 하고 심지어 가끔 은 다른 탐색 방법 도 사용 해 야 한다.왜냐하면 백 엔 드 의 SQL 문 구 를 판단 할 수 없 기 때문이다.그리고 현재 많은 사이트 개발 자 들 이 어느 정도 안전 의식 을 가지 고 있 기 때문에 일반적인 SQL 탐사 문구 도 사용 할 수 없 을 것 이다.다 중 SQL 에 주 입 된 다른 탐사 문 구 는 인터넷 에 많은 자료 가 있다.
총결산
SQL 주입 의 판단 은 만능 방법 이 없고 끊임없이 시도 할 수 밖 에 없다.일정한 경험 이 있 으 면 주입 유형 에 대해 자각 을 가지 게 되 고 SQL 주입 에 대한 판단 도 빨 라 질 것 이다.이상 이 이 글 의 전체 내용 입 니 다.실제 인터넷 에 있 는 사이트 에 대해 안전 테스트 를 하려 면 이상 의 지식 이 턱 없 이 부족 합 니 다.소 편 은 더 많은 sql 주입 글 을 계속 업데이트 할 것 입 니 다.계속 지 켜 봐 주 십시오.

좋은 웹페이지 즐겨찾기