1. SQL 인젝션
- 웹 서버 영역의 데이터베이스로 전송되는 SQL 쿼리문을 사용자가 임의로 조작 가능할 때 발생
- 허가되지 않은 정보에 접근하거나 데이터 변조
이론
사례 ① WHERE 구문 우회
$id = $_REAUEST[ ‘id’ ];
$query = “SELECT name, email FROM users WHERE id = ‘$id’;”;
- 코드 내에 위와 같은 SQL 쿼리문 코드가 존재함
- ‘or’ 키워드가 삽입되어 WHERE 문의 조건이 항상 참이 되어 모든 사용자의 정보 전달됨
- ID=1인 사용자와 1=1이 무조건 참이므로 모든 사용자의 정보 노출
사례 ② UNION 구문 활용
- UNION은 합집합으로 두 개의 SELECT 구문의 결과를 모두 포함
- ‘#’ : 뒤에 오는 내용 주석 처리 (가장 끝의 ‘ 문자로 인해 에러가 발생할 수 있기 때문에 : '짝이 맞지 않음)
실습 (BWAPP Low level 기준)
① WHERE 구문 우회 실습
- 1’ or ‘1’=‘1 입력해보기
- ID=1인 사용자와 그 외 모든 사용자의 정보 확인 가능
② UNION 공격 실습
* UNION 공격 실습에 앞서 코드 속 SELECT문에서 몇 개의 column을 지정하고 있는 지와 테이블 이름과 어떤 데이터를 가지고 있는 지 알아내어야 한다!
순서 : ORDER BY로 colum 지정 수 알아내기 -> 데이터베이스 이름 알아내기 -> 데이터베이스 내의 테이블 알아내기
-> 테이블 데이터 알아내기 -> 비밀번호 알아내기
<ORDER BY>
- UNION을 사용하기 위해서는 원래 SQL 쿼리문이 조회하는 SELECT 문의 칼럼 개수 =
UNION 뒤의 SELECT 문에서 요청하는 칼럼 개수
- ORDER BY : 지정된 칼럼을 기준으로 결과를 정렬할 때 사용하는 키워드이며, 위치 인덱스도 이용 가능
- ORDER BY 구문을 이용하여 칼럼 개수 알아낼 수 있음
- 에러가 발생하기 직전의 값이 칼럼의 개수가 됨
- 1’ ORDER BY [num]# 입력해보기
-> 전체 column의 개수가 2개이다!
- ‘ UNION SELECT 1,2# 입력해보기
- 첫번째 SELECT문에서는 아무 ID를 지정해주지 않았으므로 출력 결과가 없고, 두 번째 SELECT문에서는 이름이 1,2인 column이 테이블 내에 존재하지 않기 때문에 디폴트 값처럼 숫자 1,2가 그대로 출력되는 것을 확인할 수 있다.
<데이터 베이스 이름 알아내기>
- Mysql 데이터베이스는 information_schema라는 데이터베이스에서 데이터베이스의 이름,
테이블, 칼럼 정보 등 관리
- Information_schema의 schemata 테이블로부터 schema_name을 가져오는 쿼리문 이용
- ' UNIONSELECTschema_name,2 from information_schema.schemata# 입력
<dvwa 데이터베이스의 테이블 목록 알아내기>
- table_schem가 dvwa인지 확인하는 조건을 주어 dvwa 데이터베이스의 테이블만 출력
- ' UNION SELECT table_name,2 from information_schema.tables where table_schema 입력
<테이블 데이터 알아내기>
- ' UNION SELECT column_name,2 from information_schema.columns where table_schema='dvwa' and table_name='users'# 입력
<비밀번호 알아내기>
- ' UNION SELECT user,password from users# 입력
2. SQL 인젝션 공격 대응
- 입력값 검증
- 시큐어 코딩을 통한 대응
: 사용자가 입력한 값이 오직 데이터로만 사용되어야하고 SQL 쿼리문의 구조에 영향을 줄 수 없도록 코딩
추후에 블라인드 sql 인젝션 구문과 bwapp 실습사이트 난이도별 풀이를 추가할 예정이다...
'웹해킹' 카테고리의 다른 글
웹해킹 #6 크로스 사이트 요청 변조(CSRF) 공격 (1) | 2019.10.13 |
---|---|
웹해킹 #5 크로스 사이트 스크립팅 공격 (XSS) (1) | 2019.10.12 |
웹해킹 #4 커맨드 인젝션 (0) | 2019.09.29 |
웹해킹 #2 실습 환경 구축 및 버프스위트 사용법 (0) | 2019.09.29 |
웹해킹 #1 웹 기본 지식 (URL, HTML, SSS, CSS, HTTP, 쿠키와 세션) (0) | 2019.09.29 |