
GromHacks Labs -- 그들이 당신이 가지길 원하지 않는 페이로드 목록. 마더쉽에서 지구로 전송된 1,324개의 인젝션 프로브가 20가지 취약점 클래스에 걸쳐 인젝션 가능 여부를 탐지합니다. 우리는 익스플로잇을 하지 않으며, 그냥 문을 두드리고 누가 응답하는지 확인할 뿐입니다. 모든 페이로드는 실제 파서를 대상으로 테스트되었으며, 외계인들은 증거를 요구합니다. 입력을 신뢰하지 마세요! 모든 것을 의심하세요!
작동하지 않는 페이로드를 발견하셨나요? 페이로드, 대상 컨텍스트, 그리고 예상했던 결과를 포함하여 이슈를 열어주세요. 수정 사항이나 새로운 페이로드에 대한 풀 리퀘스트는 언제나 환영합니다.
연구는 진행 중입니다. 이 프로젝트는 활발히 개발 중이며, 새로운 주입 컨텍스트, 페이로드, 검증 개선 사항으로 업데이트될 예정입니다.
면책 조항: 이 페이로드들은 오직 승인된 보안 테스트, 교육, 연구 목적으로만 제공됩니다. 저자는 어떠한 오용이나 그로 인한 결과에 대해서도 책임이나 의무를 지지 않습니다. 전적으로 본인의 책임하에 사용하십시오. 이 프로젝트를 사용함으로써 귀하는 자신의 행동에 대한 전적인 책임을 수락하게 됩니다.
라이선스: MIT - LICENSE 참조
37개의 보안 테스트 카테고리에 걸친 1,618개의 고유 페이로드 문자열과 교차 적용되는 폴리글랏 세트, 35개의 명명된 역직렬화 형식, 라이브러리, 싱크, 그리고 20개의 템플릿 엔진을 포함합니다. 컨텍스트를 보존하는 마스터는 661개 섹션에 걸쳐 1,760개의 페이로드-섹션 할당을 포함하므로, 공유 문자열은 해당되는 모든 파서 및 삽입 컨텍스트와 연관된 상태로 유지됩니다. 108개 페이로드 최소 목록에는 GraphQL, HQL/JPQL, XPath, JSONPath, JSON 구성, HTTP 파라미터 오염, XQuery, Firestore, SMTP/IMAP 및 이메일 헤더, Host 헤더, XML/SOAP 구조, LDAP DN, HTML/CSS, CSV, 로그, LaTeX에 대한 대표적인 프로브가 포함됩니다. 검증 범위는 페이로드, 파서, 삽입 컨텍스트에 따라 다릅니다.
언어 매트릭스는 C, C++, C#, Dart, Elixir, Erlang, Go, Java, JavaScript, Kotlin, Lua, Objective-C, Perl, PHP, Python, Ruby, Rust, Scala, Swift, TypeScript를 포함합니다.
일반 검증기는 스모크 체크일 뿐 익스플로잇의 증거가 아닙니다. 이전 결과에서는 임의의 오류와 요청 타임아웃을 적중으로 계산했습니다. 컨텍스트 회귀는 문자열, 숫자, 주입된 ORDER BY 절 및 직접 정렬 표현식 위치를 포함한 9개의 라이브 SQL 방언을 다룹니다. GraphQL.js, Hibernate HQL/JPQL, 직접 XPath/XQuery/JSONPath, JSON 구성 및 중복 파라미터 오염, Firestore 구조화 필터, SMTP/IMAP 명령 및 이메일 헤더 주입, Host 헤더 URL 포이즈닝, XML 및 SOAP 구조, LDAP 필터 및 DN 주입, Chromium에서의 HTML/CSS/XSS, CSV 수식 셀 브레이크아웃, 로그 포징, LaTeX 소스 주입, POSIX 셸 따옴표/백틱/파이프라인, $() 및 퍼센트 디코딩된 개행 컨텍스트, 로컬 SSRF/경로/XXE 픽스처, MongoDB/CouchDB/Redis/ArangoDB/DynamoDB PartiQL/Cassandra CQL/Couchbase SQL++/Elasticsearch/Neo4j, EL, XSLT, SSI, 프로토타입 오염, 그리고 대표적인 역직렬화 콜백을 포함합니다. 브라우저 검사에는 따옴표 없는 속성, 속성 프래그먼트, HTML 주석, </script> 파서 컨텍스트가 포함됩니다. 언어 매트릭스는 요청된 20개 언어 모두에서 수학, 오류, 타이밍, OOB, 생성된 소스 따옴표 브레이크아웃을 검사합니다. 지원되는 경우 일반적인 대체 따옴표 및 백틱 문자열 컨텍스트가 테스트되며, 20개 모두에서 공유 산술 폴리글랏과 해당되는 경우 런타임 형식 문자열도 함께 테스트됩니다. 검증된 매트릭스와 남은 엔진별 격차는 COVERAGE.md를 참조하십시오.
대부분의 공개된 페이로드 목록은 취약점 유형별로 구성됩니다. SQL 인젝션용 목록 하나, XSS용 목록 하나, 커맨드 인젝션용 목록 하나, 이런 식입니다. 테스터는 대상과 일치한다고 생각하는 목록을 선택하고, 인트루더 도구에 로드한 뒤 파라미터에 대해 실행합니다. 취약점 클래스를 잘못 추측하면 전체 스캔이 아무것도 찾지 못합니다. 백엔드가 흔치 않은 데이터베이스, 비표준 템플릿 엔진, 또는 목록이 고려하지 않은 언어라면 페이로드는 조용히 실패합니다. 테스터는 파라미터가 깨끗하다고 생각하고 넘어갑니다.
이 접근 방식에는 두 가지 근본적인 문제가 있습니다. 첫째, 테스터가 취약점을 발견하기 전에 어떤 취약점이 존재하는지 알아야 합니다. 둘째, 유통되는 대부분의 페이로드는 이론적입니다. 실제 파서에 대해 테스트된 적 없이 프로젝트와 블로그 게시물 사이에서 복사됩니다. 겉보기에는 맞아 보입니다. 심지어 구문적으로 유효할 수도 있습니다. 하지만 실제로 대상에서 탐지 가능한 응답을 유발하지는 않습니다.
이 프로젝트는 하나의 문자열이 여러 관련 컨텍스트를 커버할 수 있는 폴리글랏을 사용합니다. 페이로드의 동작은 여전히 애플리케이션이 이를 어떻게 삽입하는지에 달려 있습니다. 셸 인수는 따옴표 없이, 작은따옴표로, 또는 큰따옴표로 묶일 수 있습니다. SQL 문자열과 숫자 표현식은 다릅니다. 템플릿 엔진은 호환되지 않는 구분자를 사용합니다. 테스트베드는 이러한 래퍼를 명시적으로 모델링해야 합니다. 어떤 단일 문자열도 모든 따옴표, 주석, 파서를 탈출한다고 가정해서는 안 됩니다.
페이로드는 탐지 기둥을 중심으로 그룹화됩니다. 이는 일치하는 컨텍스트에서 증거를 제공할 수 있는 관찰 가능한 응답입니다:
7*191처럼 1337로 평가되는 산술 표현식이 포함됩니다. 해당 숫자가 응답에 나타나고 페이로드가 리터럴 1337이 아닌 7*191만 전송했다면, 대상 파서가 표현식을 평가한 것입니다. 그 결과는 해당 싱크에서의 평가를 증명하며, 이는 쿼리, 템플릿, 표현식 언어, 또는 코드 런타임일 수 있습니다.이러한 신호는 페이로드의 실제 컨텍스트에서 확인할 때만 유용합니다. 일반 검증기는 스모크 테스트입니다. 파서 오류, 타임아웃, 또는 반사된 문자열만으로는 페이로드가 실행되었음을 증명하지 않습니다. 더 강력한 증거를 위해서는 컨텍스트별 Docker 검사를 사용하십시오.
전통적인 OOB 및 타이밍 페이로드는 셸 명령에 의존합니다: curl, nslookup, ping, sleep. 이들은 끊임없이 깨집니다. 대상 OS, 사용 가능한 PATH, 명령을 해석하는 셸, 그리고 프로세스가 서브프로세스를 생성할 권한이 있는지에 따라 달라집니다. Ubuntu에서 작동하는 curl 기반 OOB 페이로드는 Alpine(curl 없음)에서 실패하고, Windows(curl 없음)에서 실패하며, 제한된 컨테이너(아웃바운드 프로세스 실행 없음) 내부에서 실패합니다.
이 프로젝트는 가능한 한 셸 명령을 언어 네이티브 내장 기능으로 대체합니다. 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 조회와 서브프로세스 의존성을 피합니다. 런타임 정책과 구성은 여전히 네트워크 액세스나 개별 API를 비활성화할 수 있습니다. 픽스처 매트릭스는 실행된 정확한 환경을 기록합니다.
표준 라이브러리 임포트가 차단될 수 있는 경우, 일부 페이로드는 Node의 Atomics.wait() 및 OOB를 위한 원시 소켓 연결과 같은 임포트 없는 대안을 사용합니다. 리소스가 많이 드는 루프는 기본 코퍼스 검사에서 제외됩니다.
모든 것이 폴리글랏이 될 수는 없습니다. 템플릿 엔진은 근본적으로 호환되지 않는 구문을 사용합니다. Jinja2의 {{}}는 ERB의 <%= %>에게 아무 의미가 없으며, 둘 다 Freemarker의 ${}로 파싱되지 않습니다. 역직렬화 형식은 하나의 프레임워크에 특정한 바이너리 또는 구조화된 데이터입니다. 이러한 카테고리의 경우, 프로젝트는 동일한 탐지 기둥 시스템 아래에 조직된 엔진별 페이로드를 사용하며, 11개 런타임 그룹에 걸쳐 20개의 템플릿 엔진과 35개의 명명된 역직렬화 형식, 라이브러리, 싱크를 커버합니다.
코퍼스는 호환되는 컨텍스트를 위한 폴리글랏과 구문이 다른 곳을 위한 엔진별 프로브를 결합합니다. 테스트 커버리지와 결과는 실행된 픽스처와 래퍼로 범위가 한정됩니다.
이전의 FIRE/NO-FIRE 주장은 철회됩니다. 일반 검증기가 임의의 오류와 요청 타임아웃을 적중으로 계산했기 때문입니다. testbed/test_context_polyglots.py의 컨텍스트 매트릭스는 이제 SQLite, PostgreSQL, MySQL, MariaDB, CockroachDB, H2, Firebird, Oracle, SQL Server에서의 SQL 동작을 검사합니다. GraphQL.js, Hibernate HQL/JPQL, XPath, XQuery, JSONPath, Firestore 구조화 필터, MongoDB, CouchDB, Redis, ArangoDB, DynamoDB PartiQL, Cassandra CQL, Couchbase SQL++, Elasticsearch, Neo4j에서의 NoSQL/쿼리 동작, 따옴표 없음, 따옴표 있음, 백틱, 파이프라인 컨텍스트에서의 POSIX 셸 인젝션, 로컬 SSRF/경로/XXE 픽스처, 기준선 대비 SSI 출력, 코드 평가 및 역직렬화 콜백, 검증기 타임아웃 처리, 그리고 교차 엔진 및 엔진별 SSTI 수학을 검사합니다. testbed/test_windows_contexts.py는 Windows CMD/PowerShell 컨텍스트를 목록화하고 Windows 호스트에 대한 네이티브 셸 검사를 제공합니다.
목록은 유용한 경우 신호별로 프로브를 그룹화하지만, 일부 항목은 방언 또는 컨텍스트에 특정하며 여러 카테고리가 네 가지 탐지 기둥을 모두 지원하지는 않습니다. 결과를 픽스처별로 취급한 다음, 더 넓은 커버리지를 위해 해당 카테고리별 페이로드를 사용하십시오.
| 페이로드 | 카테고리 | 기둥 |
|---|---|---|
| 4 | SQLi | 오류, 문자열/숫자 불리언 수학, MySQL 타이밍; 검증된 OOB 프로브 없음 |
| 4 | SSTI | 오류, 엔진 하위 집합 수학/타이밍/OOB 프로브 |
| 3 | OS Cmd | 수학, 타이밍, 테스트된 POSIX sh 따옴표/백틱/파이프라인 컨텍스트에서의 OOB, 그리고 $() 및 개행 브레이크아웃 프로브 |
| 3 | Code Injection | 수학, 타이밍, OOB (교차 언어) |
| 2 | XSS | 수학, OOB |
| 2 | XXE | 파일 읽기, OOB |
| 2 | SSRF | 오류, OOB |
| 1 | Path Traversal | 파일 읽기 |
| 2 | NoSQL | 문서 연산자, 오류; 수학과 타이밍은 방언별 |
| 1 | EL Injection | 수학 |
| 1 | Prototype Pollution | 수학 |
| 1 | CRLF/Header | 수학 |
| 1 | Format String | 오류 |
| 1 | SSI | 지시문 에코 (기준선과 비교된 마커) |
| 2 | LDAP Injection | 오류, 수학 |
| 3 | XSLT Injection | 오류, 수학, OOB |
| 2 | Elasticsearch | 오류, 수학 |
| 2 | Cypher/Neo4j | 오류, 타이밍 |
| 1 | CouchDB | 오류 |
| 1 | CSV Injection | 수식 선행 셀 브레이크아웃 |
| 1 | HTML Injection | 요소 구조 |
| 1 | Log Injection | CRLF를 통한 이벤트 위조 |
| 1 | LaTeX Injection | 무해한 마커를 사용한 명령 브레이크아웃 |
| 1 | JSON Injection | 속성 브레이크아웃 |
| 1 | HTTP Parameter Pollution | 중복 값 검증/사용 불일치 |
| 1 | SMTP Header Injection | Bcc 헤더 브레이크아웃; 메일 전달 없음 |
| 1 | GraphQL | 선택 브레이크아웃 |
| 1 | HQL/JPQL | 공유 문자열 술어 브레이크아웃 |
| 1 | XPath | 술어 브레이크아웃 |
| 1 | JSONPath | 유니온 선택 |
| 1 | XQuery | 술어 브레이크아웃 |
| 1 | Firestore | 구조화 필터 확장 |
| 3 | Groovy | 수학, 타이밍, OOB |
| 46 | Deserialization | 지원되는 경우 다중 기둥, 그렇지 않으면 오류 전용 |
간결한 승인된 테스트 실행에는 ready/minimal/payloads-only.txt를 사용하십시오. 셸 및 SQL 프로브의 경우, 결과를 해석할 때 대상의 따옴표 또는 쿼리 컨텍스트를 보존하십시오.
전체 운영자 가이드는 **HOWTOUSE.md**를 참조하십시오. 이는 "파라미터를 보고 있는데, 무엇을 던져야 하나?"를 반복 가능한 워크플로로 바꿔줍니다: