Skip to content
KitploitKITPLOIT
도구블로그
제출
도구블로그
제출

해킹, 침투 테스트 및 사이버 보안 도구를 당신의 보안 무기고에!

Kitploit은 해킹, 사이버 보안 및 침투 테스트 도구 디렉토리입니다. 최신 프로젝트 업데이트를 발견하여 취약점을 찾고, 시스템을 분석하고, 테스트를 자동화하고, 보안을 강화하세요.

··피드·문의·개인정보·© 2026 Kitploit

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
automatic-api-attack-tool — Imperva의 사용자 정의 가능한 API 공격 도구는 API 사양을 입력으로 받아, 이를 기반으로 한 공격을 생성 및 실행하여 출력으로 제공합니다. | Kitploit
도구/GitHubGitHub/imperva/automatic-api-attack-tool
Vulnerability ScannersWeb Application ExploitationAPI Security TestingFuzzing
GitHubimperva/automatic-api-attack-tool

automatic-api-attack-tool

Imperva의 사용자 정의 가능한 API 공격 도구는 API 사양을 입력으로 받아, 이를 기반으로 한 공격을 생성 및 실행하여 출력으로 제공합니다.

저장소 보기
495936년 전Kitploit 검토 완료

인기

모두 보기 →

커뮤니티에서 가장 많이 사용되는 도구를 찾아보세요.

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유

자동 API 공격 도구

Imperva의 사용자 정의 가능한 API 공격 도구는 API 사양을 입력으로 받아 이를 기반으로 한 공격을 생성하고 실행합니다.

이 도구는 API 사양을 파싱하고, API 사양에 정의된 내용을 기반으로 퍼징 공격 시나리오를 생성할 수 있습니다. 각 엔드포인트에는 사양에 정의된 경계 내에서 그리고 그 외부에서 영리하게 생성된 값이 주입되며, 적절한 요청이 전송되고 성공 또는 실패 여부가 상세히 보고됩니다. 또한 불법 리소스 접근, XSS, SQLi, RFI와 같은 다양한 보안 공격 벡터를 실행하도록 확장할 수 있으며, 이는 기존 엔드포인트뿐만 아니라 존재하지 않는 엔드포인트에도 대상이 됩니다. 인간의 개입이 필요 없습니다. 도구를 실행하고 결과를 얻기만 하면 됩니다.

이 도구는 다양한 요구에 맞게 쉽게 확장할 수 있습니다. 예를 들어, 자신의 API를 테스트하려는 개발자나 공개 API에 대해 정기적인 취약점 또는 긍정적 보안 스캔을 실행하려는 조직에 적합합니다. CI/CD를 고려하여 구축되었습니다.

요구사항

  • Java 8 이상
  • Gradle

실행

  • GitHub에서 코드를 체크아웃하고 ./gradlew build (Windows의 경우 gradlew.bat build)를 실행합니다.
  • 실행 가능한 jar 파일은 build/libs 폴더에서 찾을 수 있습니다.
  • 'java -jar imperva-api-attack-tool.jar'를 실행하여 도움말 메뉴를 확인합니다.

Linux 실행 파일 만들기

  • src/main/resources 폴더에서 runnable.sh 파일을 jar 파일과 같은 디렉토리로 복사합니다.
  • 이제 실행합니다: cat runnable.sh imperva-api-attack-tool.jar > api-attack.sh && chmod +x api-attack.sh
  • api-attack.sh 파일을 일반 실행 파일처럼 사용할 수 있습니다.

사용법

필수 매개변수:

-f, --specFile=specFilePath

실행할 API 사양 파일(swagger 2.0)입니다. JSON/YAML 형식입니다. 더 나은 결과를 위해 각 엔드포인트에 대한 응답이 잘 정의되어 있는지 확인하십시오.

-n, --hostName=hostName

연결할 호스트 이름입니다. IP 주소일 수도 있습니다.

-s, --hostScheme=hostScheme

이 스킴을 사용하여 호스트에 연결합니다. 예: https 또는 http

선택적 매개변수:

-p, --hostPort=hostPort

호스트가 API 호출을 수신하는 포트입니다. 기본값은 443입니다.

-ph, --proxyHost=proxyHost

프록시를 통해 요청을 보낼 프록시 호스트를 지정합니다.

-pp, --proxyPort=proxyPort

프록시 포트입니다. 기본값은 80입니다.

-rcn, --addNegativeRC=responseCode[,responseCode...]

부정적 공격(예: 잘못된 값 공격)에서 허용할 추가 응답 코드입니다. 쉼표로 구분하여 여러 값을 지원합니다.

-rcp, --addPositiveRC=responseCode[,responseCode...]

긍정적 검사(적법한 값 공격)에서 허용할 추가 응답 코드입니다. 쉼표로 구분하여 여러 값을 지원합니다.

 

일반적인 사용 시나리오:

  • API가 API 보안 솔루션에 의해 보호되는지 확인하려는 경우.

    실행 예: api-attack.sh -f swaggerPetStore.json -n myapisite.com -s http -rcn=403

    부정적 검사를 위해 403 응답 코드를 적법한 응답 코드로 추가했습니다. 이는 API 보안 솔루션이 이러한 요청을 차단하고 403 상태를 반환하기 때문입니다. 반면 사양은 어떤 엔드포인트에 대해서도 HTTP 코드 403의 응답을 반드시 정의하지는 않습니다. 이렇게 하면 사양에 없음에도 불구하고 이러한 응답이 적법하게 처리되어, 부정적 검사에서 해당 응답을 받지 못할 경우 경고가 표시됩니다. 이러한 경우는 API 보안 솔루션에 의해 보호되지 않고 있음을 의미합니다.

  • 프록시가 API 공격을 어떻게 완화하는지 확인하고 싶지만, 그 뒤에 실제 사이트가 없는 경우.

    실행 예: api-attack.sh -f swaggerPetStore.json -n myapisite.com -s http -ph 127.0.0.1 -pp=4010 -rcn=403 -rcp=404

    이번에는 긍정적 시나리오에 404 상태 코드를 추가했습니다. 따라서 시나리오가 차단되지 않을 때 실패로 보고하지 않고, 적법한 404(리소스를 찾을 수 없음) 응답을 수락합니다.

  • API가 모든 입력을 올바르게 처리하는지 확인하려는 경우. 더 나아가, 매일 밤 또는 개발자가 프로젝트에 새 코드를 푸시할 때마다 실행하려는 경우.

    실행 예: api-attack.sh -f myapi_swagger.yaml -n staging.myorg.com -s https

    이번에는 제외 사항 없이 실행합니다. API 사양 파일은 응답 코드를 정확히 선언해야 합니다. 도구는 그 코드만 적법한 것으로 수락하며, 그렇지 않으면 검사를 실패 처리합니다. 검사 실패 조건에 대한 자세한 내용은 아래를 참조하십시오. 위 명령을 Jenkins 작업(또는 원하는 다른 CI/CD 소프트웨어)에서 실행하고, cron 또는 저장소 코드 푸시 활동에 의해 트리거되도록 설정합니다. TestNG 플러그인이 설치되어 있는지 확인하십시오. 이 플러그인은 build/testng-results에 기록된 결과를 파싱하여 CI/CD 시나리오에서 더 나은 가시성을 제공합니다.

  • 이 API가 퍼징 시도에 취약할 수 있는지 확인하려는 경우. 도구를 실행하고 보고된 실패를 확인하기만 하면 됩니다.

검사 실패 조건

  • 도구는 생성된 요청의 응답 코드가 Swagger에 선언된 응답 코드와 일치하는지 확인합니다. 하지만,
  • 긍정적 검사: 명백한 오류(코드가 5xx인 경우)라면, 해당 응답 코드가 사양에 정의되어 있지 않더라도 여전히 검사를 실패 처리합니다. 단, 재정의를 제공한 경우는 예외입니다.
  • 부정적 검사: 응답이 적법한 오류(1xx, 2xx, 5xx)가 아닌 경우, 검사를 실패 처리합니다. 재정의를 제공하지 않았다면 그렇습니다. 적법한 오류 코드가 사양에 없으면 검사도 실패합니다.
  • Swagger의 응답 섹션에서 'default' 정의를 사용할 수 있지만, 권장하지 않습니다. 항상 적법한 응답을 정확하게 정의하십시오.

검사 실패 조건

  • 도구는 생성된 요청의 응답 코드가 Swagger에 선언된 응답 코드와 일치하는지 확인합니다. 하지만,
  • 긍정적 검사: 명백한 오류(코드가 5xx인 경우)라면, 해당 응답 코드가 사양에 정의되어 있지 않더라도 여전히 검사를 실패 처리합니다. 단, 재정의를 제공한 경우는 예외입니다.
  • 부정적 검사: 응답이 적법한 오류(1xx, 2xx, 5xx)가 아닌 경우, 검사를 실패 처리합니다. 재정의를 제공하지 않았다면 그렇습니다. 적법한 오류 코드가 사양에 없으면 검사도 실패합니다.
  • Swagger의 응답 섹션에서 'default' 정의를 사용할 수 있지만, 권장하지 않습니다. 항상 적법한 응답을 정확하게 정의하십시오.

예상 출력:

  • 이 도구는 testng 보고 프레임워크를 사용하므로 testng 실행을 처리하는 모든 플러그인을 사용할 수 있습니다. 결과는 build/testng-results 폴더 아래에 기록됩니다. 물론 변경 가능합니다.
  • 도구는 검사 제품군에 따라 요청을 생성하며, 각 요청은 특정 항목을 검사합니다. 따라서 각 검사는 명령줄 출력에 모든 관련 세부 정보(검사 대상, 응답 내용, 예상과 일치하는지 여부)를 표시합니다.
  • 잘못된 요청은 bad_requests 폴더에 저장되므로 나중에 분석할 수 있습니다(예: CI/CD 서버에서 실행 중이고 머신에 즉시 접근할 수 없는 경우).
  • 마지막에는 요약이 제공됩니다.
실패한 부정적 검사의 예:
root@kitploit:~
***** Testing API Endpoint *****
***** Test ID: 1575128763286-74212
Testing: Bad Property: /username (STRING), value: {, URL encoded: %7B
--> Url: /user/{
--> Method: GET
--> Headers: []
----------**----------
Request was: GET /user/{ [Accept: application/json], Response status code: 200(UNEXPECTED)
Response (non parsed):
{"id":0,"username":"string","firstName":"string","lastName":"string","email":"string","password":"string","phone":"string","userStatus":0}

검사가 실패한 이유: 요청이 200을 받았지만, 올바른 URL을 포함하지 않았습니다.

또 다른 예:
root@kitploit:~
***** Testing API Endpoint *****
***** Test ID: 1575128763286-25078
Testing: Bad Property: /body/quantity (INTEGER), value: 0.4188493, URL encoded: 0.4188493
--> Url: /store/order
--> Method: POST
--> Headers: []
--> Body: {"petId":-2511515111206893939,"quantity":0.4188493,"id":698757161286106823,"shipDate":"�s","complete":"true","status":"approved"}
----------**----------
Request was: POST /store/order [Accept: application/json], Response status code: 200(UNEXPECTED)
Response (non parsed):
{"id":0,"petId":0,"quantity":0,"shipDate":"2019-11-30T15:46:03Z","status":"placed","complete":false}

서버는 정수를 받을 것으로 예상했지만 double 값을 수락했습니다. 이는 서버에서 버퍼 오버플로를 악용하려는 좋은 지점일 수 있습니다.

성공한 검사의 예:
root@kitploit:~
***** Testing API Endpoint *****
***** Test ID: 1575128763137-43035
Testing: /user/{username}
--> Url: /user/%E68E97EDB4Oq-(!BbG,Y$p'A-KW%65f9FA6jt5vvDz-cW.QGsLS+AA~RIHC3wgy25lDJsGzcT.;kJ+(
--> Method: GET
--> Headers: []
----------**----------
Request was: GET /user/%E68E97EDB4Oq-(!BbG,Y$p'A-KW%65f9FA6jt5vvDz-cW.QGsLS+AA~RIHC3wgy25lDJsGzcT.;kJ+( [Accept: application/json], Response status code: 404
Response (non parsed):
{"statusCode":404,"error":"Not Found","message":"Not Found"}

API 사양에 따라 존재하지 않지만 적법한 사용자 이름을 제공했습니다. 서버는 이 요청을 처리하고 적법한 오류를 반환하는 방법을 알고 있었습니다.

지원되는 검사 시나리오

여기서 endpoint는 엔드포인트 URL과 메서드의 쌍을 의미합니다.

긍정적 시나리오
  • 각 엔드포인트에 대해 모든 매개변수에 대해 생성된 값을 사용하여 요청을 생성합니다. 이러한 값은 무작위로 생성되지만 API 사양에 정의된 규칙을 따릅니다.
  • 각 엔드포인트에 대해 필수 매개변수만 사용하여 요청을 생성합니다. 값은 위에서 설명한 대로 생성됩니다.
부정적 시나리오
  • 각 엔드포인트에 대해 여러 요청을 생성하며, 각 요청은 다른 매개변수를 검사합니다. 도구는 검사 중인 매개변수에 무작위 잘못된 입력 값을 주입하고, 나머지는 긍정적 시나리오에서 설명한 방식으로 생성된 "긍정적" 값으로 채웁니다.
진행 중인 노력

커뮤니티의 이익을 위해 다른 시나리오를 오픈 소스 도구로 마이그레이션하는 작업을 진행 중입니다. 업데이트를 기대해 주세요.

확장성

이 도구는 특정 요구 사항을 충족하기 위해 퍼징 및 요청 생성 기능을 쉽게 확장할 수 있는 방식으로 작성되었습니다. 다른 사람들에게 도움이 될 수 있는 추가 사항이 있으면 풀 리퀘스트를 만들어 제안해 주세요.

도움말

라이브러리에 대한 질문이 있으면 소스 코드 문서를 확인하십시오. 여전히 질문이 있으면 boris.serebro(at)imperva(dot)com으로 이메일을 보내 문의하십시오.

버그 신고

Git Issue를 열고 가능한 한 많은 정보를 포함해 주십시오. 가능하면 문제를 설명하는 샘플 코드를 제공해 주십시오. 특정 저장소에서만 버그가 발생하는 경우 가능하면 해당 저장소에 대한 링크를 제공해 주십시오. 도움을 요청하기 위해 Git Issue를 열지 말고, 버그 보고서만 제출하십시오.

도구 다운로드

실행 예: api-attack.sh -f publiclyAvailableSwaggerOfAPI.yaml -n api.corporate.com -s https

  • API가 서버 측에서 올바르게 구현되었는지, 또는 그 정의가 서버 구현과 일치하는지 확인하려는 경우.

    실행 예: api-attack.sh -f publiclyAvailableSwaggerOfAPI.yaml -n api.corporate.com -s https