
GromHacks Labs -- 그들이 당신이 가지길 원하지 않는 페이로드 목록. 마더쉽에서 지구로 전송된 1,324개의 인젝션 프로브가 20가지 취약점 클래스에 걸쳐 인젝션 가능 여부를 탐지합니다. 우리는 익스플로잇을 하지 않으며, 그냥 문을 두드리고 누가 응답하는지 확인할 뿐입니다. 모든 페이로드는 실제 파서를 대상으로 테스트되었으며, 외계인들은 증거를 요구합니다. 입력을 신뢰하지 마세요! 모든 것을 의심하세요!
작동하지 않는 페이로드를 찾았나요? 이슈 열기에 페이로드, 대상 컨텍스트, 그리고 예상했던 동작을 포함해 주세요. 수정 사항이나 새로운 페이로드가 포함된 풀 리퀘스트는 언제나 환영합니다.
연구는 계속 진행 중입니다. 이 프로젝트는 활발히 개발 중이며, 새로운 페이로드, 취약점 클래스, 검증 개선 사항으로 정기적으로 업데이트될 예정입니다.
면책 조항: 이 페이로드는 승인된 보안 테스트, 교육 및 연구 목적으로만 제공됩니다. 작성자는 오용이나 파생 효과에 대해 어떠한 책임도 지지 않습니다. 전적으로 자신의 책임 하에 사용하세요. 이 프로젝트를 사용함으로써 귀하는 자신의 행동에 대한 전적인 책임을 수락하는 것입니다.
라이선스: MIT - LICENSE 참조
1,353개의 검증된 인젝션 페이로드가 20개의 취약점 클래스, 31개의 역직렬화 프레임워크 및 14개의 템플릿 엔진을 다룹니다. 모든 페이로드는 감지 가능한 신호를 생성합니다. 이론적인 페이로드는 전혀 없습니다.
검증: 35개의 Docker 테스트베드 스택에 대해 1,353개 테스트됨 / 1,353개 발동 / 0개 실패 / 0개 건너뜀. 엄격한 검증은 실제 익스플로잇(서버 측 계산, 실제 파서 오류, 측정된 지연 시간, 대상 컨테이너의 OOB 콜백)을 증명합니다. 문자열 매칭이 아닙니다.
대부분의 공개 페이로드 목록은 취약점 유형별로 구성되어 있습니다. 하나는 SQL 인젝션용, 다른 하나는 XSS용, 또 다른 하나는 명령 인젝션용 등입니다. 테스터는 대상과 일치할 것으로 생각되는 목록을 선택하여 침투 도구에 로드하고 파라미터에 대해 실행합니다. 취약점 클래스를 잘못 추측하면 전체 스캔에서 아무것도 생성되지 않습니다. 백엔드가 흔하지 않은 데이터베이스나 비표준 템플릿 엔진, 혹은 목록에서 고려하지 않은 언어라면 페이로드는 조용히 실패합니다. 테스터는 파라미터가 안전하다고 생각하고 넘어갑니다.
이 접근 방식에는 두 가지 근본적인 문제가 있습니다. 첫째, 테스터가 취약점을 발견하기 전에 어떤 취약점이 존재하는지 알아야 합니다. 둘째, 유통되는 대부분의 페이로드는 이론적입니다. 프로젝트와 블로그 게시물 사이에서 복사되었지만 실제 파서에 대해 테스트된 적이 없습니다. 올바르게 보입니다. 구문적으로 유효할 수도 있습니다. 하지만 실제로 대상에서 감지 가능한 응답을 트리거하지 않습니다.
이 프로젝트는 다른 접근 방식을 취합니다. 주요 작업 단위는 **폴리글롯(polyglot)**입니다. 하나의 페이로드 문자열이 가능한 한 많은 인젝션 컨텍스트에서 동시에 유효(또는 의미 있게 무효)하도록 설계되었습니다. 하나의 폴리글롯이 작은따옴표, 큰따옴표, 괄호, 블록 주석, HTML 속성, 템플릿 구분자, 백틱 컨텍스트를 한 번에 모두 탈출합니다. 취약점이 무엇인지 알 필요 없이 테스터는 모든 파라미터에 폴리글롯을 발사하고 신호를 관찰합니다.
이 컬렉션의 모든 페이로드는 **검증 기둥(detection pillars)**을 중심으로 구축되었습니다. 서버 로그, 소스 코드, 파일 시스템에 접근하지 않고도 취약점이 존재함을 확인할 수 있는 관찰 가능한 응답입니다:
7*191과 같은 산술 표현식이 포함되어 1337으로 평가됩니다. 응답에 그 숫자가 나타나고 페이로드가 리터럴 1337이 아닌 7*191만 보냈다면, 백엔드가 표현식을 계산한 것입니다. 이는 코드 실행의 증거입니다.페이로드가 대상 컨텍스트에 대해 테스트되었을 때 이러한 신호 중 하나라도 생성하지 않으면 목록에 속하지 않습니다. 여기 있는 1,353개의 모든 페이로드는 엄격한 익스플로잇 증명을 통해 특수 제작된 Docker 테스트베드에 대해 검증되었습니다. 이론적인 것은 전혀 없습니다.
전통적인 OOB 및 타이밍 페이로드는 셸 명령어(curl, nslookup, ping, sleep)에 의존합니다. 이러한 명령어는 자주 깨집니다. 대상 OS, 사용 가능한 PATH, 명령어를 해석하는 셸, 프로세스가 하위 프로세스를 생성할 권한이 있는지에 따라 달라집니다. Ubuntu에서 작동하는 curl 기반 OOB 페이로드는 Alpine(컬 없음), Windows(컬 없음), 제한된 컨테이너 내부(아웃바운드 프로세스 실행 불가)에서 실패합니다.
이 프로젝트는 가능한 경우 셸 명령어를 언어 자체 내장 함수로 대체합니다. Python 페이로드는 urllib.request.urlopen()과 time.sleep()을 사용합니다. Java 페이로드는 java.net.URL.openStream()과 Thread.sleep()을 사용합니다. Ruby는 Net::HTTP.get()과 Kernel.sleep을 사용합니다. PHP는 file_get_contents()와 sleep()을 사용합니다. 이러한 함수는 각 언어의 모든 표준 설치에 존재합니다. PATH 조회, 하위 프로세스, OS 종속성이 없습니다.
표준 라이브러리 임포트조차 차단될 수 있는 경우(샌드박스 eval, 제한된 exec), 페이로드는 임포트가 필요 없는 대안으로 대체됩니다: 타이밍을 위한 CPU 스핀 루프(Python의 sum(range(500000000)), Node의 Atomics.wait()) 및 OOB를 위한 원시 소켓 연결(__import__('socket').create_connection(), fsockopen(), TCPSocket.new())입니다.
모든 것이 폴리글롯이 될 수 있는 것은 아닙니다. 템플릿 엔진은 근본적으로 호환되지 않는 구문을 사용합니다. Jinja2의 {{}}는 ERB의 <%= %>에게 아무 의미가 없으며, 둘 다 Freemarker의 ${}로 파싱되지 않습니다. 역직렬화 형식은 특정 프레임워크에 특화된 바이너리 또는 구조화된 데이터입니다. 이러한 카테고리의 경우, 프로젝트는 동일한 검증 기둥 시스템 하에 구성된 엔진별 페이로드를 사용하며, 7개 언어에 걸쳐 14개의 템플릿 엔진과 31개의 역직렬화 프레임워크를 다룹니다.
결과는 폴리글롯이 처리할 수 있는 컨텍스트(SQLi, OS 명령 인젝션, XSS, 코드 인젝션)를 처리하고, 특수 제작된 엔진별 페이로드가 나머지를 처리하는 단일 코퍼스입니다. 모두 검증되었고, 모두 감지 가능한 신호를 생성하며, 모두 라인별 인젝션 도구에 사용할 준비가 되었습니다.
83개의 페이로드가 35개 모든 테스트베드 스택, 55개 이상의 엔드포인트, 각 카테고리의 4가지 검증 기둥을 모두 다룹니다. 검증됨: 83 발동 / 0 미발동 / 0 건너뜀.
모든 인젝션 카테고리는 아키텍처적으로 가능한 경우 오류 + 수학 + 타이밍 + OOB 범위를 얻습니다. 코드 실행을 지원하는 역직렬화 프레임워크(Pickle, PyYAML, jsonpickle, node-serialize, XMLDecoder, .NET Json.NET)는 전체 다중 기둥 범위를 얻습니다. 프로빙만 가능한 프레임워크(PHP unserialize, Ruby Marshal, SnakeYAML 등)는 오류 기반 탐지를 얻습니다. 깊이 있는 탐색을 위해 전체 카테고리 목록으로 전환하기 전에 모든 파라미터에 이것을 발사하세요.
| 페이로드 | 카테고리 | 검증 기둥 |
|---|---|---|
| 4 | SQLi | error, math, timing, OOB (교차 방언 폴리글롯) |
| 4 | SSTI | error, math, timing, OOB (교차 엔진 폴리글롯) |
| 3 | OS Cmd | math, timing, OOB (교차 셸 폴리글롯) |
| 3 | Code Injection | math, timing, OOB (교차 언어) |
| 2 | XSS | math, OOB |
| 2 | XXE | 파일 읽기, OOB |
| 2 | SSRF | error, OOB |
| 1 | Path Traversal | 파일 읽기 |
| 2 | NoSQL | math, error |
| 1 | EL Injection | math |
| 1 | Prototype Pollution | math |
| 1 | CRLF/Header | math |
| 1 | Format String | error |
| 1 | SSI | math |
| 2 | LDAP Injection | error, math |
| 3 | XSLT Injection | error, math, OOB |
| 2 | Elasticsearch | error, math |
| 2 | Cypher/Neo4j | error, timing |
| 1 | CouchDB | error |
| 3 | Groovy | math, timing, OOB |
| 41 | Deserialization | 지원되는 경우 다중 기둥, 그 외는 error만 |
1,353개 대신 83개의 요청. Burp Intruder에서 ready/minimal/payloads-only.txt를 사용하세요.
전체 운영자 가이드는 **HOWTOUSE.md**를 참조하세요. '나는 파라미터를 보고 있는데, 무엇을 던져야 하지?'라는 질문을 반복 가능한 워크플로우로 바꿔줍니다:
7*7이 49를 반환하는 eval 신호, {{name}}이 "Alice"로 렌더링되어 SSTI 확인, 진단 필드에서 누출된 ping 출력, OOB 로그의 User-Agent 문자열이 페처 라이브러리 이름을 나타냄), 최신 스택 ORM 위험 요소(Prisma $queryRaw, Rails .order(), Hibernate JPQL concat, Mongoose findOne(req.body)), 그리고 전체 목록을 소모하기 전에 의심을 확인하기 위한 저렴한 프로브를 나열합니다.rO0AB = Java, AAEAAAD///// = .NET BinaryFormatter, BAg = Ruby Marshal, gASV = Python pickle P4, Tzo/YTo = PHP unserialize 등)와 16항목 빠른 참조 치트 카드 및 명확성 휴리스틱. 발사 전에 blob의 지문을 확인하여 232개 모두 대신 5-15개의 일치하는 페이로드를 로드하세요.id=42와 JSESSIONID가 보여'에서 'by-category/sqli.txt + Java 역직렬화 + EL 인젝션 시도, math 기둥 관찰'로 한 번의 조회로 이동합니다.payloadctl prepare를 실행하기 전에 HOWTOUSE.md를 사용하세요. 지문 확인 먼저, 최소 목록 다음, 카테고리 심층 탐색 마지막 - 모든 파라미터에 1,353개의 페이로드를 산탄총처럼 쏘지 마세요.
./tools/payloadctl prepare YOUR_CALLBACK.oastify.com
`prepare` 실행 후, 사용 준비가 완료된 파일들은 `ready/full/` 및 `ready/minimal/` 디렉토리에 동일한 구조로 생성됩니다: