정보보안기사

SECTION 08 웹 애플리케이션 취약점 (1)

tnvori 2026. 6. 5. 22:00

이번 내용은 나름 자신 있어서 가볍게 보고 있다

김씨의 오코노미야끼. 상당히 두꺼움

1. SQL injection

  1. 개요
    • 무료 SQL Injection 취약점 스캐너
      • Nikto — GNU 기반 오픈소스로 웹 서버 및 SQL Injection에 대한 취약점 점검. 리눅스 기반
      • SQLMap — 블라인드 SQL Injection을 자동으로 수행하는 도구. 파이썬에서 개발
      • Absinthe — GUI 기반 도구로 블라인드 SQL Injection 취약점에 이용. 데이터베이스의 스키마와 목록을 자동화 과정으로 다운로드
  2. 공격 방식에 의한 분류
    1. Form SQL Injection
      • 개요
        • HTML Form 기반 인증을 담당하는 애플리케이션의 취약점이 있는 경우 사용자 인증을 위한 질의문의 조건을 조작하여 인증 우회
        • 질의문의 조건절이 항상 참이 되도록 조작
        • 성공 시 반환되는 레코드 셋의 첫 번째 레코드에 해당하는 사용자 권한 획득
      • 취약점 사이트 실습(APM 환경)
      • 안전한 사이트 실습(APM 환경)
        • php.ini의 magic_quotes_gpc 설정
          • Get, Post, Cookie로 전달되는 데이터에서 특수문자를 일반문자로 치환
          • 5.4 버전 이상에서는 지원 안 함
        • mysql_real_escape_string() 함수를 통해 특수문자 이스케이프 처리
        • Prepared Statement
        • 파라미터 필터링
    2. Union SQL Injection
      • 개요
        • union select 질의를 이용하여, 질의의 결과를 다른 질의 결과에 결합하여 공격
        • 각각의 select문의 필드 개수가 같아야 하며 필드 타입이 호환할 수 있어야 함
        • union all — 단순히 2개 이상의 select문 질의 결과를 합해서 보여줌
        • 일반 union — 2개 이상의 select문 질의 결과에서 중복을 제거하고 보여줌
      • 실습
        • 컬럼 개수 파악 — order by 이용
      • 취약한 사이트 실습(APM 환경)
    3. Stored Procedure SQL Injection
      • 개요
        • Stored Procedure — 일련의 질의를 마치 하나의 함수처럼 실행하기 위한 질의의 집합
      • 사례
        • SQL Server(7.0 or 2000)의 xp_dirteree 확장 프로시저 실행 — 파일 목록 확인
        • SQL Server(7.0 or 2000)의 xp_regwrite 확장 프로시저 실행 — 레지스트리 변경을 통해 윈도우 도움말 실행 시 공격자가 심어놓은 악성코드 실행
    4. Mass SQL Injection
      • 개요
        • 한 번의 공격으로 대량의 DB값 변조
        • DB값 변조 시 악성 스크립트를 삽입하여 사용자가 변조된 사이트 방문 시 감염되거나 악성 봇이 설치됨
      • 사례 — 테이블의 문자형 컬럼 데이터 모두에 URL 삽입
    5. SQL Injection 대응 방안
      • SQL 관련 문자열 필터링
      • 입력 문자열 길이를 제한하고 숫자일 경우 숫자인지 확인
      • MS-SQL의 경우 master..xp_cmdshell, xp_startmail, xp_sendmail 등의 확장 프로시저 제거
      • 웹 애플리케이션이 사용하는 DB 사용자 권한 제거
      • Prepared Statement
  3. 공격 유형에 대한 분류
    1. Error-Based SQL Injection
    2. Blind SQL injection

2. XSS

  1. 개요
  2. Stored XSS
    • 개요 — 공격자가 취약한 웹 서버에 스크립트를 저장하면 희생자가 해당 자료를 요청할 때 해당 악성 스크립트가 삽입된 응답 페이지가 전달되어 클라이언트 측에서 동작하는 방식
    • 취약한 사이트 실습(APM 환경)
    • 안전한 사이트 실습(APM 환경)
      • 사용자 입력값 검증
      • 게시물 열람 시 공격자의 악성 스크립트가 일반 문자로 처리
  3. Reflected XSS
    • 개요
      • 악성 스크립트가 희생자 액션에 의해 취약한 웹 서버로 전달되고, 웹 서버의 응답 페이지에 해당 악성 스크립트가 삽입되어 희생자 측에서 동작
      • 취약한 웹 서버로 요청 정보 전송
      • 악성 스크립트가 포함된 응답 페이지가 생성되어 희생자에게 전달
    • 실습(APM 환경)
  4. DOM based XSS
    • 개요
      • DOM — 웹 페이지 내에 있는 모든 객체를 조작, 관리할 수 있는 계층 구조 형태의 모델
      • 희생자의 웹 브라우저에서 응답 페이지에 포함된 자바스크립트가 동작하면서 DOM 객체를 실행할 때 URL 등에 포함된 악성 스크립트가 동작하는 방식
      • 응답 페이지와 관계없이 웹 브라우저에서 발생
    • 실습(APM 환경)
  5. 취약점 판단 기준 — XSS 취약점이 발생 가능한 입력 가능한 폼, URL 파라미터 등에 스크립트를 삽입하여 해당 스크립트가 동작하는 경우
  6. 대응책
    • 서버 단에서 사용자 입력값 검증
    • 사용자 입력 문자열에서 HTML 코드로 인식될 수 있는 특수문자를 일반문자로 치환
    • HTML 태그 화이트리스트 선정 및 허용

3. CSRF

  1. 개요
    • 정상적인 경로를 통한 요청과 비정상적인 경로를 통한 요청을 서버가 구분하지 못할 경우 공격자가 스크립트 구문을 이용하여 정상 이용자가 조작된 요청을 전송하도록 함
    • 공격당한 사용자의 권한을 공격자가 사용
  2. 실습
  3. 취약점 판단 기준 — CSRF 취약점이 발생할 수 있는 입력 가능한 폼에 img 태그의 src 속성을 이용하여 요청을 입력, 요청이 실행되면 취약한 것으로 판단
  4. 대응책
    • 모든 HTTP 요청에 예측 불가능한 임의의 토큰을 추가하여 정상 요청과 비정상 요청 판별
    • XSS에 대한 취약점 제거

4. SSRF

  1. 개요
    • 적절한 검증 절차를 거치지 않은 사용자 입력값을 서버 간의 요청에 사용하여 악의적인 행위가 발생하는 취약점
    • 공격자가 조작된 요청을 웹 서버에 전송하여 웹 서버가 내부 네트워크에 있는 다른 서버에 악의적인 요청을 보내는 취약점
  2. 실습
  3. 대응책
    • 사용자 입력값을 다른 시스템의 서비스 호출에 사용하는 경우 사용자의 입력값을 화이트리스트 방식으로 필터링
    • 무작위 입력값을 사용해야 한다면 블랙리스트
    • 동일한 내부 네트워크에 있는 서버 간이라도 기기 인증, 서비스 접근 권한 등을 확인하여 요청 처리

5. OS Command Execution

  1. 개요
    • 사용자 입력값이 운영체제 명령어의 일부 또는 전부로 구성되어 실행
    • 웹 애플리케이션에서 system(), exec()와 같은 시스템 명령어 실행
  2. 실습
    • 취약한 사이트 실습(APM 환경)
    • 안전한 사이트 실습(APM 환경)
    • PHP 운영체제 명령어 실행 함수(APM 환경)
      • shell_exec
      • passthru
      • exec
      • system
  3. 취약점 판단 기준
  4. 대응책
    • 사용자 입력값 필터링
    • 웹 방화벽 등 필터링 가능한 보안 장비를 운영할 경우 룰셋 적용
    • 필요하다면 화이트리스트