처음 만나는 클라우드 보안

SQL 인젝션(Injection)이란? 해킹실습과 대응방안 본문

정보보안

SQL 인젝션(Injection)이란? 해킹실습과 대응방안

영민하게 2022. 5. 10. 00:08
반응형

이번 포스팅에선 대표적인 해킹 기법인 'SQL Injection'에 대해 알아보고, 이를 이용한 해킹을 실습한다.

 

SQL Injection이란?

: 공격자가 보안상의 취약점을 이용하여 임의의 SQL 쿼리 문을 주입하여 데이터베이스가 비정상적으로 작동하여 공격자에게 중요한 정보를 가져오게 하는 해킹 기법을 말한다. OWASP TOP10 에서도 수년간 1순위로 꼽히는 치명적인 보안위협이다.

[환경구축]  https://cloudinfosec.tistory.com/26

 

SQL Injection 실습을 위한 환경 구성하기 (with Win7 server)

 

cloudinfosec.tistory.com

 


1. 로그인 우회 (Login Bypass)

: 아이디와 패스워드 없이 SQL 쿼리 구문으로 로그인한다. 로그인 창에는 ID와 PW를 입력받는다. 따라서 서버에 전송되는 값은 입력 ID, PW에 일치하는 계정 정보를 찾는 아래와 같은 SQL 쿼리문일 것이다.

예상 SQL 구문 : select id, pw from??? where id = 'ID' and pw = 'PW;

 

1) ID에 인젝션 코드 삽입

ID >> 'or 1=1 --
: 우선 작은따옴표로 구문을 닫아준다. (NULL값 생성) 'or'에 이어 TRUE값을 반환하는 값을 입력한다. (1=1 또는 a <b) 뒤이은 구문들은 MS-SQL의 주석 표식인 --로 무효화시킨다.

select id, pw from??? where id = ' 'or 1=1 -- ' and pw = ' ';

아이디 SQL인젝션 후 로그인 성공 (계정은&nbsp; superman으로 나타난다.)

2) PW에 인젝션 코드 삽입

: PW이전에 ID 입력란이 먼저 존재한다. 공란일 경우 에러 창이 발생하기 때문에 조건을 TRUE로 만족시킬 ID 정보가 필요하다. 따라서, 접근 가능한 자유게시판에서 ID를 선정하였고 (webmaster) PW에는 위와 동일한 SQL 구문을 삽입한다.
ID >> webmaster
PW >> 'or 1=1 --

select id, pw from??? where id = 'webmaster' and pw = ' 'or 1=1 -- ';

 

접근가능한 ID 정보와 PW 인젝션구문 입력 후 로그인 (계정은 superman으로 나타났다)

SQL 인젝션 수행 시 계속 'Superman'으로 로그인되는 이유 => 계정 정보가 특정되지 않은 경우 해당 Table중 최상위의 값을 호출한다.

3) 특정 계정으로 로그인

: 현재까지 superman 계정으로만 로그인되던 injection을 webmaster라는 특정 계정으로 로그인을 시도한다.
ID: webmaster' --

select id, pw from??? where id = 'webmaster' -- 'and pw=' ';

 


 

2. 특수문자 삽입 (로컬 프락시 활용)

: SQL 삽입 공격 시 삽입 문자에 제한이 존재하는 경우, 로컬 프락시(Loval Proxy) 프로그램을 활용하여 서버로 전송되는 클라이언트의 요청을 조작하여 인젝션 구문을 주입할 수 있다.

특수문자 입력이 제한 되어 클라이언트단에선 인젝션 구문 입력이 어려운 상황

 


Burp Suite (Community edition) 다운로드

: 서버와 클라이언트 간의 요청 및 응답 패킷을 Intercept 하여 조작할 수 있는 웹 프락시 툴이다. 이와 유사한 프록시로 Paros, Fiddler2, Charley, Achilles 등이 있다.

[Burp Suite 다운로드] https://portswigger.net/burp/communitydownload

 

Download Burp Suite Community Edition - PortSwigger

Burp Suite Community Edition is PortSwigger's essential manual toolkit for learning about web security testing. Free download.

portswigger.net

 

1) 로컬 프록시 설정

인터넷 옵션 > 연결 > LAN설정 (프락시 서버 8080 포트)

 

2) Burp Suite 실행 후 인젝션

 

입력한 ID가 Burp Suite를 통해 확인된다
특수문자가 포함된 SQL 인젝션 쿼리를 입력 > Forward > 로그인 성공


따라서, 위와 같이 보안대책이 Client서버에 적용 될 경우, 프락시 조작 수법으로 취약점에 노출될 가능성이 크다는 것을 알 수 있다.


 

3. Blind SQL 인젝션인젝션

: 공격자는 데이터베이스에 대한 정보가 거의 없는 상태에서 임의로 에러를 유발해 발생된 에러 정보를 통해 필요한 DB정보를 수집하는 기법을 말한다. 대표적인 삽입 구문으로 '‘having 1=1 --'이 있다.

정상적인 SQL 쿼리 구문상에서 having은 group by이 선행되어야 한다. group 지정 없이 having만 전달될 경우 서버 측 오류를 나타내는 HTTP500 메시지를 나타내며 DB에 대한 정보를 노출시킨다.

ID >> 'havin 1=1 --

select id, pw from?? where if =’ having 1=1 -- ‘ and pw = ‘ ‘

 

‘having 1=1 -- 인젝션 결과

누락된 GROUP BY로 인해 서버측 에러 메세지가 나타났다.


문제는 또 다른 SQL 인젝션에 활용될 수 있는 DB 데이터를 고스란히 노출한다는 점이다.

Blind 인젝션 결과 웹서버, DB 테이블테이블 명, 컬럼명, 아파치 버전 등등 데이터베이스의 테이블 명들을 알 수 있었다. (아래)

Uid Userid passwd username regnol Email Zipcode addr
               

 

패스워드 변경 시도

: 수집된 데이터베이스 정보를 통해 특정 계정의 패스워드를 변경할 수 있다.

';update tbl_member set passwd='1234' where userid='webmaster'; -- (webmaster의 패스워드를 1234로 update)

 


4. SQL Injection 대응법 => Secure Coding


시큐어 코딩 (Secure Coding)이란?
: 보안 취약점의 원인을 개발단계부터 제거하기 위한 개발 방법을 말한다. 이를 위하여 Escape처리 함수와 같은 입력값 검증방법을 개발 단계부터 적용시킨다. 최근 해킹 수법의 고도화로 인하여 보안이 고려된 개발에 대한 필요성이 더욱 증대되고 있다.

mysqli_real_escape_string

: SQL 주입 공격에 사용되는 특수문자의 입력을 방지하기 위해 'Escape' 기능 활용해 특수문자의 기능을 무력화시키는 기법이다. Escape (Back slash)에 수반되는 특수문자는 모두 문자열로 저장된다.

2 \+3\=5
: 함수를 사용하여 자동적으로 특수문자 앞에 역슬레쉬(\)를 붙여 특수문의 기능을 없앤다.
(ex. NUL (ASCII 0), \n, \r, \, ‘ , ” , 등 control+Z를 보면 앞에 \를 추가)




참고자료


https://noirstar.tistory.com/264

 

SQL Injection 이란? (SQL 삽입 공격)

1. SQL Injection  1.1 개요 Ÿ   SQL Injection SQL Injection 이란 악의적인 사용자가 보안상의 취약점을 이용하여, 임의의 SQL 문을 주입하고 실행되게 하여 데이터베이스가 비정상적인 동작을 하도록 조작

noirstar.tistory.com

https://m.blog.naver.com/lstarrlodyl/221837243294

 

SQL Injection (SQL 인젝션 개념과 원리)

장치나 인명의 안전을 위한 보안기(arrester) → arrester 피뢰기에 감동? 받으며 IT보안 공부하는 김주...

blog.naver.com

https://www.insilicogen.com/blog/383

 

人Co BLOG  :: 정보보안은 개발단계에서부터! 시큐어코딩(Secure Coding)

최근 미국의 전기차 기업 테슬라에서 사내 CCTV가 해킹당해 회사 내부의 모습이 노출되는 사건이 있었습니다. 또 송유관 운영회사 콜로니얼 파이프라인이 랜섬웨어 공격을 받아 시스템이 마비되

www.insilicogen.com

 

 

본 게시물은 학습기록을 위한 포스팅입니다. 악의적인 목적으로 이용 시 발생할 수 있는 모든 법적 책임은 자신에게 있습니다.

반응형
Comments