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

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

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

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

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
jdam — 구조 인식 JSON 퍼저 | Kitploit
도구/GitLabGitLab/michenriksen/jdam
Vulnerability AnalysisWeb Application ExploitationFuzzingPenetration Testing
GitLabmichenriksen/jdam

jdam

구조 인식 JSON 퍼저

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

인기

모두 보기 →

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

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유

jdam - 구조 인식 JSON 퍼징

jdam

jdam은 임의의 JSON 객체를 구조 인식 방식으로 퍼징하는 Radamsa에서 영감을 받은 도구로, 퍼징 결과가 항상 유효한 JSON임을 보장합니다.

많은 기존 퍼징 도구는 입력을 맹목적으로 변경하여 결과가 유효하지 않은 JSON이 되는 경우가 많습니다. 이는 퍼즈 테스트가 대상 애플리케이션의 JSON 파서만 실행하고, 요청이 유효하지 않기 때문에 퍼즈 테스트가 기본 애플리케이션 코드에 도달하지 못한다는 것을 의미합니다. Jdam은 이 문제를 해결하기 위한 시도입니다.

jdam에는 퍼징된 데이터를 처리하는 시스템의 잠재적인 문제와 취약점을 발견하는 것을 목표로 하는 여러 변이 모듈이 함께 제공됩니다. 일부 모듈은 무작위 바이트 삭제, 교체, 스왑, 반복, 부울 값 반전, 숫자 부정과 같은 무작위 변경을 수행하는 반면, 다른 모듈은 값을 특정 취약점 유형을 트리거하려는 페이로드로 대체합니다. 예를 들면:

  • SQL 인젝션
  • 명령어 인젝션
  • LDAP 인젝션
  • NoSQL 인젝션
  • 포맷 문자열 인젝션
  • 로컬 파일 포함
  • 정수 오버플로우
  • 그 외 다수

사용 가능한 뮤테이터의 전체 목록을 보려면 jdam -list를 사용하세요.

참고

jdam은 아직 거친 상태이며 오류가 예상됩니다. 하지만 모험심 있는 분들을 위해 출시할 수 있을 만큼 안정적이지만, 현재는 알파 소프트웨어로 취급하세요!

설치

운영 체제에 맞는 미리 빌드된 릴리스를 다운로드하거나 리포지토리를 클론하고 로 컴파일하세요.

도구 다운로드
go build -o jdam cmd/jdam/*

사용법

root@kitploit:~
Usage of jdam:
  -count int
    	Number of fuzzed objects to generate (default 1)
  -ignore string
    	Comma-separated list of fields to exclude from fuzzing
  -list
    	List available mutators
  -max-depth int
    	Maximum object depth to fuzz (default 100)
  -mutators string
    	Comma-separated list of mutator IDs to use (default: all)
  -nil-chance float
    	Probability of value being set to nil (between 0 (no nils) and 1 (all nils)) (default 0.75)
  -output string
    	Output file pattern to use for results (e.g. /tmp/jdam-%d.json)
  -rounds int
    	Number of times to fuzz object (default 1)
  -seed int
    	Seed to use for pseudo-random number generator (default: current UNIX timestamp)
  -verbose
    	Print activity information
  -version
    	Print current jdam version

jdam은 유효한 JSON 객체({...})를 파이프로 전달하여 작동합니다. 기본적으로 jdam은 무작위 필드에 대해 하나의 무작위 순열을 수행하고 결과 JSON 객체를 출력합니다:

root@kitploit:~
$ echo '{"hello":"world"}' | jdam
{"hello":{"id":1}}

주제 JSON은 -rounds 플래그로 여러 번 변이할 수 있지만, 이전 퍼징 페이로드도 변이될 수 있다는 점을 명심하세요:

root@kitploit:~
$ echo '{"hello":"world"}' | jdam -rounds 10
{"hello":{"_constructor":"${42*444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444442}"}}

여러 개의 퍼징된 객체를 -count 플래그로 생성할 수 있습니다:

root@kitploit:~
$ echo '{"hello":"world"}' | jdam -count 10
{"hello":"sorld"}
{"hello":"../../../../../../../../../../../../../../../../../../../../etc/passwd"}
{"hello":"{{42*42}}"}
{"hello":null}
{"hello":"' \u0026\u0026 this.password.match(/.*/)//+\u0000"}
{"hello":{"$where":"1"}}
{"hello":"null"}
{"hello":"\";touch /tmp/jdam.70797.fail'"}
{"hello":null}
{"hello":"|| 1==1"}

결과를 파일에 쓰기

jdam은 명령의 STDOUT 대신 테스트 파일을 준비하려는 경우 퍼징 결과를 개별 파일에 쓸 수 있습니다:

root@kitploit:~
$ echo '{"hello":"world"}' | jdam -count 10 -output "/tmp/jdam-%d.json"

위 명령은 /tmp에 jdam-1.json부터 jdam-10.json까지 10개의 파일을 생성합니다. 특수 동사 %d는 자동으로 순차 번호로 대체되어 결과를 개별 파일에 쓸 수 있습니다.

필드 무시

jdam이 주제 JSON 객체의 특정 필드를 변이하지 않도록 하려면 -ignore 플래그로 jdam에 무시하도록 지시할 수 있습니다:

root@kitploit:~
$ echo '{"id":13,"articleId":37,"comment":"Hello"}' | ./jdam -count 10 -ignore id,articleId
{"id":13,"articleId":37,"comment":"%x%x%x%x"}
{"id":13,"articleId":37,"comment":"search=')] | //user/*[contains(*,'"}
{"id":13,"articleId":37,"comment":"' and count(/comment())=1 and '1'='1"}
{"id":13,"articleId":37,"comment":"\u0016ello"}
{"id":13,"articleId":37,"comment":"/"}
{"id":13,"articleId":37,"comment":null}
{"id":13,"articleId":37,"comment":"{{{42*42}}}"}
{"id":13,"articleId":37,"comment":"@*"}
{"id":13,"articleId":37,"comment":"Helloooooooooooooooo"}
{"id":13,"articleId":37,"comment":"//*"}

Ffuf와 함께 jdam 사용하기

ffuf는 훌륭한 웹 퍼저이며 jdam을 퍼징 입력으로 쉽게 사용할 수 있습니다:

root@kitploit:~
ffuf -input-cmd 'cat subject.json | jdam -rounds 3' -d FUZZ -u http://localhost/api/todos/1 -X PUT -v -mc 500 -mr 'error|failed|failure|fault|abort|root:|1764|0x|\d{20}' -od /tmp/ffuf_test

위 명령은 ffuf가 jdam에서 퍼징 입력을 가져와 요청 본문으로 PUT /api/todos/1에 보내도록 지시합니다. 응답이 500 Internal Server Error이거나 응답 본문에 특정 흥미로운 문자열이 포함된 경우 요청 및 응답 세부 정보가 tmp/ffuf_test/에 기록됩니다.

패키지로 jdam 사용하기

Go를 알고 매우 전문화된 퍼징이 필요하다면 자신의 Go 코드 내에서 jdam을 사용할 수 있습니다. 사용 예제는 examples/ 폴더를 참조하세요.

무엇을 찾아야 하는가

퍼징은 특정 변이가 문제를 일으키거나 취약점을 트리거했는지 감지할 수 있을 때만 유용합니다. 이러한 징후는 대상 시스템과 환경에 따라 다르지만, 주의해야 할 몇 가지 일반적인 사항은 다음과 같습니다:

  1. 충돌: 대상 시스템이 더 이상 연결을 수락하지 않으면 메모리 손상 버그로 인해 충돌했을 가능성이 높습니다. 마지막 요청을 재생하여 충돌이 재현되는지 확인하세요.
  2. 비정상적으로 느린 응답: 요청으로 인해 서버가 비정상적으로 느리게 응답하면 페이로드가 기본 시스템에 문제를 일으키거나 데이터베이스에 sleep을 지시했을 가능성이 높습니다.
  3. 비정상적으로 큰 응답: 응답이 평균에 비해 비정상적으로 크면 반환되지 않았어야 할 흥미로운 데이터가 포함될 수 있습니다.
  4. 500 Internal Server Error 및 기타 오류 응답: 일반적으로 페이로드가 애플리케이션에서 예상치 못한 또는 처리되지 않은 오류를 트리거할 때 발생합니다.
  5. 오류 및 실패 키워드: error, failure, failed 등과 같은 오류 관련 키워드가 포함된 응답.
  6. /etc/passwd 파일 내용: 모든 로컬 파일 포함 페이로드는 예측 가능한 콘텐츠를 위해 /etc/passwd 파일을 포함하려고 시도합니다. 따라서 root:가 포함된 응답은 매우 흥미롭습니다!
  7. 매직 넘버 1764: 모든 템플릿 인젝션 페이로드는 취약한 템플릿 엔진이 42*42를 평가하도록 시도하며, 이 값은 1.764입니다. 이 숫자가 응답에 나타나면 시스템이 템플릿 인젝션에 취약할 가능성이 높습니다.
  8. 0x 및 긴 숫자: 응답에 0x 뒤에 긴 16진수 문자열이나 긴 숫자 문자열이 포함되어 있으면 페이로드가 포맷 문자열 취약점을 트리거했음을 나타낼 수 있습니다.
  9. /tmp/jdam.*.fail의 존재: 모든 명령어 인젝션 페이로드는 시스템의 /tmp 폴더에 jdam.<number>.fail이라는 이름의 파일을 생성하려고 시도합니다. 숫자는 무작위 다섯 자리 숫자로, 책임이 있는 페이로드를 더 쉽게 식별할 수 있도록 합니다.

트로피 룸

jdam은 아직 매우 새로운 도구이므로 아직 좋은 버그를 발견하지 못했습니다. jdam이 CVE나 좋은 버그 바운티를 획득하는 데 도움이 되었다면 알려주시기 바랍니다. 기꺼이 여러분의 글 또는 보고서를 여기에 링크하겠습니다. :)

감사의 말

감사의 말을 전하고 싶은 다른 프로젝트들이 있습니다:

  • Radamsa jdam에 대한 영감을 주셔서 감사합니다.
  • gofuzz jdam 코딩 방법에 대한 아이디어를 주셔서 감사합니다.
  • SecLists 및 PayloadsAllTheThings 퍼징 페이로드 제공에 감사드립니다.
  • ffuf 웹 애플리케이션에 대해 jdam을 매우 쉽게 사용할 수 있게 해주셔서 감사합니다.

즐거운 퍼징 되세요!