- rule.py 실행
execute_scan()에서 먼저 rule.py를 subprocess로 돌립니다. 여기서 시그니처 기반 점검을 하고, 지금은 기본적으로 sqlmap 보조 점검도 같이 켜집니다.
- HTTP 증거 수집
그 다음 ExternalEvidenceCollector가 대상 URL에 직접 요청을 보내서 헤더, 본문, 특정 엔드포인트 응답, 폼, 인증 관련 흔적 같은 관찰 가능한 evidence를 모읍니다.
- GPT 분석
GPTVulnerabilityAnalyzer가 evidence로 1차 판단을 만들고, 다시 최종 판단을 만듭니다. 이후 rule.py 결과를 GPT 결과에 합치고, CHECK_CATALOG 기준으로 빠진 항목도 채워서 최종 결과 JSON을 완성합니다.
- 결과 저장
최종 결과는 JSON으로 저장되고, make_excel_file.py를 다시 subprocess로 실행해서 엑셀 파일로 만듭니다. 엑셀의 findings 시트는 vuln_name 컬럼을 쓰고, URL은 host/query 없이 path만 저장되게 되어 있습니다.
- API 응답
FastAPI POST /scan은 이 전체 흐름을 실행합니다. 기본 동작은 엑셀 파일 다운로드 응답이고, download: false를 보내면 JSON 결과를 반환합니다.
<aside>
🔥
/scan 요청 -> rule.py 시그니처 점검 -> HTTP evidence 수집 -> GPT 분석 -> 결과 merge/normalize -> JSON 저장 -> 엑셀 생성 -> 파일 또는 JSON 응답
</aside>
<aside>
🔥
python scanner.py --target http://15.164.60.79 --tomcat-port 8080 --rule-sqlmap
</aside>
인코딩 오류가 나면 아래 코드 실행
<aside>
🔥
PYTHONUTF8=1 python scanner.py --target http://15.164.60.79 --tomcat-port 8080 --rule-sqlmap
</aside>