본문 바로가기
정보보안/Web Hacking

[SQL Injection] - 쿼리에서 반환되는 열의 개수 구하기 // PortSwigger 예제

by 우동이 2020. 7. 31.
300x250


SQL Injection

  • 악의적으로 짜인 SQL문을 삽입해 실행시켜 비정상적인 행동을 유발하는 공격기법

SQL Injection 공격을 수행하기 위해 요구되는 조건 

  • 에러메시지가 웹에서 발생되지 않아야함 : 에러메시지를 통해 공격에 필요한 데이터베이스의 테이블과 칼럼명을 받아올수 있기때문
  • injection이 발생하지 못하도록 시큐어 코딩이 되어있지 않을경우

SQL injection 기법은 OWASP(Open Web App Security Project) 에 기재된 해킹기법들중

1순위에 해당할만큼 강력한 취약점입니다.

년도별로 1위에서 3위권에 왔다갔다 하지만

Injection 기법 자체가 범용성이 크고 무궁무진한 취약점이기에

위험성만큼은 계속 상위권일듯 합니다.

 

 

그럼 BurpSuite 제작사인 PortSwigger에서 제공된 SQL Injection 문제를 풀어보도록 하겠습니다.


PortSwigger-sql injection 1

Academy의 첫번째 문제입니다.

문제 설명을 해석해보니 UNION SQL Injection 문제라고 하며

colums의 개수를 반환받아서 풀이하라고 나와있습니다.

 

UNION -> SQL의 쿼리문을 합칠때 사용되는 문법입니다.

 

문제에 대한 설명입니다.

해석은 파파고와 구글번역기에게 맡깁시다..

대충 읽어본결과

sql injection 취약점은 생산품 카테고리에서 발생하며

컬럼의 개수를 맞추는 문제인듯 합니다.

 

사이트에 접속하면 간단한 쇼핑몰 사이트가 구현되어 있습니다.

문제를 이미 풀어놨더니 위에 축하메시지가 나오는데 무시하겠습니다.

아까 생산품 카테고리에서 취약점이 발생한다고 했으니 

해당 카테고리에 들어가 Injection 코드를 입력해주면 됩니다.


UNION 쿼리 합

어떤 코드를 입력해야할지 감이 잡히지 않는다면

SQL 쿼리문에 대해 잠깐 알아보고 갑시다.

 

SELECT 'query' FROM 'table';

▶ 'table'에 속한 'query'를 출력

 

SELECT 'query' FROM 'table' UNION SELECT 'query2' FROM 'table2';

▶ 'table'과 'table2'에 속한 'query', 'query2'를 출력 UNION은 중복된 쿼리값을 출력하지 않는다

UNION ALL 은 중복된 쿼리값도 출력해준다

 

아까 말했듯 컬럼의 개수를 구해야하기에

'union select null--

null은 하나의 컬럼에 대응하며

만약 DB에 존재하는 컬럼의 개수가 하나가 아니라면

계속해서 대응하는 null의 개수를 늘려줘야 합니다.

 

'union select null, null--

'union select null, null, null--

 

뒤에 붙는 --은 sql문의 주석입니다.

 

컬럼의 개수가 자신이 작성한 코드와 맞지 않으면

에러가 발생합니다.

컬럼은 3개로 

'union select null, null, null--

위와 같이 3개의 null을 대응시켜주면 취약점이 발생합니다.

300x250

댓글