본문 바로가기
웹 해킹

Ch 04 SQL 인젝션 공격

by plum06 2023. 1. 25.

*잘못된 부분이 있을 경우 댓글로 알려주신다면 감사하겠습니다!

 

 

SQL

관계형 데이터베이스 관리 시스템의 데이터를 관리하기 위해 설계된 특수 목적의 프로그래밍 언어입니다. SQL1974년에 IBM의 도널드 챔벌린과 레이먼드 보이스가 개발했습니다. 데이터 조작 언어*(Data Manipulation Language, DML)와 데이터 정의 언어*(Data Definition Language, DDL)로 구분됩니다.

데이터베이스와 관련하여 데이터의 등록 및 업데이트, 검색, 삭제 등의 작업을 SQL을 사용해 수행합니다.

 

참고)*DML : 데이터베이스에 저장된 데이터를 조회, 수정, 삭제 등의 역할을 수행하는 언어. 명령어로 SELECT, UPDATE, INSERT INTO, DELETE FROM 존재.

*DDL : 데이터베이스를 정의하는 언어로 데이터베이스 개체(뷰, 스키마, 테이블, 인덱스) 구조를 결정. 예를 들어 테이블과 관련된 열을 생성, 수정, 삭제 가능. 명령어로 CREATE, ALTER, DROP 존재.

출처: https://ko.theastrologypage.com/data-manipulation-language

https://ko.theastrologypage.com/data-definition-language

 

 

SQL Injection(SQL 삽입 공격)

데이터베이스에는 사용자 정보와 같은 중요한 정보가 저장되어 있습니다. 공격자라면 데이터베이스에 들어있는 정보들을 원할 겁니다. 이를 알아내기 위한 하나의 방법으로 SQL 인젝션이 있는데 공격자가 개발자가 의도하지 않은 SQL 구문을 삽입해 데이터베이스로부터 데이터를 검색하거나 수정하는 공격을 의미합니다. SQL 인젝션 공격 시에 데이터베이스의 종류에 따라 필요한 기법이 다를 수 있습니다.

 

원리는 다음과 같습니다.

사용자가 어떤 정보를 웹 서버에 요청하면 이에 필요한 정보를 웹 서버가 데이터베이스 서버에 요청합니다. 여기서 웹 서버가 데이터베이스 서버에 요청할 때 SQL이 사용됩니다. 공격자는 여기서 사용되는 SQL 구문에 자신이 원하는 구문을 넣습니다. SQL 인젝션에 대해 아래 사진을 참고하겠습니다.

출처: https://www.cloudflare.com/ko-kr/learning/security/threats/sql-injection/

 

Web API ServerSQL Database Server에 요청할 때 공격자는 자신이 의도한 결과가 나오도록 SQL 구문을 삽입합니다. 데이터베이스는 요청에 따라 ID를 검색할 텐데 ID가 일치하거나 어떤 조건을 가지고 테스트를 진행합니다. 위의 사진에서 공격자는 모든 학생들의 정보를 원합니다. 그래서 ‘or 1=1’ 부분을 웹 서버가 데이터베이스 서버에 하는 요청에 추가합니다. ‘1=1’은 어떤 경우라도 항상 참입니다. 이는 결국 데이터베이스가 모든 학생들의 ID 정보를 보내는 것으로 이어집니다. 이렇게 공격자는 자신이 원하는 정보를 얻을 수 있습니다.

 

 

SQL Injection 역사

OWASP Top 10이 처음 발표된 2004년부터 가장 최근에 발표된 2021년까지 인젝션에 대해 안 나온 적이 없었습니다. 아래는 SQL Injection의 등장부터 지금까지의 사고를 간단히 적은 것입니다.

 

199812월 온라인 잡지 <Phrack> 54호에 처음 개념이 소개됨. Rain Forest Puppy(rfp)란 팀이 발표한 NT Web Technology Vulnerabilities에서 웹 애플리케이션과 데이터베이스 간 취약점 언급하면서 SQL문을 변조할 수 있다는 가능성 보여줌('SQL 인젝션'이란 표현 자체를 사용X).

20012월 rfp가 SQL Injection 문서 공개.

20023SQL 인젝션 공격으로 인한 약 20만 명의 신용카드 사용자 정보 유출

20056월 서던캘리포니아 대학교 온라인 시스템이 SQL 인젝션 취약점에 노출

200612월 한 악의적인 해커가 UCLA 학생 기록 80만 건 열람

2007년 마이크로소프트 UK 홈페이지가 SQL 인젝션 공격에 노출

20084Heartland Payment Systems의 13천만 개의 신용카드 정보 유출

201012월 미 해군 웹 사이트 해킹당함.

2011년 익스피디아 고객 이메일 목록 유출

2011년 소니픽쳐스 프랑스 웹사이트 170여 개의 이메일 주소 탈취 당함.

2015년 장난감 회사인 VTech 몇몇 어린이들에 대한 세부 정보를 포함해 고객 정보(이름, 이메일주소, 우편주소, 암호 검색을 위한 비밀 질문 및 답변) 유출

2017년 미국의 다국적 소비자 신용 보고 기관 Equifax 1억 4300만 명 고객의 개인 정보 노출

20208Freepik 사이트 830만 건의 정보 유출

2022 LG유플러스 직원 메일 정보, 개인정보 유출

 

출처:  https://www.malwarebytes.com/sql-injection

https://www.databasejournal.com/features/prevent-sql-injections/

https://securityaffairs.co/62934/hacking/equifax-hack-struts.html

https://www.bbc.com/news/technology-34944140

https://www.digitaltoday.co.kr/news/articleView.html?idxno=462198 

 

 

XPath Injection(XPath 삽입 공격)

XPathXML 문서로부터 선택한 노드를 사용하기 위한 프로그래밍 언어이고 XML 데이터를 트리 구조 값으로 형성합니다. 또한 XML문장을 트리로서 다루기에 요소나 속성 위치를 지정할 수 있습니다.

XML* HTML과 매우 유사한 문자 기반의 마크업 언어*이지만 HTML과 달리 데이터를 저장하고 전달할 목적으로만 만들어졌습니다.

XPath 인젝션은 SQL 인젝션과 유사합니다. XPath 인젝션은 웹사이트에서 사용자측 정보를 이용해 XPath 쿼리를 할 경우에 발생합니다. XML 구조에 악의적인 행위를 일으키는 내용을 삽입하거나 XPath를 조작하여 XML 구조에 대해 알아내거나 일반적으로 접근할 수 없는 데이터를 알아낼 수 있는 공격입니다. XML 데이터가 인증에 사용될 경우 웹사이트에 대한 권한을 높일 수도 있습니다.

출처: https://owasp.org/www-community/attacks/XPATH_Injection

 

아래는 C#에서 XPath를 처리하는 예시입니다.

String FindUserXPath;
FindUserXPath="//Users/user[username/text()='"+Request("Username")+"' and password/text()='"+Request("Password")+"'];

이름과 비밀번호를 입력하면 각각 Username, Password에 그 값이 들어갑니다. 아래는 이름, 비밀번호를 입력했을 때의 궈리문 예시입니다.

예) Username: HelloWorld

Password: Hello_WPassword

XPath query: //Users/user[username/text()='HelloWorld' and password/text()='Hello_WPassword']

 

 

참고) *XML : 데이터를 텍스트 형식으로 저장하기 때문에 소프트웨어나 하드웨어에 독립적으로 데이터를 저장하고 전달 가능. 서로 호환되지 않는 데이터 타입을 사용하는 시스템 간의 데이터 교환에 유용.

출처: www.tcpschool.com/xml/xml_intro_purpose

XML과 TXT 차이: XML은 보여주는 것보다 데이터를 저장하고 전달하기 위해 설계됨. TXT도 데이터를 저장하는데 파일을 쉽게 열고 데이터를 읽을 수 있음. 둘의 차이는 사용 용도.

출처: https://www.whatisdifferencebetween.com/software/what-is-the-difference-between-xml-file-txt-file-csv-file-and-excel-file.html

*마크업 언어 : 컴퓨터 플랫폼, 운영 체제, 응용 프로그램 또는 프로그램에 관계없이 텍스트에 주석을 달고 태그를 정확한 스타일의 전자 문서에 포함시키는 데에 사용되는 언어

출처: https://ko.theastrologypage.com/markup-language

 

 

 

'웹 해킹' 카테고리의 다른 글

Ch 05 XSS 공격  (0) 2023.02.01
Ch 04 SQL 인젝션 공격(실습)  (0) 2023.01.25
Ch03 인증 기술과 접근 통제(실습)  (0) 2023.01.18
Ch 03 인증 기술과 접근 통제  (0) 2023.01.18
Ch 02 웹 해킹의 기초(실습)  (0) 2023.01.11