티스토리 뷰
Web Application에서 입력 받아 데이터베이스로 전달하는 정상적인 SQL 쿼리를 변조, 삽입하여 불법 로그인, DB 데이터 열람, 시스템 명령 실행 등을 수행하여 비정상적인 데이터베이스 접근을 시도하는 공격
무료 SQL Injection 취약점 스캐너
Nikto, SQLMap, Absinthe
Form SQL Injection
- 사용자 인증을 위한 쿼리문의 조건을 임의로 조작하여 인증을 우회하는 기법
- 쿼리문의 조건절(where절)이 항상 참이 되도록 쿼리문 조작
에러 메시지가 발생한다면 입력한 값이 데이터베이스 서버까지 전달되어 처리 중 오류가 방생한 것을 알게됨
데이터베이스 서버까지 전달되었다 = 입력한 값에 대한 검증이 이루어지지 않았다. => 공격자는 땡큐!
where절이 참이 되게 하는 취약한 구문들 'or1=1# ,'or'1'=;1'# , 'or'a'='a'#
id=''or1=1#'and~ id=''or'1'='1'#'and~ id=''or'a'='a'#'and~
실제 db엔 이런식으로 값이 입력됨- 모든 사용자 정보가 나옴
대응책
입력값에 대한 검증이 필요 - 입력할 수 없는 특수문자들 다 제거
1.특수문자(',") -> 일반 문자로 치환
'A' => \' (백슬래시는 넣으면 일반문자로 치환됨)
2.php 설정파일에서 (php.ini)magic_quotes_gpc 설정 을 on을 하게 되면 특수문자를 일반문자로 치환해줌
magic_quotes_gpc : get, post, cookie 방식으로 전달되는 데이터의 특수문자를 일반문자로 치환해 주겠다
-> '특수문자의 escape 처리' 라고 함 ,\ 백슬래시가 자동으로 들어감
실제로는 mysql_real_escape_string()과 같은 mysql 라이브러리 함수 같은 걸 씀
'(single quote)가 이스케이스 처리(백슬래시추가)
3.Prepared Statement (선처리 질의문)
원래는 성능때문에 만들어짐. 외부로부터의 입력값(변경되는 값)을 제외한 쿼리 부분을 미리 컴파일(쿼리분석 및 최적화) 한 후, 반복적으로 입력값만을 설정해서(이를'바인드'한다고 표현) 실행하는 방식으로 성능상의 장점과 더불어 쿼리문 자체는 미리 컴파일 되어 입력값에 의해 영향을 받지 않으므로 SQL Injection 공격을 방어하는 효과.
언어마다 다름 시험공부는 php로..
성능상의 이점과 보안상의 이점을 다 가져 올 수 있음
'or1=1# 이 문자열 전체를 아이디로 봄
4. 파라미터 필터링을 통한 SQL Injection 방지
- blacklist 기반의 필터링을 통한 실행 차단 or white list 기반의 필터링을 통한 실행 허용
php 코드 -> 서버 스크립트 웹어플리케이션서버쪽에서 동작( AWS 서버에서 동작)
php, jsp 등 서버측 스크립트 언어들이 웹 서버에서 동작해서 결과를 클라이언트에게 전달해주는것
정리
1. SQL Injection 공격
- 입력값(사용자)에 대한 검증을 수행
- SQL Injection 관련 특수문자들을 치환한다.(php.ini, magic_quotes_gpc=On, mysql_escape_string())
- 블랙리스트 기반의 필터링을 통해 실행 차단
- Prepared Statement 활용 ? ? ->사용자 입력값을 바인드 하기 위한 지점
SQL Injection에 대한 입력값을 검증하기 위한 방법으로 인증을 수행해야 하는데
공격패턴을 보고 logic으로 방어하면 안됨
공격자의 생각) 그럼 쿼리의 결과로 나오는 패스워드를 임의로 조작할 수 있지 않을까?
이걸 가능하게 해주는 게 union select문
둘 이상의 select 문을 합쳐서 하나의 결과로 보여줌
unionselect문을 쓸 때
1.선행컬럼과 후행 컬럼이 같아야함
2.선행과 후행둘 사이의 타입이 상호 호환이 되야함
The used SELECT statements have a different number of columns
UNION 컬럼 개수가 맞지 않다는 오류
부분 긁어서 id로 사용
sql Injection은 입력값 검증으로 막아야함
컬럼 갯수 파악
1.order by의 인덱스를 1씩 증가시키면서 SQL 에러 발생 여부를 체크
union select 문을 파라미터로 전달하여 admin id에 대한 비밀번호를 admin으로 위조한다. 위조된 비밀번호($pass)파라미터를 전달하여 인증을 우회하려는 기법
- Total
- Today
- Yesterday
- 라우팅테이블
- 보안공부
- 까먹음
- HTTP
- WordPress
- 라우터
- 디지털포렌식
- 웹 취약점 진단
- DMZ
- burp suite
- 웹서버
- 주요정보통신기반시설
- IAM
- OMG
- AWS
- 주의사항
- vmwareesxi
- docker
- VPC
- password
- 게이트웨이
- vmware esxi #linux-mint
- 포렌식 도구
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 | 31 |