• 티스토리 홈
  • 프로필사진
    truebird
  • 방명록
  • 자기소개
  • 태그
  • 블로그 관리
  • 글 작성
truebird
  • 프로필사진
    truebird
    • 분류 전체보기 (7)
      • Red Teaming Study (0)
        • Tech (0)
        • Prob (0)
      • Web Hacking (6)
        • Tech (5)
        • CTF - Write up (1)
      • Fosensics (0)
        • Tech (0)
        • CTF - write up (0)
      • ETC (0)
      • Android (1)
        • tech (1)
        • Prob (0)
  • 방문자 수
    • 전체:
    • 오늘:
    • 어제:
  • 최근 댓글
      등록된 댓글이 없습니다.
    • 최근 공지
      • IT's Me
      등록된 공지가 없습니다.
    # Home
    # 자기소개
    #
    # 태그
    # 검색결과
    # 방명록
    • SQL Injection
      2025년 07월 04일
      • truebird
      • 작성자
      • 2025.07.04.:16

      [서론]

      SQL injection이란 웹 애플리케이션이 데이터 베이스에 보내는 쿼리를 공격자가 조작 할 수 있도록 만드는 보안 취약점입니다.

      이 공격을 통해 공격자가 얻을 수 있는 것은 아래와 같습니다.

      - 다른 사용자의 민감한 정보 같은 민감한 데이터 열람

      - 데이터 수정/삭제 및 애플리케이션의 동작 변경

      - 서버 탈취, 백도어 설치, 서비스 거부 공격 등

       

      [본론]

      SQL Injection의 탐지 방법은 수동 탐지 방법과 자동화 공격 두가지 방법이 있습니다.

      - 수동 탐지 방법

      [1]. '  입력 후 에러 발생 여부 확인

      [2]. OR 1=1, OR 1=2 같은 boolean 조건 삽입 후 응답 비교

      [3]. 타임 딜레이 기반 페이로드 사용 (SLEEP(5) 등)

      [4]. OAST를 활용해 외부 요청 여부 확인

      더보기

      OAST는 외부 서버(OAST 서버)와의 상호작용(Interaction)이 발생하는지를 확인하여 취약점을 판단하는 방식입니다

      - 자동화 탐지 방법

      Burp Scanner 또는 SQL map을 활용 할 수 있습니다. 하지만 실제 상황에서는 SQL map을 사용 못하는 경우가 있으니 유의합시다.

       

      SQL Injection은 대부분 Select Where 문에서 발생하지만 아래와 같은 위치에서도 발생 할 수 있습니다.

      UPDATE 문의 SET, WHERE
      INSERT 문의 값
      SELECT 문의 테이블/ 컬럼 이름
      ORDER by 절

       

      공격 기법 예시

      1. 숨겨진 데이터 열람

      SELECT * FROM products WHERE category = '사용자 입력' AND released = 1

      이런 코드로 데이터를 조회 하는 타겟이 있다고 가정 합니다. 그렇다면 우리가 입력을 할 수 있는건 catagory 뿐 입니다.

      이때 category에 '-- 를 입력 할 수 있다고 하면 어떻게 될까요?

      SELECT * FROM products WHERE category = 'Gifts'--' AND released = 1

      그렇다면 Gifts뒤에 있던 AND 부터 쭉 주석 처리가 되서 숨겨진 데이터를 확인 할 수 있게 됩니다.

       

      2. 로그인 우회

      SELECT * FROM users WHERE username = '입력 ID' AND password = '입력 Password'

      이런식으로 ID, Pass를 입력 받는 곳이 있다고 해봅시다. Administrator의 권한을 가지고 있는 계정의 이름이 ADMIN이고 password는 "BOB13thDF!" 라고 합니다. 공격자 입장에서는 Admin의 이름을 어떻게든 알아 낸다 해도, 계정의 Password는 알아 낼 방법이 없습니다. 사실 특정 조건 (로그인을 해야만 들어갈수 있는 페이지) 이 있다면 ID도 필요가 없을 것 같습니다. 무튼 공격자자가 어떻게든 계정의 ID를 알아 냈습니다. 그렇다면 ADMIN '-- 를 입력 하는 순간 

      SELECT * FROM users WHERE username = 'ADMIN'--' AND password = ''

      password를 입력 하지 않고도 로그인을 할 수 있을 지도 모른다. 하지만 Server측에서 검증하는 식이라면... 안타깝게도 실패 할 것 같습니다..

       

      3. Union을 이용한 다른 테이블 정보 열람

      Union은 두 개 이상의 SELECT 쿼리 결과를 합쳐 하나의 결과로 반환하는 명령어 입니다. UNION의 사용 조건은 동일한 컬럼수, 데이터 타입이 일치 해야 합니다. Union SQLI를 찾는 방법은 아래와 같습니다.

       

      [1]. '를 입력하여 오류가 뜨면 SQL 인젝션 가능성이 높음

      [2]. 컬럼 개수 확인 하기

      ' order by 1 --  # 이런식으로 개수를 확인 합니다. 에러가 나는 지점을 찾으면 됩니다.
      ' UNION SELECT NULL-- # 아니면 이런식으로 NULL을 늘려도 됩니다

      [3]. 문자열출력 가능한 컬럼찾기

      ' UNION SELECT 'a',NULL,NULL-- 
      ' UNION SELECT NULL,'a',NULL-- 
      ' UNION SELECT NULL,NULL,'a'--

      페이지에 a가 보이면 해당 컬럼은 문자열 컬럼이 가능 합니다.

       

      [4] 민감한 데이터 추출

      ' UNION SELECT username, password FROM users--

       

       이런식으로 민감한 데이터를 추출 할 수도 있습니다.

       

      4. Blind SQL Injection

      응답에 쿼리 결과나 오류가 직접 표시 되지 않는 경우에 사용 할 수 있는 방법입니다. 우회적인 접근 방법은 아래와 같습니다.

      [1]. 조건에 따라 응답이 달라지게 만들기

      [2]. SLEEP()을 사용하여 응답 시간 차이로 판단

      [3]. OAST 기법을 활용한 네트워크 요청 유도

       

      5. Secon-order SQL Injection

      첫 요청에선 입력을 DB에 안전하게 저장을 했지만 나중에 저장된 값을 사용하는 쿼리에 취약점이 존재 할 때 사용 할 수 있는 방법입니다. 해당 공격에 대해서는 더 공부를 해본뒤 추가 글 작성 하겠습니다.

       

      [결론]

      데이터 베이스 별로 공격 방법도 다르고 DB에 구성 된 방법들에 따라 공격 가능성 여부가 갈립니다. 자동화 된 툴도 좋지만 직접 찾아 보는 연습을 해보는 것도 좋은 것 같습니다.

      'Web Hacking > Tech' 카테고리의 다른 글

      Blind SQL Injection  (0) 2025.07.05
      CSRF  (1) 2025.06.28
      XSS  (0) 2025.06.28
      WEB 해킹 들어가기 - 베이스 쌓기  (0) 2025.06.28
      다음글
      다음 글이 없습니다.
      이전글
      이전 글이 없습니다.
      댓글
    조회된 결과가 없습니다.
    스킨 업데이트 안내
    현재 이용하고 계신 스킨의 버전보다 더 높은 최신 버전이 감지 되었습니다. 최신버전 스킨 파일을 다운로드 받을 수 있는 페이지로 이동하시겠습니까?
    ("아니오" 를 선택할 시 30일 동안 최신 버전이 감지되어도 모달 창이 표시되지 않습니다.)
    목차
    표시할 목차가 없습니다.
      • 안녕하세요
      • 감사해요
      • 잘있어요

      티스토리툴바