W-01
SQL Injection (인증 우회)
위험도: 상⚠️ 위험도 근거: 인증 우회로 관리자 권한 탈취 가능, DB 전체 조회·삭제 가능
📌 아래 내용이 표준 보고서에 포함되어야 합니다. 자신이 작성한 보고서와 대조하세요.
취약점 개요
📄 표준 내용
SQL Injection이란 사용자 입력값이 적절한 검증 없이 SQL 쿼리에 삽입되어, 공격자가 의도하지 않은 SQL 구문을 실행할 수 있는 취약점이다.
발견 내용 (현황)
필수 포함:
점검 URL
점검 파라미터
사용 도구
공격 시도 내용
요청/응답
결과
📄 표준 내용
로그인 폼의 username 파라미터에 대한 입력값 검증이 미흡하여 SQL Injection 공격이 가능한 상태임. [점검 방법] - 점검 URL: http://target/login.php - 점검 파라미터: username (POST) - 사용 도구: BurpSuite, 브라우저 개발자도구 [공격 시도] ``` POST /login.php HTTP/1.1 Content-Type: application/x-www-form-urlencoded username=admin'--&password=anything ``` [실행된 쿼리 (추정)] SELECT * FROM users WHERE username = 'admin'--' AND password = 'anything' [결과] 관리자 계정(admin)으로 인증 우회 성공
증적 (스크린샷 첨부)
필수 포함:
입력 화면
응답 화면
요청/응답 캡처
📄 표준 내용
① 취약 입력값 입력 화면 ② 서버 응답 (인증 우회 성공 화면) ③ BurpSuite Repeater 요청/응답 캡처 ④ (가능 시) 에러 메시지 또는 DB 정보 노출 화면
위험도 및 근거
필수 포함:
위험도 등급
판단 근거
피해 가능성
📄 표준 내용
위험도: 상 (High) [위험도 판단 근거] - 인증 우회를 통한 관리자 계정 무단 접근 가능 - UNION 구문 활용 시 DB 내 전체 데이터(회원정보, 결제정보 등) 추출 가능 - 시스템 명령 실행(xp_cmdshell 등) 시 서버 장악 가능 - 기술적 난이도: 낮음 (공개된 툴 및 페이로드 사용 가능)
조치 방안
필수 포함:
취약 코드 예시
조치 코드 예시
즉시 조치
추가 조치
📄 표준 내용
[즉시 조치]
1. Prepared Statement(바인딩 변수) 적용
- 취약 코드: $sql = "SELECT * FROM users WHERE username = '$username'"
- 조치 코드: $stmt = $db->prepare("SELECT * FROM users WHERE username = ?");
$stmt->execute([$username]);
2. 입력값 길이 제한 적용 (username: 최대 50자)
[추가 조치]
3. WAF(웹방화벽) 적용 또는 시그니처 업데이트
4. DB 계정 최소 권한 원칙 적용 (읽기 전용 계정 분리)
5. 에러 메시지 사용자 노출 차단 (display_errors = Off)