일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- Open Web Application Security Project
- SQL
- sql injection
- owasp 2022
- sql injection 공격
- sql developer
- server side request forgery
- sql join
- sql select
- owasp 취약점
- CSRF
- 정보보안컨설팅
- 보안 설정 오류
- web shell
- ISMSP
- blind sql injection
- web shell공격
- sql 공부
- SQL ORDER BY
- SQL 쿼리문
- owasp 가이드
- 잘못된 접근 제어
- SQLD
- sql group by
- sql 개발자
- 암호화 실패
- ssrf
- SQL 자격증
- sql 문법
- 해킹
- Today
- Total
MetaCODING
SQL(Structured Query Language) Injection 공격 위험성(1) 본문
SQL인젝션 공격은 대표적으로 DB를
공격해서 개인정보 등의 정보를 탈취하는 방식입니다.
예컨대, 어떤 웹사이트가 있는데 사용자 아이디가 ‘korea' --’이고
비밀번호는 ‘사용자pw’으로 설정했을때 사용자 아이디와 비밀번호를
제대로 입력해야 해당 웹사이트 DB에 접속해 정보를 볼 수 있는 것입니다.

SQL Injection은 사용자 비밀번호를 제대로 입력하지 않고
해커가 임의로 여러 문자 조합을 이용해 DB에 접속해 비밀번호를 볼 수 있게 도와주는데
아이디로 ‘사용자id’를 넣고, 비밀번호로 '사용자pw’를 입력하여 DB에 접근해 정보를 탈취합니다.
구글 검색을 통해 공격 대상 웹사이트에 추가적인 문자열을 입력하여 웹사이트 접속 오류를 유도한 다음,
해당 웹사이트 관리자 모드로 들어가 내부 정보를 빼오는 수법도 있지요.
만약 공격자가 DB 시스템에서 시스템 명령어를 실행할 수 있도록 설정해 놓았을 경우,
해당 웹사이트 DB에서 시스템 명령어도 실행할 수 있습니다.

공격 종류 및 방법
SQL Injection 공격은 Error-Based SQL Injection Attack, 인증우회,
Union SQL Injection Attack, Blind SQL Injection Attack으로 나눠 설명 가능합니다.

Error-Based SQL Injection Attack
논리적 에러를 이용한 SQL Injection
논리적 에러를 이용한 SQL Injection 공격은
가장 대중적이면서 만연하게 쓰이는 공격입니다.
Error-Based SQL Injection Attack은 해커가 검사가 안된
취약한 입력값을 발견하고 이를 악용하는데, 검사 입력값은
입력한 데이터에서도 불필요한 부분을 제거하며 해커는 잘못된 정보를
입력하고 피드백을 기다려 그 정보를 가로채는 식이죠.
위의 사진에서 보이는 SQL Query쿼리문은
일반적인 로그인 시 많이 이용하는 SQL 구문입니다.
해당 구문에서 입력 값에 대한 검증이 없음을 확인하고
악의적인 공격자, 해커가 임의의 SQL 구문을 주입합니다.
예컨대, korea' --로 아이디가 인증 되었다면,
뒤의 '사용자 pw'정보는 사라짐으로써 취약점이 될 수 있습니다.
즉,
'싱글쿼터는 SQL에서 문법으로 받아들여지기 때문에 주입된 내용은 korea' -- 로
WHERE 절에 있는 싱글쿼터를 닫아주기 위한 싱글쿼터와 korea라는 구문을 이용해
WHERE 절을 모두 참으로 만들고 -- 를 넣어줌으로 뒤의 구문을 모두 주석 처리 해주었습니다.
결론적으로, 매우 간단한 구문이지만
Users 테이블에 있는 모든 정보를 조회하게 됨으로써
가장 먼저 만들어진 계정으로 로그인에 성공하게 됩니다.
통상적으로 관리자 계정을 맨 처음 만들기 때문에 관리자 계정에 로그인 할 수 있게 되고
관리자 계정을 탈취한 악의적인 공격자는 관리자의 권한을 이용해 또 다른 2차피해를 발생 시킬 수 있습니다.

Union-Based SQL Injection Attack
Union 명령어를 이용한 SQL Injection
Union-Based SQL Injection Attack은 두 Query쿼리문에 대한
결과를 통합해서 하나의 테이블로 보여주게 하는 키워드 입니다.
정상적인 Query쿼리문에 Union키워드를 사용하여 인젝션에 성공하면
원하는 쿼리문을 실행할 수 있게 되는데, Union Injection을 성공하기 위해서는
두 가지의 조건이 있습니다.
①질의(Union)하는 컬럼이 *이 아니고 두 테이블의 컬럼 수가 같거나 적어 보일때 ②데이터 형이 같을때 입니다.
Ⅰ. 위의 사진에서 보이는 Query쿼리문은 Board라는 테이블에서 게시글을 검색하는 쿼리문인데
입력 값을 title과 contents컬럼의 데이터랑 비교한 뒤 비슷한 글자가 있는 게시글을 출력합니다.
여기서 입력값으로 Union키워드와 함께 컬럼 수를 맞춰서 SELECT구문을 넣어주게 되면
두 쿼리문이 합쳐서서 하나의 테이블로 보여지게 되죠.
현재 인젝션 한 구문은 사용자의 id와 passwd를 요청하는 쿼리문이고
인젝션이 성공하게 되면 사용자의 개인정보가 게시글과 함께 화면에 보여지게 됩니다.
Ⅱ. 주소 찾기 란에
' union select 1,2,3,4,5 --
Ⅲ. 구문변경
- ' union select 1,2,3,4,5 from information_schema.tables --
- ' union select 1,2,3,4, table_name from information_schema.tables --
- ' union select 1,2,3,4, table_name from information_schema.columns --
- ' union select 1,2,3,4, column_name from information_schema.columns where table_name = 'members' --
- ' union select 1,2, num, user_id, passwd from members --
물론 패스워드를 평문으로 데이터베이스에 저장하지는 않겠지만
인젝션이 가능한 점에서 이미 그 이상의 보안위험에 노출되어 있고
이 공격도 역시 입력값에 대한 검증이 없기 때문에 발생하게 되었습니다.
SQL(Structured Query Language) Injection 공격 대응방안(2)
Blind SQL Injection Boolean based 불 방식의 SQL Blind SQL Injection은 데이터베이스로부터 특정한 값과 데이터를 전달받지 않고 단순히 참과 거짓의 정보만 알 수 있을 때 사용합니다. 로그인 폼에 SQL Injection
metacoding.tistory.com
OWASP(Open Web Application Security Project) TOP10 10대 취약점 가이드
https://zrr.kr/JLk4 OWASP(Open Web Application Security Project) TOP10 10대 취약점 가이드 변천사 OWASP 10대 취약점 가이드 변천사 저번에 OWASP(Open Web Application Security Project) 탑10 10대 취약점 가이드에 대해서 글을
metacoding.tistory.com
'보안' 카테고리의 다른 글
ARP Spoofing 스푸핑 공격을 이용한 MITM 공격 원리 (0) | 2023.09.01 |
---|---|
SQL(Structured Query Language) Injection 공격 대응방안(2) (0) | 2023.08.31 |
SQL(Structured Query Language) Injection 공격 개념 취약점 (0) | 2023.08.31 |
OWASP(Open Web Application Security Project) TOP10 10대 취약점 가이드 변천사 (0) | 2023.08.29 |
OWASP(Open Web Application Security Project) TOP10 10대 취약점 가이드 (0) | 2023.08.29 |