'

Perl в хэке и хэки в Perl

Понравилась презентация – покажи это...





Слайд 0

YAPC::Russia 2009 Докладчик: Илья Зеленчук, Perlсlub УрГУ (г. Екатеринбург) Perl в хэке и хэки в Perl


Слайд 1

Игры CTF (Capture the Flag) ICFP EACP (Extremely Advanced Computer Programming) YAPC::Russia 2009


Слайд 2

Perl в хэке Простоя работа с сетью; Удобен при написании PoC; Обфускация кода; Генерация сложночитаемого С кода; Затрудненный reverse. YAPC::Russia 2009


Слайд 3

Пример игрового сервиса YAPC::Russia 2009


Слайд 4

Простой веб клиент YAPC::Russia 2009 ;


Слайд 5

Perl2C ... (3474 строки) xpv_list[79].xpv_pv = savepvn("Hello, MayPerl\n", 15); { SV **svp; AV *av = (AV*)&sv_list[279]; av_extend(av, 2); svp = AvARRAY(av); *svp++ = (SV*)&PL_sv_undef; *svp++ = (SV*)&PL_sv_undef; *svp++ = (SV*)&sv_list[280]; AvFILLp(av) = 2; } PL_curpad = AvARRAY((AV*)&sv_list[279]); GvHV(PL_incgv) = (HV*)&sv_list[53]; ... (150 строк) YAPC::Russia 2009


Слайд 6

Perl2bin YAPC::Russia 2009


Слайд 7

Хэки в Perl Простой сокет в Perl’e; Sniffer под UNIX без использования libpcap; Прием/отправка пакетов и использованием raw socket; Неблокирующие сокеты. YAPC::Russia 2009


Слайд 8

Perl sockets #!/usr/bin/perl use Socket; socket $S, PF_INET, SOCK_STREAM, getprotobyname('tcp‘); my $addr=sockaddr_in(80, inet_aton($ip)); connect $S, $addr or die "Can't open connection: $!\n"; send $S, "GET / HTTP/1.0\r\n\r\n", 0; print <$S>; close $S; YAPC::Russia 2009


Слайд 9

Sniffer под Unix без использования libpcap #!/usr/bin/perl #use Socket; use constant PF_PACKET => 17; use constant SOCK_PACKET => 10; use constant ETH_P_ALL => 0x0003; socket (SOCKET, PF_PACKET, SOCK_PACKET, ETH_P_ALL) or die “Socket error: $!\n"; while (){ recv (SOCKET, $buf, 1514, 0); # читаем пакет print unpack ("H*", $buf), "\n\n"; # выводим его в формате hex } YAPC::Russia 2009


Слайд 10

Отправка UDP пакета через raw socket #!/usr/local/bin/perl use Socket; use constant IPPROTO_RAW => 255; $iaddr = inet_aton ('192.168.139.1'); $paddr = sockaddr_in (80, $iaddr); #80 - порт назначения socket(SOCKET, PF_INET, SOCK_RAW, IPPROTO_RAW) or die “Socket error: $!\n"; … YAPC::Russia 2009


Слайд 11

Отправка UDP пакета через raw socket $packet .= pack("C", 69); $packet .= pack ("H2", '00'); $packet .= pack ("n", 28); $packet .= pack ("n", 0); $packet .= pack ("H4", '4000'); $packet .= pack ("C", 64); $packet .= pack ("C", getprotobyname('udp')); $packet .= pack ("n", 0); $source_ip = '207.46.197.32'; $result_source_ip .= pack ("C", $_) for (split('\.', $source_ip)); $packet .= $result_source_ip; $destination_ip = '192.168.139.1'; $result_destination_ip .= pack ("C", $_) for (split('\.', $destination_ip)); $packet .= $result_destination_ip; $packet .= pack ("n", 25); $packet .= pack ("n", 80); $packet .= pack ("n", 8); $packet .= pack ("H4", '0000'); YAPC::Russia 2009


Слайд 12

Отправка пакетов через packet socket С какого интерфейса происходит отправка пакета: struct sockaddr { sa_family_t sa_family; //семейство протоколов char sa_data[14]; //14 байтов на описание этого семейства... }; YAPC::Russia 2009


Слайд 13

Отправка пакетов через packet socket Пример заполнения структуры и отправки пакета: $addr = PF_PACKET; #семейство $iface = "eth0"; #используемое устройство $socket = pack ('Sa14', $addr, $iface); #упаковываем все это в структуру send(SOCKET, $packet, 0, $socket) or die "Can't send packet:$!\n"; YAPC::Russia 2009


Слайд 14

Неблокирующий сокет на Perl (Windows) … my ($win, $ein); my $addr=sockaddr_in(86, inet_aton("10.0.0.253")); socket SOCK, PF_INET, SOCK_STREAM, 0 or die "Socket: $!\n"; ioctl(SOCK, 0x8004667e, pack("I", 1)); connect SOCK, $addr; vec ($win = '',fileno(SOCK),1)=1; $ein=$win; my $nfound = select (undef, $win, $ein, 1); … YAPC::Russia 2009


Слайд 15

Perl в хэке и хэки в Perl СПАСИБО ЗА ВНИМАНИЕ! Илья Зеленчук (ilya@hackerdom.ru) YAPC::Russia 2009


Слайд 16

Запустить netcat, повесить bash, cat’нуть файл, grep’нуть по регвыру... Или лучше установить Perl? K.I.S.S. YAPC::Russia 2009


×

HTML:





Ссылка: