Blind SQL Injection 자동화 도구 개발 (2024 11 01 ~ 2024 11 07)

Woongmur·2025년 1월 2일

들어가기에 앞서

해당 프로젝트는 SK 쉴더스 루키즈 21기에서 맞이하는 두번째 모듈프로젝트이다.
SQL Injection을 진행하는 중 Blind SQL Injection이 발생하는 공격포인트를 발견하여 해당 부분에 사용된 쿼리를 이용하여 공격을 자동화 해서 데이터를 추출하는 도구를 개발하는 것이 프로젝트의 목표이다.

어떤 언어로 제작하였나?

자동화 도구를 만드는데 사용한 언어로는 Python이다.
Python을 이용해 짧은 시간 내에 간단한 로직을 사용해서 최적의 결과를 도출해내는 것을 개인적인 목표로 하고 개발에 착수하였다.

SQL Injection이란?

SQL Injection은 데이터베이스 프로그램의 허점을 악용하여 SQL문을 실행하도록 하여 비정상적으로 데이터베이스를 조작하는 공격 방법이다.


설계

  1. 사용자로 부터 JSESSION쿠키를 입력받음
  2. 데이터베이스 명을 먼저 추출하고 출력함
  3. 0~9번 까지의 선택지를 출력하고 사용자가 선택 가능
  4. 1~8번은 테이블과 컬럼, 데이터를 추출하는 항목(이진 탐색)
  5. 0번은 추출한 데이터를 엑셀로 저장 9번은 종료
  6. 컬럼 추출에는 테이블명이 필요하고 데이터 출력에는 테이블과 컬럼명이 필요

사용자에게 직관적으로 사용이 가능하도록 선택지와 눈이 즐거울 수 있는 로고와 색상을 첨가하기로 하였다.
특정 url에서 작동하는 SQL Injection을 대상으로 제작하여서 사용의 제약은 있다.

기본적인 공격 쿼리는 다음과 같다

%' and 1=1 and '1%'='1%

이 쿼리에서 1=1 부분에 추가적으로 서브쿼리를 if문으로 묶어 사용자가 선택하면데이터를 추출할수 있도록 만들었다.

여기에 추가적으로 이진탐색 로직을 사용해 데이터 추출의 속도를 비약적으로 향상시켰다.


대응방안

Parameterized Query

사용자 입력을 쿼리로 전송하는 것이 아니라 문자열 인수로 전달하여 사용자가 입력한 쿼리가 실행될 수 있는 권한을 차단하는 방법이다.

문자열 필터링

사용자의 입력값에 주석처리가 되는 --나 검색 구문을 닫을 수 있는 ;와 같은 특수문자를 필터링하여 SQL Injection을 예방할 수 있다.


어려웠던점

교육 중에 이진탐색 로직 구현에 대하여 배웠기 때문에 기본적인 이진 탐색 코드를 짜는 것은 어렵지 않게 구현하였다.
하지만 문제는 한글 데이터가 포함이 되어있는 컬럼이 존재하여 난관에 봉착하였다.
보통 이진 탐색 로직에서 사용하는 아스키 코드는 1~127까지다.
그러나 한글은 기본 44032 부터 시작하기 때문에 이렇게 큰 값을 넣게 되면 감당하지 못하여 충돌을 일으켜 오류가 출력이 된다.
검색도 해보고 옆에 있는 형한테도 물어본 결과 정수로 집어넣는게 아닌 1에서 0xFFFFFF으로 hex값으로 설정하면 되는것 아니냐고 하더라
결국에 같은 로직에 최대값만 hex값으로 바꾸니 바로 한글 데이터가 추출되었다.

이전과는 다르게 보고서 양식이 정해져있지 않아서 이제까지 제공되었던 자료들을 토대로 나만의 보고서 양식을 만들어야 했다.
그래도 전 강의의 취약점 진단 보고서를 적어보기도 하였던 경험 덕분에 처음에 기본틀을 잡는 것이 어려웠고 그 뒤로는 나름 수월하게 진행되어 시간내에 맞춰 제출할 수 있었다.

어떤것을 얻었나?

모듈프로젝트1 부터 모의해킹으로 직무를 설정하여 이번 모듈프로젝트가 나에게는 정말 중요했다.
이번 성적에서 최종 프로젝트의 모의해킹 팀에 들어가지 못할수도 있기 때문에 더욱 새벽까지 열을 내며 작업한 기억이 있다.
그래도 그 노력이 빛을 발하였는지 최종 프로젝트 기간에 모의해킹팀에서 진행할 수 있게 되었다!!
이제까지 계속 강사님들이 보고서의 중요성에 대해서 강조하셨는데 지속적으로 작성해보고 프로젝트에서 나만의 양식도 만들어서 제출하여 보니 보고서를 작성하는 요령도 얻게되었다.

profile
Pentest Study & Life Blog

0개의 댓글