반응형
SQL 인젝션

 

SQL 인젝션은 웹 애플리케이션의 입력값을 조작하여 악의적인 SQL 구문을 삽입,

데이터베이스에 비정상적인 접근을 시도하는 공격 방법입니다.

이를 통해 공격자는 민감한 데이터 탈취, 데이터베이스 수정,

관리 권한 획득 등의 피해를 발생시킬 수 있습니다.

 

국내 은행사의 개인정보 탈취사건,

대형 어플의 개인정보 유출 등도 이에 해당합니다.

 

이번 실습에서는 SQL 인젝션을 통해 로그인 우회 및 데이터 탈취를 시도하고,

이를 방어하는 방법을 학습합니다.

1. 실습 환경 구축

SQL 인젝션을 실습하기 위해 안전한 환경을 구축하는 방법을 설명합니다.

1.1 가상 머신 설치

개념 설명

가상 머신(Virtual Machine)은 하나의 컴퓨터에서 여러 운영체제를 실행할 수 있게 해주는 소프트웨어입니다. 이를 통해 실제 시스템을 손상시키지 않고 다양한 실험을 할 수 있습니다.

설정 방법

  1. VirtualBox를 다운로드하고 설치합니다.
  2. Ubuntu ISO 이미지를 다운로드합니다.
  3. VirtualBox에서 새로운 가상 머신을 생성하고 Ubuntu를 설치합니다.

 

버츄얼박스 (VirtualBox)와 칼리 리눅스 (Kali Linux)를 이용한 모의해킹 실습 환경 구축 가이드

오늘은 모의해킹 실습 환경을 구축하는 방법에 대해 소개하려고 합니다. 이번 글에서는 VirtualBox와 칼리 리눅스(Kali Linux)를 사용합니다. 1. VirtualBox 설치 먼저, VirtualBox를 설치해야 합니다. 우리가

jdcyber.tistory.com

1.2 LAMP 스택 설치

개념 설명

LAMP 스택은 웹 서버를 구축하기 위한 필수 소프트웨어의 조합으로, Linux, Apache, MySQL, PHP로 구성됩니다.

각 구성 요소 설명 및 기능

  1. Linux: 운영체제(OS)로, LAMP 스택의 기본 플랫폼을 제공합니다.
  2. Apache: 웹 서버 소프트웨어로, 클라이언트로부터 HTTP 요청을 처리하고 응답을 보냅니다.
  3. MySQL: 관계형 데이터베이스 관리 시스템(RDBMS)으로, 데이터를 저장하고 관리합니다.
  4. PHP: 서버 사이드 스크립트 언어로, 동적인 웹 페이지를 생성합니다.

설치 방법

  1. 터미널을 열고 다음 명령어를 실행합니다:
sudo apt update
sudo apt install apache2 mysql-server php libapache2-mod-php php-mysql

1.3 DVWA 설치

개념 설명

DVWA(Damn Vulnerable Web Application)는 의도적으로 취약점을 포함하고 있어 보안 연습에 사용되는 웹 애플리케이션입니다.

설치 방법

  1. DVWA를 다운로드하고 Apache 웹 루트 디렉토리로 이동합니다:
sudo apt install git
git clone https://github.com/digininja/DVWA.git /var/www/html/dvwa
sudo chown -R www-data:www-data /var/www/html/dvwa

    2. MySQL에서 DVWA 데이터베이스를 설정합니다:

sudo mysql -u root -p
CREATE DATABASE dvwa;
CREATE USER 'dvwa'@'localhost' IDENTIFIED BY 'password';
GRANT ALL PRIVILEGES ON dvwa.* TO 'dvwa'@'localhost';
FLUSH PRIVILEGES;
exit;

    3. DVWA 설정 파일을 수정합니다:

sudo nano /var/www/html/dvwa/config/config.inc.php

설정 파일 내용:

$_DVWA = array();
$_DVWA[ 'db_server' ] = 'localhost';
$_DVWA[ 'db_database' ] = 'dvwa';
$_DVWA[ 'db_user' ] = 'dvwa';
$_DVWA[ 'db_password' ] = 'password';

    4. Apache 서버를 재시작합니다:

sudo systemctl restart apache2

2. Lord of SQL Injection 실습

2.1 사이트 소개

 

Lord of SQLInjection

 

los.rubiya.kr

 

개념 설명

Lord of SQL Injection은 다양한 SQL 인젝션 문제를 제공하여 실습할 수 있는 웹사이트입니다.

접속 방법

  1. 브라우저에서 Lord of SQL Injection에 접속합니다.
  2. 제공된 문제를 하나씩 풀어가며 SQL 인젝션을 연습합니다.

2.2 예시 문제 해결

시나리오 설명

SQL 인젝션은 사용자가 입력한 데이터를 이용해 악의적인 SQL 쿼리를 실행하는 공격 방법입니다. 이번 실습에서는 로그인 우회 공격을 시도합니다.

 

로그인 폼에 ' OR '1'='1을 입력하여 SQL 인젝션 시도

SELECT * FROM users WHERE username = '' OR '1'='1' AND password = '';

모든 사용자 계정에 접근할 수 있습니다.


3. SQL 인젝션 방어 방법

3.1 입력값 검증

개념 설명

사용자 입력값을 철저히 검증하여 악의적인 데이터를 걸러냅니다.

방어 방법

숫자 입력 필드에는 숫자만 입력되도록 검증합니다:

if (!is_numeric($_POST['id'])) {
    die("Invalid ID");
}

3.2 Prepared Statements 사용

개념 설명

SQL 인젝션 공격을 방어하는 가장 효과적인 방법 중 하나는 'Prepared Statements'를 사용하는 것입니다. Prepared Statements는 SQL 쿼리를 안전하게 실행할 수 있게 해주며, 사용자 입력을 쿼리의 일부로 직접 삽입하지 않고 별도로 처리합니다.

Prepared Statements의 작동 원리

  • 쿼리 분리: 사용자의 입력을 쿼리 구조에서 분리합니다. 이렇게 하면 입력값이 쿼리의 구조를 변경할 수 없으므로, 악의적인 쿼리 실행이 방지됩니다.
  • 파라미터 바인딩: 사용자 입력을 쿼리에 파라미터로 전달합니다. 이 파라미터는 데이터베이스에 의해 안전하게 처리되어 쿼리에 포함됩니다.

방어 방법

PHP에서 Prepared Statements를 사용하는 예시:

$stmt = $conn->prepare("SELECT * FROM users WHERE username = ? AND password = ?");
$stmt->bind_param("ss", $username, $password);
$stmt->execute();

궁금하신 사항은 댓글에 남겨주세요

댓글에 남겨주신 내용

추후 정리해서 올려드리겠습니다

이웃 신청하시면 업로드 시 알려드릴게요!

-

조금이라도 도움이 되셨다면

공감&댓글 부탁드리겠습니다

감사합니다!

반응형

+ Recent posts