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

Содержание

Слайд 2

Игры

CTF (Capture the Flag)
ICFP
EACP (Extremely Advanced
Computer Programming)

YAPC::Russia 2009

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

Слайд 3

Perl в хэке

Простоя работа с сетью;
Удобен при написании PoC;
Обфускация

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

YAPC::Russia 2009

Слайд 4

Пример игрового сервиса

YAPC::Russia 2009

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

Слайд 5

Простой веб клиент

YAPC::Russia 2009

;

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

Слайд 6

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

Perl2C ... (3474 строки) xpv_list[79].xpv_pv = savepvn("Hello, MayPerl\n", 15); { SV **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

Слайд 7

Perl2bin

YAPC::Russia 2009

Perl2bin YAPC::Russia 2009

Слайд 8

Хэки в Perl

Простой сокет в Perl’e;
Sniffer под UNIX без использования

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

YAPC::Russia 2009

Слайд 9

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

Perl sockets #!/usr/bin/perl use Socket; socket $S, PF_INET, SOCK_STREAM, getprotobyname('tcp‘); my $addr=sockaddr_in(80,
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

Слайд 10

Sniffer под Unix
без использования libpcap

#!/usr/bin/perl
#use Socket;
use constant PF_PACKET => 17;
use constant

Sniffer под Unix без использования libpcap #!/usr/bin/perl #use Socket; use constant PF_PACKET
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

Слайд 11

Отправка UDP пакета
через raw socket

#!/usr/local/bin/perl
use Socket;
use constant IPPROTO_RAW => 255;
$iaddr =

Отправка UDP пакета через raw socket #!/usr/local/bin/perl use Socket; use constant IPPROTO_RAW
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

Слайд 12

Отправка UDP пакета
через raw socket

$packet .= pack("C", 69);
$packet .= pack ("H2",

Отправка UDP пакета через raw socket $packet .= pack("C", 69); $packet .=
'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

Слайд 13

Отправка пакетов
через packet socket

С какого интерфейса происходит отправка пакета:
struct sockaddr {
sa_family_t

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

YAPC::Russia 2009

Слайд 14

Отправка пакетов
через packet socket

Пример заполнения структуры и отправки пакета:
$addr = PF_PACKET;

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

YAPC::Russia 2009

Слайд 15

Неблокирующий сокет
на Perl (Windows)


my ($win, $ein);
my $addr=sockaddr_in(86, inet_aton("10.0.0.253"));
socket SOCK, PF_INET, SOCK_STREAM,

Неблокирующий сокет на Perl (Windows) … my ($win, $ein); my $addr=sockaddr_in(86, inet_aton("10.0.0.253"));
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

Слайд 16

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

СПАСИБО ЗА ВНИМАНИЕ!

Илья Зеленчук ([email protected])

YAPC::Russia 2009

Perl в хэке и хэки в Perl СПАСИБО ЗА ВНИМАНИЕ! Илья Зеленчук (ilya@hackerdom.ru) YAPC::Russia 2009
Имя файла: Докладчик:-Илья-Зеленчук,-Perlсlub-УрГУ-(г.-Екатеринбург).pptx
Количество просмотров: 1277
Количество скачиваний: 1