Cyfroteka.pl

klikaj i czytaj online

Cyfro
Czytomierz
00030 005324 19042154 na godz. na dobę w sumie
Gray Hat C#. Język C# w kontroli i łamaniu zabezpieczeń - książka
Gray Hat C#. Język C# w kontroli i łamaniu zabezpieczeń - książka
Autor: Liczba stron: 336
Wydawca: Helion Język publikacji: polski
ISBN: 978-83-283-4063-3 Data wydania:
Lektor:
Kategoria: ebooki >> komputery i informatyka >> programowanie >> .net - programowanie
Porównaj ceny (książka, ebook (-35%), audiobook).

C# to nowoczesny język programowania, który został od podstaw zaprojektowany jako obiektowy. Ta dojrzała technologia jest często wybierana przez twórców oprogramowania, również tego służącego do pokonywania zabezpieczeń systemów. Dzięki temu, że platforma .NET jest oprogramowaniem open source, w C# można pisać kod, który bez problemu będzie działał w każdym systemie operacyjnym. Co prawda język ten jest prosty i łatwy do nauczenia się, jednak dopiero gruntowna znajomość C# umożliwia efektywne tworzenie narzędzi związanych z bezpieczeństwem, służących choćby do wyszukiwania luk w infrastrukturze czy prowadzenia testów penetracyjnych.

Ta książka jest przeznaczona dla specjalistów ds. bezpieczeństwa, którzy chcą korzystać z języka C# do takich zadań jak fuzzowanie, skanowanie w poszukiwaniu luk zabezpieczeń i analiza złośliwego oprogramowania. Opisano tu zarówno podstawy języka C#, jak i jego dość zaawansowane funkcje. Przedstawiono szereg bibliotek dostępnych dla tego języka. Pokazano, jak pisać kod wyszukujący luki w zabezpieczeniach i jak tworzyć eksploity. Przedstawiono sposoby korzystania z takich narzędzi jak Nessus, sqlmap i Cuckoo Sandbox. Dzięki technikom zaprezentowanym w książce administrator bezpieczeństwa bez problemu zautomatyzuje nawet najbardziej żmudne codzienne zadania!

W tej książce między innymi:

C#. Sprawdź swój system zabezpieczeń!


Brandon Perry jest programistą i gorącym zwolennikiem idei open source. Odkąd pojawiło się środowisko Mono, pisze aplikacje w języku C#. Tworzy też moduły dla frameworka Metasploit, analizuje pliki binarne i zarządza ciekawymi projektami (https://volatileminds.net/). Fascynuje się badaniami nad bezpieczeństwem systemów informatycznych. Chętnie dzieli się swoją wiedzą, pisze książki i pomaga innym w tworzeniu solidniejszego oprogramowania.

Znajdź podobne książki Ostatnio czytane w tej kategorii

Darmowy fragment publikacji:

Tytuł oryginału: Gray Hat C#: Creating and Automating Security Tools Tłumaczenie: Radosław Meryk ISBN: 978-83-283-4063-3 Copyright © 2017 by Brandon Perry. Title of English-language original: Gray Hat C#: Creating and Automating Security Tools, ISBN 978-1-59327-759-8, published by No Starch Press. Polish-language edition copyright © 2018 by Helion S.A. All rights reserved. All rights reserved. No part of this book may be reproduced or transmitted in any form or by any means, electronic or mechanical, including photocopying, recording or by any information storage retrieval system, without permission from the Publisher. Wszelkie prawa zastrzeżone. Nieautoryzowane rozpowszechnianie całości lub fragmentu niniejszej publikacji w jakiejkolwiek postaci jest zabronione. Wykonywanie kopii metodą kserograficzną, fotograficzną, a także kopiowanie książki na nośniku filmowym, magnetycznym lub innym powoduje naruszenie praw autorskich niniejszej publikacji. Wszystkie znaki występujące w tekście są zastrzeżonymi znakami firmowymi bądź towarowymi ich właścicieli. Autor oraz Wydawnictwo HELION dołożyli wszelkich starań, by zawarte w tej książce informacje były kompletne i rzetelne. Nie biorą jednak żadnej odpowiedzialności ani za ich wykorzystanie, ani za związane z tym ewentualne naruszenie praw patentowych lub autorskich. Autor oraz Wydawnictwo HELION nie ponoszą również żadnej odpowiedzialności za ewentualne szkody wynikłe z wykorzystania informacji zawartych w książce. Wydawnictwo HELION ul. Kościuszki 1c, 44-100 GLIWICE tel. 32 231 22 19, 32 230 98 63 e-mail: helion@helion.pl WWW: http://helion.pl (księgarnia internetowa, katalog książek) Pliki z przykładami omawianymi w książce można znaleźć pod adresem: ftp://ftp.helion.pl/przyklady/greyha.zip Drogi Czytelniku! Jeżeli chcesz ocenić tę książkę, zajrzyj pod adres http://helion.pl/user/opinie/greyha Możesz tam wpisać swoje uwagi, spostrzeżenia, recenzję. Printed in Poland. • Kup książkę • Poleć książkę • Oceń książkę • Księgarnia internetowa • Lubię to! » Nasza społeczność Spis tre(cid:258)ci S(cid:146)OWO WST(cid:125)PNE ..................................................................................... 11 PRZEDMOWA ........................................................................................... 15 Dlaczego nale(cid:285)y ufa(cid:202) Mono? ..................................................................................................16 Dla kogo jest ta ksi(cid:200)(cid:285)ka? .........................................................................................................16 Organizacja tej ksi(cid:200)(cid:285)ki ............................................................................................................17 Podzi(cid:218)kowania .......................................................................................................................19 Ostatnia uwaga .......................................................................................................................19 1 B(cid:146)YSKAWICZNY KURS J(cid:125)ZYKA C# ......................................................... 21 Wybór (cid:258)rodowiska IDE ..........................................................................................................22 Prosty przyk(cid:239)ad ......................................................................................................................22 Wprowadzenie do klas i interfejsów ......................................................................................24 Tworzenie klasy .................................................................................................................24 Tworzenie interfejsu ..........................................................................................................25 Tworzenie podklas klasy abstrakcyjnej i implementacja interfejsu ....................................26 Powi(cid:200)zanie wszystkiego z metod(cid:200) Main() ..........................................................................28 Uruchamianie metody Main() ............................................................................................30 Metody anonimowe ...............................................................................................................30 Przypisywanie delegata do metody ....................................................................................30 Aktualizacja klasy Firefighter ..............................................................................................31 Tworzenie argumentów opcjonalnych ...............................................................................31 Aktualizacja metody Main() ................................................................................................32 Uruchomienie zaktualizowanej metody Main() ..................................................................33 Integracja z bibliotekami natywnymi ......................................................................................34 Podsumowanie .......................................................................................................................35 Poleć książkęKup książkę 2 FUZZING. WYKORZYSTANIE XSS ORAZ INIEKCJI SQL ........................... 37 Konfigurowanie maszyny wirtualnej ...................................................................................... 38 Dodawanie sieci wirtualnej „tylko do hosta” ..................................................................... 38 Tworzenie maszyny wirtualnej .......................................................................................... 39 Uruchamianie maszyny wirtualnej z obrazu ISO z systemem BadStore ........................... 39 Iniekcje SQL .......................................................................................................................... 41 Skrypty krzy(cid:285)owe .................................................................................................................. 43 Fuzzing (cid:285)(cid:200)da(cid:241) GET z wykorzystaniem fuzzera mutacyjnego ................................................ 45 Preparowanie parametrów i testowanie luk ..................................................................... 46 Budowanie (cid:285)(cid:200)da(cid:241) HTTP .................................................................................................... 47 Testowanie fuzzowanego kodu ......................................................................................... 48 Fuzzowanie (cid:285)(cid:200)da(cid:241) POST ....................................................................................................... 49 Pisanie fuzzera (cid:285)(cid:200)dania POST ............................................................................................ 50 Rozpoczyna si(cid:218) fuzzing ...................................................................................................... 52 Fuzzowanie parametrów ................................................................................................... 54 Fuzzowanie danych w formacie JSON .................................................................................. 56 Konfigurowanie wra(cid:285)liwego urz(cid:200)dzenia ............................................................................ 56 Przechwytywanie wra(cid:285)liwych (cid:285)(cid:200)da(cid:241) JSON ....................................................................... 56 Tworzenie fuzzera JSON .................................................................................................. 57 Testowanie fuzzera JSON ................................................................................................. 62 Wykorzystywanie iniekcji SQL .............................................................................................. 63 Wykorzystywanie eksploita bazuj(cid:200)cego na instrukcji UNION r(cid:218)cznie ............................. 64 Wykorzystywanie eksploita bazuj(cid:200)cego na instrukcji UNION programowo .................... 66 Wykorzystywanie luk SQL typu Boolean-blind ................................................................. 70 Podsumowanie ...................................................................................................................... 79 3 FUZZOWANIE PUNKTÓW KO(cid:148)COWYCH SOAP ...................................... 81 Konfiguracja wra(cid:285)liwych punktów ko(cid:241)cowych ..................................................................... 82 Parsowanie pliku WSDL ........................................................................................................ 83 Tworzenie klasy dla dokumentu WSDL ............................................................................ 84 Podstawowe metody parsowania ..................................................................................... 85 Klasy dla typu SOAP i parametrów ................................................................................... 87 Tworzenie klasy SoapMessage definiuj(cid:200)cej przesy(cid:239)ane dane ............................................. 90 Implementacja klasy reprezentuj(cid:200)cej cz(cid:218)(cid:258)ci komunikatu .................................................. 90 Definiowanie operacji portu za pomoc(cid:200) klasy SoapPortType ........................................... 91 Implementacja klasy zawieraj(cid:200)cej operacje na porcie ....................................................... 93 Definiowanie protoko(cid:239)ów u(cid:285)ywanych w powi(cid:200)zaniach SOAP .......................................... 93 Kompilacja listy operacji w(cid:218)z(cid:239)ów potomnych ................................................................... 95 Znajdowanie us(cid:239)ug SOAP w portach ................................................................................. 96 Automatyczne fuzzowanie punktów ko(cid:241)cowych SOAP pod k(cid:200)tem wra(cid:285)liwo(cid:258)ci na iniekcje SQL ............................................................................ 98 Fuzzowanie pojedynczych us(cid:239)ug SOAP ............................................................................. 99 Fuzzowanie portów SOAP HTTP POST ........................................................................ 103 4 S p i s t r e (cid:258) c i Poleć książkęKup książkę Fuzzowanie portu XML us(cid:239)ugi SOAP ...............................................................................106 Uruchomienie fuzzera ......................................................................................................110 Podsumowanie .....................................................................................................................111 4 PISANIE (cid:146)ADUNKÓW TYPU CONNECT-BACK, BIND I METASPLOIT ... 113 Tworzenie (cid:239)adunku Connect-Back ......................................................................................114 Strumie(cid:241) sieci ...................................................................................................................114 Uruchomienie polecenia ..................................................................................................116 Uruchomienie (cid:239)adunku .....................................................................................................117 Wi(cid:200)zanie (cid:239)adunku .................................................................................................................118 Odbieranie danych, uruchamianie polece(cid:241) i zwracanie wyników ....................................119 Uruchamianie polece(cid:241) ze strumienia ...............................................................................120 Wykorzystanie protoko(cid:239)u UDP do ataku na sie(cid:202) .................................................................121 Kod dla komputera docelowego ......................................................................................122 Kod napastnika .................................................................................................................125 Uruchamianie (cid:239)adunków typu Metasploit x86 i x86-64 za pomoc(cid:200) j(cid:218)zyka C# ...................128 Konfigurowanie frameworka Metasploit ..........................................................................128 Generowanie (cid:239)adunków ...................................................................................................130 Wykonywanie natywnych (cid:239)adunków systemu Windows jako kodu niezarz(cid:200)dzanego .....131 Uruchamianie natywnych (cid:239)adunków w systemie Linux ....................................................133 Podsumowanie .....................................................................................................................137 5 AUTOMATYZACJA SKANERA NESSUS .................................................. 139 REST i API systemu Nessus ..................................................................................................140 Klasa NessusSession .............................................................................................................141 Wykonywanie (cid:285)(cid:200)da(cid:241) HTTP .............................................................................................142 Wylogowanie i sprz(cid:200)tanie ................................................................................................144 Testowanie klasy NessusSession ......................................................................................145 Klasa NessusManager ...........................................................................................................146 Wykonywanie skanowania Nessus .......................................................................................148 Podsumowanie .....................................................................................................................150 6 AUTOMATYZACJA NEXPOSE ................................................................ 153 Instalacja Nexpose ...............................................................................................................154 Aktywacja i testowanie .....................................................................................................155 (cid:191)argon Nexpose ..............................................................................................................156 Klasa NexposeSession ..........................................................................................................157 Metoda ExecuteCommand() ............................................................................................158 Wylogowanie i zniszczenie sesji .......................................................................................161 Znajdowanie wersji interfejsu API ....................................................................................162 Korzystanie z Nexpose API ..............................................................................................163 Klasa NexposeManager ........................................................................................................163 S p i s t r e (cid:258) c i 5 Poleć książkęKup książkę Automatyzacja skanowania s(cid:239)abych punktów ...................................................................... 165 Tworzenie lokalizacji z aktywami .................................................................................... 165 Rozpoczynanie skanowania ............................................................................................. 166 Tworzenie raportu na temat lokalizacji w formacie PDF i usuwanie lokalizacji .................. 167 Kompletowanie rozwi(cid:200)zania ............................................................................................... 168 Rozpocz(cid:218)cie skanowania ................................................................................................. 169 Generowanie raportu i usuwanie lokalizacji .................................................................... 170 Uruchamianie automatyzacji ........................................................................................... 170 Podsumowanie .................................................................................................................... 171 7 AUTOMATYZACJA OPENVAS ............................................................... 173 Instalacja systemu OpenVAS ............................................................................................... 173 Budowanie klas .................................................................................................................... 174 Klasa OpenVaSSession ......................................................................................................... 175 Uwierzytelnianie na serwerze OpenVAS ........................................................................ 176 Tworzenie metody do uruchamiania polece(cid:241) OpenVAS ................................................ 177 Odczytywanie komunikatu z serwera ............................................................................. 177 Konfiguracja strumienia TCP do wysy(cid:239)ania i odbierania polece(cid:241) .................................... 178 Walidacja certyfikatów i od(cid:258)miecanie .............................................................................. 179 Odczytywanie wersji OpenVAS ...................................................................................... 180 Klasa OpenVASManager ...................................................................................................... 181 Pobieranie konfiguracji skanowania i tworzenie celów ................................................... 182 Opakowanie automatyzacji ............................................................................................. 186 Uruchamianie automatyzacji ........................................................................................... 187 Podsumowanie .................................................................................................................... 187 8 AUTOMATYZOWANIE PROGRAMU CUCKOO SANDBOX ..................... 189 Konfigurowanie Cuckoo Sandbox ....................................................................................... 190 R(cid:218)czne uruchamianie API systemu Cuckoo Sandbox .......................................................... 190 Uruchamianie API ............................................................................................................ 191 Sprawdzanie stanu (cid:258)rodowiska Cuckoo .......................................................................... 192 Tworzenie klasy CuckooSession ......................................................................................... 193 Metody ExecuteCommand() do obs(cid:239)ugi (cid:285)(cid:200)da(cid:241) HTTP .................................................... 194 Tworzenie wielocz(cid:218)(cid:258)ciowych danych HTTP za pomoc(cid:200) metody GetMultipartFormData() ................................................................. 196 Przetwarzanie danych z pliku za pomoc(cid:200) klasy FileParameter ....................................... 198 Testowanie klasy CuckooSession i klas pomocniczych ................................................... 199 Klasa CuckooManager ......................................................................................................... 201 Metoda CreateTask() ...................................................................................................... 201 Szczegó(cid:239)y zadania i metody tworzenia raportów ............................................................ 203 Tworzenie abstrakcyjnej klasy Task ................................................................................ 204 Sortowanie i tworzenie ró(cid:285)nych typów klas ................................................................... 205 6 S p i s t r e (cid:258) c i Poleć książkęKup książkę Po(cid:239)(cid:200)czenie elementów ze sob(cid:200) ............................................................................................207 Testowanie aplikacji .............................................................................................................209 Podsumowanie .....................................................................................................................211 9 AUTOMATYZACJA SQLMAP .................................................................. 213 Uruchamianie sqlmap ...........................................................................................................214 Interfejs API REST programu sqlmap ...............................................................................215 Testowanie API programu sqlmap za pomoc(cid:200) curl .........................................................216 Tworzenie sesji dla programu sqlmap ..................................................................................220 Tworzenie metody do wykonywania (cid:285)(cid:200)da(cid:241) GET ............................................................221 Wykonywanie (cid:285)(cid:200)dania POST ...........................................................................................222 Testowanie klasy obs(cid:239)ugi sesji ..........................................................................................223 Klasa SqlmapManager ...........................................................................................................225 Lista opcji sqlmap .............................................................................................................227 Tworzenie metod realizuj(cid:200)cych skanowanie ...................................................................229 Nowa metoda Main() .......................................................................................................230 Raport ze skanowania ..........................................................................................................231 Automatyzowanie pe(cid:239)nego skanu sqlmap ............................................................................232 Integracja sqlmap z fuzzerem SOAP ....................................................................................234 Dodanie obs(cid:239)ugi (cid:285)(cid:200)da(cid:241) GET do fuzzera SOAP ................................................................235 Dodanie obs(cid:239)ugi (cid:285)(cid:200)da(cid:241) POST do programu sqlmap ........................................................236 Wywo(cid:239)ywanie nowych metod ..........................................................................................238 Podsumowanie .....................................................................................................................240 10 AUTOMATYZACJA CLAMAV ................................................................. 241 Instalacja programu ClamAV ................................................................................................242 Natywna biblioteka ClamaAV kontra demon sieciowy clamd .............................................243 Automatyzacja z wykorzystaniem natywnych bibliotek ClamAV .........................................244 Pomocnicze enumeracje i klasy .......................................................................................244 Dost(cid:218)p do funkcji natywnej biblioteki ClamAV ...............................................................247 Kompilacja silnika programu ClamAV ..............................................................................248 Skanowanie plików ...........................................................................................................250 Sprz(cid:200)tanie .........................................................................................................................252 Testowanie programu przez skanowanie pliku EICAR ....................................................252 Automatyzacja z wykorzystaniem demona clamd ...............................................................254 Instalacja demona clamd ...................................................................................................254 Uruchamianie demona clamd ...........................................................................................255 Tworzenie klasy obs(cid:239)ugi sesji dla demona clamd .............................................................255 Tworzenie klasy mened(cid:285)era demona clamd ....................................................................257 Testowanie z wykorzystaniem demona clamd ................................................................258 Podsumowanie .....................................................................................................................259 S p i s t r e (cid:258) c i 7 Poleć książkęKup książkę 11 AUTOMATYZACJA METASPLOIT .......................................................... 261 Uruchamianie serwera RPC ................................................................................................ 262 Instalacja Metasploitable ...................................................................................................... 263 Pobranie biblioteki MSGPACK ............................................................................................ 264 Instalowanie mened(cid:285)era pakietów NuGet w (cid:258)rodowisku MonoDevelop ...................... 264 Instalacja biblioteki MSGPACK ........................................................................................ 265 Dodanie referencji do biblioteki MSGPACK ................................................................... 266 Klasa MetasploitSession ....................................................................................................... 267 Tworzenie metody Execute() dla (cid:285)(cid:200)da(cid:241) HTTP i interakcje z bibliotek(cid:200) MSGPACK ...... 268 Przekszta(cid:239)canie danych odpowiedzi z formatu MSGPACK ............................................. 270 Testowanie klasy sesji .......................................................................................................... 272 Klasa MetasploitManager ..................................................................................................... 273 Scalamy komponenty w ca(cid:239)o(cid:258)(cid:202) ............................................................................................ 275 Uruchamianie eksploita ................................................................................................... 276 Interakcje z pow(cid:239)ok(cid:200) ....................................................................................................... 277 Pobieranie pow(cid:239)ok .......................................................................................................... 278 Podsumowanie .................................................................................................................... 279 12 AUTOMATYZACJA ARACHNI ............................................................... 281 Instalacja Arachni ................................................................................................................. 281 Interfejs API REST systemu Arachni .................................................................................... 282 Tworzenie klasy ArachniHTTPSession ............................................................................ 284 Tworzenie klasy ArachniHTTPManager ......................................................................... 285 Po(cid:239)(cid:200)czenie klas sesji i mened(cid:285)era ........................................................................................ 286 RPC systemu Arachni .......................................................................................................... 287 R(cid:218)czne uruchamianie mechanizmu RPC ......................................................................... 288 Klasa ArachniRPCSession ................................................................................................ 290 Metody pomocnicze operacji ExecuteCommand() ......................................................... 292 Metoda ExecuteCommand() ........................................................................................... 293 Klasa ArachniRPCManager .............................................................................................. 296 Scalamy komponenty w ca(cid:239)o(cid:258)(cid:202) ............................................................................................ 297 Podsumowanie .................................................................................................................... 300 13 DEKOMPILACJA I IN(cid:191)YNIERIA WSTECZNA ZARZ(cid:107)DZANYCH ZESTAWÓW .............................................................. 301 Dekompilacja zestawów zarz(cid:200)dzanych ............................................................................... 302 Testowanie dekompilatora .................................................................................................. 305 Wykorzystanie narz(cid:218)dzia monodis do analizowania zestawu ............................................. 306 Podsumowanie .................................................................................................................... 309 8 S p i s t r e (cid:258) c i Poleć książkęKup książkę 14 CZYTANIE GA(cid:146)(cid:125)ZI REJESTRU W TRYBIE OFFLINE ................................. 311 Struktura ga(cid:239)(cid:218)zi rejestru .......................................................................................................312 Pobieranie ga(cid:239)(cid:218)zi rejestru .....................................................................................................313 Czytanie ga(cid:239)(cid:218)zi rejestru ........................................................................................................314 Klasa do parsowania pliku ga(cid:239)(cid:218)zi rejestru .........................................................................315 Tworzenie klasy reprezentuj(cid:200)cej klucze w(cid:218)z(cid:239)ów ............................................................316 Implementacja klasy do przechowywania kluczy warto(cid:258)ci ..............................................321 Testowanie biblioteki ...........................................................................................................322 Zrzucanie klucza Boot ..........................................................................................................323 Metoda GetBootKey() ......................................................................................................323 Metoda GetValueKey() .....................................................................................................325 Metoda GetNodeKey() ....................................................................................................325 Metoda StringToByteArray() ............................................................................................326 Uzyskanie klucza rozruchowego ......................................................................................327 Weryfikacja klucza rozruchowego ...................................................................................327 Podsumowanie .....................................................................................................................328 SKOROWIDZ .......................................................................................... 331 S p i s t r e (cid:258) c i 9 Poleć książkęKup książkę 10 S p i s t r e (cid:258) c i Poleć książkęKup książkę 2 Fuzzing. Wykorzystanie XSS oraz iniekcji SQL W PRZECIWIE(cid:148)STWIE DO INNYCH J(cid:125)ZYKÓW, TAKICH JAK RUBY, PYTHON CZY PERL, PROGRAMY NAPISANE W C# MOG(cid:107) BY(cid:109) DOMY(cid:165)LNIE URUCHAMIANE NA WSZYSTKICH NOWOCZESNYCH MASZYNACH z systemem Windows. Co wi(cid:218)cej, uruchomienie programów napisanych w C# w systemach Linux, takich jak Ubuntu, Fedora lub inne, nie mo(cid:285)e by(cid:202) (cid:239)atwiejsze, zw(cid:239)aszcza (cid:285)e wi(cid:218)kszo(cid:258)(cid:202) mened(cid:285)erów pakietów w systemach Linux, takich jak apt lub Dim, jest w stanie bez trudu zainstalowa(cid:202) framework Mono. Stawia to j(cid:218)zyk C# w lepszej pozycji w porównaniu z wi(cid:218)kszo- (cid:258)ci(cid:200) innych j(cid:218)zyków pod wzgl(cid:218)dem potrzeb obs(cid:239)ugi wielu platform. Dodatkow(cid:200) korzy(cid:258)(cid:202) stanowi (cid:239)atwy dost(cid:218)p do obszernej biblioteki standardowej. Podsumowu- j(cid:200)c, C# oraz biblioteki Mono/.NET to kusz(cid:200)cy framework dla wszystkich, którzy chc(cid:200) szybko i (cid:239)atwo pisa(cid:202) wieloplatformowe narz(cid:218)dzia. W tym rozdziale napiszemy fuzzer mutacyjny, który mo(cid:285)na wykorzysta(cid:202) w przy- padku, gdy znamy dobre dane wej(cid:258)ciowe w postaci adresu URL lub (cid:285)(cid:200)dania HTTP (fuzzer generacyjny napiszemy w rozdziale 3.). Gdy nauczymy si(cid:218) pos(cid:239)ugiwa(cid:202) fuzze- rem do wyszukiwania s(cid:239)abych punktów XSS i iniekcji SQL, dowiemy si(cid:218), jak wykorzysta(cid:202) iniekcj(cid:218) SQL do odczytania z bazy danych skrótów nazw u(cid:285)ytkow- ników i hase(cid:239). Poleć książkęKup książkę Aby znale(cid:283)(cid:202) i wykorzysta(cid:202) s(cid:239)abe punkty dla iniekcji SQL i XSS, skorzystamy z podstawowych bibliotek obs(cid:239)ugi HTTP w celu programowego tworzenia (cid:285)(cid:200)da(cid:241) HTTP w j(cid:218)zyku C#. Najpierw napiszemy prosty fuzzer, który parsuje adres URL i zaczyna fuzzing parametrów HTTP przy u(cid:285)yciu (cid:285)(cid:200)da(cid:241) GET i POST. Nast(cid:218)pnie opracujemy pe(cid:239)ne eksploity dla s(cid:239)abych punktów iniekcji SQL. U(cid:285)yjemy w nich starannie spreparo- wanych (cid:285)(cid:200)da(cid:241) HTTP w celu wyodr(cid:218)bnienia z bazy danych informacji o u(cid:285)ytkowniku. Narz(cid:218)dzia opracowane w tym rozdziale przetestujemy na niewielkiej dystry- bucji Linuksa o nazwie BadStore (dost(cid:218)pnej w witrynie VulnHub, pod adresem https://www.vulnhub.com/). BadStore zosta(cid:239) specjalnie zaprojektowany tak, aby zawiera(cid:239) luki w zabezpieczeniach. Jest wra(cid:285)liwy (mi(cid:218)dzy innymi) na iniekcje SQL i ataki XSS. Po pobraniu obrazu ISO systemu BadStore z witryny VulnHub u(cid:285)yjemy darmowego oprogramowania wirtualizacji VirtualBox do stworzenia ma- szyny wirtualnej, na której przeprowadzimy rozruch systemu BadStore z obrazu ISO. W ten sposób b(cid:218)dziemy mogli przeprowadzi(cid:202) atak bez stwarzania niebezpie- cze(cid:241)stwa dla w(cid:239)asnego systemu hosta. Konfigurowanie maszyny wirtualnej Aby zainstalowa(cid:202) VirtualBox w systemach Linux, Windows lub OS X, nale(cid:285)y pobra(cid:202) oprogramowanie VirtualBox pod adresem https://www.virtualbox.org/ (instalacja nie powinna sprawi(cid:202) k(cid:239)opotów; wystarczy post(cid:218)powa(cid:202) zgodnie z najnowszymi wskazówkami w witrynie). Maszyny wirtualne (VM) pozwalaj(cid:200) na emulacj(cid:218) sys- temów komputerowych z u(cid:285)yciem fizycznego komputera. Mo(cid:285)na je wykorzysta(cid:202) do (cid:239)atwego tworzenia wra(cid:285)liwych systemów oprogramowania (takich jak te, których b(cid:218)dziemy u(cid:285)ywa(cid:202) w niniejszej ksi(cid:200)(cid:285)ce) i zarz(cid:200)dzania nimi. Dodawanie sieci wirtualnej „tylko do hosta” Przed w(cid:239)a(cid:258)ciwym skonfigurowaniem maszyny wirtualnej mo(cid:285)e by(cid:202) konieczne utwo- rzenie sieci wirtualnej w trybie „tylko do hosta”. Sie(cid:202) „tylko do hosta” umo(cid:285)liwia komunikacj(cid:218) wy(cid:239)(cid:200)cznie pomi(cid:218)dzy maszyn(cid:200) wirtualn(cid:200) a systemem hosta. Aby skon- figurowa(cid:202) tak(cid:200) sie(cid:202), wykonaj nast(cid:218)puj(cid:200)ce czynno(cid:258)ci: 1. Kliknij File/Preferences. Otworzy si(cid:218) okno VirtualBox — Preferences. W systemie OS X wybierz VirtualBox/Preferences. 2. Kliknij obszar Network po lewej stronie. Powiniene(cid:258) zobaczy(cid:202) dwie zak(cid:239)adki: NAT Networks i Host-only Networks. W systemie OS X kliknij zak(cid:239)adk(cid:218) Network w górnej cz(cid:218)(cid:258)ci okna dialogowego Settings. 3. Kliknij zak(cid:239)adk(cid:218) Host-only Networks, a nast(cid:218)pnie przycisk Add host-only network (Ins) po prawej stronie. Ten przycisk ma posta(cid:202) ikony karty sieciowej ze znakiem plus. W wyniku klikni(cid:218)cia przycisku powinna stworzy(cid:202) si(cid:218) sie(cid:202) o nazwie vboxnet0. 38 R o z d z i a (cid:239) 2 Poleć książkęKup książkę 4. Kliknij przycisk Edit host-only network (Space) po prawej stronie. Ten przycisk ma ikon(cid:218) (cid:258)rubokr(cid:218)ta. 5. W oknie dialogowym, które si(cid:218) otworzy, kliknij zak(cid:239)adk(cid:218) DHCP Server. Zaznacz pole Enable Server. W polu Server Address wpisz adres IP 192.168.56.2. W polu Server Mask wpisz 255.255.255.0. W polu Lower Address Bound wpisz 192.168.56.100. W polu Upper Address Bound wpisz 192.168.56.199. 6. Kliknij przycisk OK, aby zapisa(cid:202) zmiany w sieci „tylko do hosta”. 7. Kliknij przycisk OK ponownie, aby zamkn(cid:200)(cid:202) okno dialogowe Settings. Tworzenie maszyny wirtualnej Po zainstalowaniu programu VirtualBox i skonfigurowaniu sieci „tylko do hosta” nale(cid:285)y skonfigurowa(cid:202) maszyn(cid:218) wirtualn(cid:200): 1. Kliknij ikon(cid:218) New w lewym górnym rogu, tak jak pokazano na rysunku 2.1. 2. W oknie dialogowym do wyboru nazwy i typu systemu operacyjnego wybierz z rozwijanego menu opcj(cid:218) Other Linux (32-bit). 3. Kliknij Continue. Powinien wy(cid:258)wietli(cid:202) si(cid:218) ekran umo(cid:285)liwiaj(cid:200)cy skonfigurowanie na maszynie wirtualnej pami(cid:218)ci RAM. Ustaw ilo(cid:258)(cid:202) pami(cid:218)ci RAM na 512 MB, a nast(cid:218)pnie kliknij Continue (fuzzing i korzystanie z eksploitów na serwerze WWW mog(cid:200) si(cid:218) wi(cid:200)za(cid:202) z u(cid:285)yciem przez maszyn(cid:218) wirtualn(cid:200) du(cid:285)ej ilo(cid:258)ci pami(cid:218)ci RAM). 4. Po wy(cid:258)wietleniu pytania o utworzenie nowego wirtualnego dysku twardego kliknij Do not add a virtual hard drive, a nast(cid:218)pnie kliknij Create (system BadStore uruchomimy z obrazu ISO). W lewym panelu okna VirtualBox Manager powiniene(cid:258) zobaczy(cid:202) utworzon(cid:200) maszyn(cid:218) wirtualn(cid:200), tak jak pokazano na rysunku 2.1. Uruchamianie maszyny wirtualnej z obrazu ISO z systemem BadStore Po utworzeniu maszyny wirtualnej nale(cid:285)y ustawi(cid:202) j(cid:200) do rozruchu z obrazu ISO BadStore. Aby to zrobi(cid:202), wykonaj nast(cid:218)puj(cid:200)ce czynno(cid:258)ci: 1. Kliknij prawym przyciskiem myszy maszyn(cid:218) wirtualn(cid:200) w lewym panelu okna VirtualBox Manager, a nast(cid:218)pnie kliknij przycisk Settings. Wy(cid:258)wietli si(cid:218) okno dialogowe z bie(cid:285)(cid:200)cymi ustawieniami dla karty sieciowej, nap(cid:218)du CD-ROM i innych ró(cid:285)nych elementów konfiguracji. 2. W oknie Settings wybierz zak(cid:239)adk(cid:218) Network. W górnej cz(cid:218)(cid:258)ci okna powiniene(cid:258) zobaczy(cid:202) siedem ustawie(cid:241) dla karty sieciowej, w tym NAT (translacja adresów sieci), sie(cid:202) „tylko do hosta” i konfiguracj(cid:218) dla mostu. Wybierz sie(cid:202) „tylko do hosta”, aby przydzieli(cid:202) karcie sieciowej adres IP, który b(cid:218)dzie dost(cid:218)pny tylko z komputera-hosta i nie b(cid:218)dzie dost(cid:218)pny z internetu. F u z z i ng . W y k o r z y s t a ni e X S S o r a z i n i e k c j i S Q L 39 Poleć książkęKup książkę Rysunek 2.1. VirtualBox z maszyn(cid:200) wirtualn(cid:200) dla systemu BadStore 3. Nale(cid:285)y ustawi(cid:202) typ karty sieciowej na rozwijanej li(cid:258)cie Advanced na starszy chipset, poniewa(cid:285) system BadStore bazuje na starszym j(cid:200)drze systemu Linux i niektóre nowsze chipsety nie s(cid:200) obs(cid:239)ugiwane. Wybierz opcj(cid:218) PCnet-FAST III. Teraz skonfigurujemy nap(cid:218)d CD-ROM w celu rozruchu z obrazu ISO na dysku twardym. W tym celu wykonaj nast(cid:218)puj(cid:200)ce czynno(cid:258)ci: 1. W oknie dialogowym Settings wybierz zak(cid:239)adk(cid:218) Storage. Kliknij ikon(cid:218) dysku CD. Wy(cid:258)wietli si(cid:218) menu z opcj(cid:200) Choose a virtual CD/DVD disk file. 2. Kliknij opcj(cid:218) Choose a virtual CD/DVD disk file. Znajd(cid:283) obraz ISO systemu BadStore zapisany w systemie plików i ustaw go jako medium rozruchowe. Maszyna wirtualna powinna by(cid:202) teraz gotowa do uruchomienia. 3. Zapisz ustawienia, klikaj(cid:200)c przycisk OK w prawym dolnym rogu zak(cid:239)adki Settings. Nast(cid:218)pnie, aby przeprowadzi(cid:202) rozruch maszyny wirtualnej, kliknij przycisk Start w lewym górnym rogu okna VirtualBox Manager obok przycisku z ikon(cid:200) ko(cid:239)a z(cid:218)batego Settings. 4. Po uruchomieniu maszyny wirtualnej powinien zosta(cid:202) wy(cid:258)wietlony komunikat: Please press Enter to activate this console. Naci(cid:258)nij Enter i wpisz ifconfig, aby wy(cid:258)wietli(cid:202) konfiguracj(cid:218) IP karty sieciowej, któr(cid:200) uzyska(cid:239)a maszyna wirtualna. 40 R o z d z i a (cid:239) 2 Poleć książkęKup książkę 5. Po uzyskaniu adresu IP maszyny wirtualnej wprowad(cid:283) go w przegl(cid:200)darce WWW. Powiniene(cid:258) zobaczy(cid:202) ekran podobny do przedstawionego na rysunku 2.2. Rysunek 2.2. G(cid:239)ówna strona aplikacji webowej BadStore Iniekcje SQL We wspó(cid:239)czesnych bogatych aplikacjach webowych w celu zapewnienia wysokiej jako(cid:258)ci oraz wygody i komfortu pracy u(cid:285)ytkownika programi(cid:258)ci musz(cid:200) by(cid:202) w stanie przechowywa(cid:202) informacje w tle i o nie odpytywa(cid:202). Zazwyczaj efekt ten uzyskuje si(cid:218) za pomoc(cid:200) bazy danych SQL (ang. Structured Query Language), takiej jak MySQL, PostgreSQL lub Microsoft SQL Server. SQL umo(cid:285)liwia programowe interakcje z baz(cid:200) danych przy u(cid:285)yciu instrukcji SQL — kodu, który informuje baz(cid:218) danych o sposobie tworzenia, odczytywania, aktualizacji lub usuwania danych na podstawie dostarczonych informacji lub kryte- riów. Na przyk(cid:239)ad instrukcja SELECT (cid:285)(cid:200)daj(cid:200)ca od bazy danych podania liczby u(cid:285)ytkowników w hostowanej bazie danych mo(cid:285)e wygl(cid:200)da(cid:202) tak, jak pokazano na listingu 2.1. Listing 2.1. Przyk(cid:239)adowa instrukcja SQL SELECT SELECT COUNT(*) FROM USERS F u z z i ng . W y k o r z y s t a ni e X S S o r a z i n i e k c j i S Q L 41 Poleć książkęKup książkę Czasami programi(cid:258)ci d(cid:200)(cid:285)(cid:200) do tego, by instrukcje SQL by(cid:239)y dynamiczne (tzn. by si(cid:218) zmienia(cid:239)y zgodnie z interakcjami u(cid:285)ytkownika z aplikacj(cid:200) webow(cid:200)). Na przyk(cid:239)ad programista mo(cid:285)e chcie(cid:202) pobra(cid:202) z bazy danych informacje na podstawie okre(cid:258)lonego identyfikatora lub nazwy u(cid:285)ytkownika. Jednak gdy programista tworzy instrukcj(cid:218) SQL przy u(cid:285)yciu danych lub warto- (cid:258)ci dostarczonych przez u(cid:285)ytkownika za po(cid:258)rednictwem niezaufanych klientów, takich jak przegl(cid:200)darki WWW, to je(cid:258)li warto(cid:258)ci u(cid:285)ywane do tworzenia i wykony- wania instrukcji SQL nie zostan(cid:200) prawid(cid:239)owo oczyszczone, wtedy aplikacja jest zagro(cid:285)ona iniekcj(cid:200) SQL. Na przyk(cid:239)ad metoda C# SOAP pokazana na listingu 2.2 mo(cid:285)e zosta(cid:202) u(cid:285)yta do wprowadzenia u(cid:285)ytkownika do bazy danych hostowanej na serwerze WWW. (SOAP — ang. Simple Object Access Protocol — to technolo- gia webowa bazuj(cid:200)ca na XML, wykorzystywana do szybkiego tworzenia interfejsów API aplikacji webowych. SOAP jest popularny w stosowanych w bran(cid:285)y j(cid:218)zykach, takich jak C# i Java). Listing 2.2. Metoda C# SOAP zagro(cid:285)ona iniekcj(cid:200) SQL [WebMethod] public string AddUser(string username, string password) { NpgsqlConnection conn = new NpgsqlConnection(_connstr); conn.Open(); sql = String.Format(sql, username, password); NpgsqlCommand string sql = insert into users values( {0} , {1} ); ; (cid:180)command = new NpgsqlCommand(sql, conn); command.ExecuteNonQuery(); conn.Close(); return Doskonale! ; } i uruchomieniem W tym przypadku programista nie oczy(cid:258)ci(cid:239) warto(cid:258)ci nazwy u(cid:285)ytkownika i has(cid:239)a ci(cid:200)gu instrukcji SQL. W rezultacie przed utworzeniem napastnik mo(cid:285)e zmodyfikowa(cid:202) ci(cid:200)g nazwy u(cid:285)ytkownika lub has(cid:239)a w taki sposób, aby baza danych uruchomi(cid:239)a spreparowany kod SQL. Dzi(cid:218)ki temu napastnik mo(cid:285)e uzyska(cid:202) mo(cid:285)liwo(cid:258)(cid:202) zdalnego uruchomienia polecenia i pe(cid:239)n(cid:200) kontrol(cid:218) nad baz(cid:200) danych. Gdyby wraz z jednym z parametrów zosta(cid:239) umieszczony apostrof (np. user name zamiast username), metoda ExecuteNonQuery() próbowa(cid:239)aby uruchomi(cid:202) nieprawi- d(cid:239)ow(cid:200) kwerend(cid:218) SQL (pokazan(cid:200) na listingu 2.3). W takim przypadku metoda zg(cid:239)o- si(cid:239)aby wyj(cid:200)tek, który zosta(cid:239)by wy(cid:258)wietlony w odpowiedzi HTTP, któr(cid:200) zobaczy(cid:239)by napastnik. Listing 2.3. Ta kwerenda SQL jest nieprawid(cid:239)owa z powodu niesprawdzonych danych dostarczonych przez u(cid:285)ytkownika insert into users values( user name , password ); 42 R o z d z i a (cid:239) 2 Poleć książkęKup książkę Wiele bibliotek oprogramowania, które umo(cid:285)liwiaj(cid:200) dost(cid:218)p do bazy danych, pozwala programistom bezpiecznie u(cid:285)ywa(cid:202) warto(cid:258)ci dostarczonych przez nieza- ufane klienty, takie jak przegl(cid:200)darki WWW, dzi(cid:218)ki kwerendom parametrycznym. Biblioteki te automatycznie oczyszczaj(cid:200) wszelkie przekazywane do kwerendy SQL niezaufane warto(cid:258)ci dzi(cid:218)ki „unieszkodliwianiu” takich znaków, jak apostrofy, nawiasy oraz inne znaki specjalne u(cid:285)ywane w sk(cid:239)adni j(cid:218)zyka SQL. Problemom zwi(cid:200)zanym z iniekcj(cid:200) SQL pomagaj(cid:200) zapobiega(cid:202) kwerendy parametryczne oraz inne rodzaje bibliotek realizuj(cid:200)cych mapowanie obiektowo-relacyjne (ORM) — na przyk(cid:239)ad NHibernate. Warto(cid:258)ci dostarczane przez u(cid:285)ytkownika, takie jak pokazane powy(cid:285)ej, zwykle s(cid:200) u(cid:285)ywane w klauzulach WHERE wewn(cid:200)trz kwerend SQL, tak jak na listingu 2.4. Listing 2.4. Przyk(cid:239)adowa instrukcja SQL SELECT wybieraj(cid:200)ca wiersz dla okre(cid:258)lonego user_id SELECT * FROM users WHERE user_id = 1 Jak pokazano na listingu 2.3, pozostawienie pojedynczego apostrofu wewn(cid:200)trz parametru HTTP, który nie zostanie prawid(cid:239)owo oczyszczony przed wykorzysta- niem do stworzenia dynamicznej kwerendy SQL, mo(cid:285)e spowodowa(cid:202) zg(cid:239)oszenie przez aplikacj(cid:218) webow(cid:200) b(cid:239)(cid:218)du (na przyk(cid:239)ad kodu HTTP 500), poniewa(cid:285) apostrof w instrukcji SQL oznacza pocz(cid:200)tek lub koniec ci(cid:200)gu. Pojedynczy apostrof spra- wia, (cid:285)e instrukcja staje si(cid:218) nieprawid(cid:239)owa ze wzgl(cid:218)du na przedwczesne zako(cid:241)czenie ci(cid:200)gu znaków lub rozpocz(cid:218)cie ci(cid:200)gu bez jego wcze(cid:258)niejszego zako(cid:241)czenia. Dzi(cid:218)ki sparsowaniu odpowiedzi HTTP na takie (cid:285)(cid:200)dania mo(cid:285)na przeprowadzi(cid:202) fuzzing takich aplikacji webowych i znale(cid:283)(cid:202) parametry HTTP dostarczane przez u(cid:285)yt- kownika, które doprowadzi(cid:239)y do b(cid:239)(cid:218)dów SQL w odpowiedzi. Skrypty krzy(cid:285)owe Podobnie jak iniekcje SQL, ataki za pomoc(cid:200) skryptów krzy(cid:285)owych (XSS) wyko- rzystuj(cid:200) luki w kodzie pojawiaj(cid:200)ce si(cid:218), gdy programi(cid:258)ci buduj(cid:200) HTML, który ma by(cid:202) renderowany w przegl(cid:200)darce WWW za pomoc(cid:200) danych przekazanych do serwera z przegl(cid:200)darki WWW. Czasami dane dostarczone na serwer z niezaufa- nych klientów, takich jak przegl(cid:200)darki WWW, mog(cid:200) zawiera(cid:202) kod HTML wraz z kodem JavaScript. Taki kod pozwala napastnikowi przej(cid:200)(cid:202) kontrol(cid:218) nad witryn(cid:200) WWW przez kradzie(cid:285) pliku cookie lub przekierowanie u(cid:285)ytkowników do z(cid:239)o(cid:258)liwej witryny za po(cid:258)rednictwem surowego, nieprzefiltrowanego kodu HTML. Na przyk(cid:239)ad blog, który pozwala na wprowadzanie komentarzy, mo(cid:285)e wysy(cid:239)a(cid:202) do serwera witryny (cid:285)(cid:200)dania HTTP za po(cid:258)rednictwem formularza do wprowadzania komentarzy. Je(cid:258)li napastnik utworzy(cid:239)by komentarz z osadzonym kodem HTML lub JavaScript, a oprogramowanie bloga zaufa(cid:239)oby mu i nie przeprowadzi(cid:239)o walidacji danych z przegl(cid:200)darki WWW i przes(cid:239)a(cid:239)o „komentarz”, wtedy napastnik móg(cid:239)by wy- korzysta(cid:202) za(cid:239)adowany komentarz do zast(cid:200)pienia witryny WWW w(cid:239)asnym kodem HTML lub przekierowa(cid:202) u(cid:285)ytkownika bloga do witryny WWW kontrolowanej F u z z i ng . W y k o r z y s t a ni e X S S o r a z i n i e k c j i S Q L 43 Poleć książkęKup książkę przez napastnika. Napastnik móg(cid:239)by nast(cid:218)pnie zainstalowa(cid:202) potencjalnie z(cid:239)o- (cid:258)liwe oprogramowanie na maszynie u(cid:285)ytkownika bloga. Ogólnie rzecz bior(cid:200)c, szybkim sposobem na wykrycie na stronie internetowej kodu, który móg(cid:239)by by(cid:202) nara(cid:285)ony na ataki XSS, jest przekazanie do witryny (cid:285)(cid:200)dania ze spreparowanym parametrem. Je(cid:258)li ska(cid:285)one dane pojawi(cid:200) si(cid:218) w odpowiedzi bez zmian, mo(cid:285)e to oznacza(cid:202) wektor dla ataków XSS. Dla przyk(cid:239)adu za(cid:239)ó(cid:285)my, (cid:285)e w parametrze (cid:285)(cid:200)dania HTTP przekazujemy xss , tak jak na listingu 2.5. Listing 2.5. Przyk(cid:239)adowe (cid:285)(cid:200)danie GET do skryptu PHP z parametrem ci(cid:200)gu kwerendy GET /index.php?name=Brandon xss HTTP/1.1 Host: 10.37.129.5 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.10; rv:37.0) (cid:180)Gecko/20100101 Firefox/37.0 Accept: text/html,application/ (cid:180)xhtml+xml,application/xml;q=0.9,*/*;q=0.8 Accept-Language: en-US,en;q=0.5 Accept-Encoding: gzip, deflate (cid:180)Connection: keep-alive Serwer odpowiada w sposób podobny do pokazanego na listingu 2.6. Listing 2.6. Przyk(cid:239)adowa odpowied(cid:283) ze skryptu PHP zawieraj(cid:200)ca oczyszczony parametr ci(cid:200)gu kwerendy name HTTP/1.1 200 OK Date: Sun, 19 Apr 2015 21:28:02 GMT Server: Apache/2.4.7 (Ubuntu) X-Powered-By: PHP/5.5.9-1ubuntu4.7 Content-Length: 32 Keep-Alive: timeout=5, max=100 Connection: Keep-Alive Content-Type: text/html Welcome Brandon lt;xss gt; br / Ogólnie rzecz bior(cid:200)c, je(cid:258)li kod xss zostanie zast(cid:200)piony wersj(cid:200) zawieraj(cid:200)c(cid:200) encje HTML, b(cid:218)dzie to oznacza(cid:239)o, (cid:285)e witryna filtruje dane wej(cid:258)ciowe za pomoc(cid:200) funkcji PHP, takiej jak htmlspecialchars(), lub podobnej metody. Je(cid:258)li jednak na stronie w odpowiedzi po prostu wy(cid:258)wietli si(cid:218) xss , to znaczy, (cid:285)e witryna nie wykonuje (cid:285)adnego filtrowania ani oczyszczania, tak jak w przypadku parametru HTTP name w kodzie pokazanym na listingu 2.7. Listing 2.7. Kod PHP wra(cid:285)liwy na atak XSS ?php $name = $_GET[ name ]; ? echo Witaj $name br ; Podobnie jak w przypadku kodu wra(cid:285)liwego na iniekcje SQL z listingu 2.1, programista nie oczyszcza ani nie zast(cid:218)puje potencjalnie niebezpiecznych znaków . Przez przekazanie do aplikacji przed wyrenderowaniem kodu HTML na ekranie 44 R o z d z i a (cid:239) 2 Poleć książkęKup książkę webowej specjalnie spreparowanego parametru name mo(cid:285)na wyrenderowa(cid:202) kod HTML na ekranie, uruchomi(cid:202) kod JavaScript, a nawet uruchomi(cid:202) aplety Javy, któ- re spróbuj(cid:200) przej(cid:200)(cid:202) kontrol(cid:218) nad komputerem. Na przyk(cid:239)ad mo(cid:285)na wys(cid:239)a(cid:202) spe- cjalnie spreparowany adres URL, taki jak pokazano na listingu 2.8. Listing 2.8. Adres URL z parametrem ci(cid:200)gu kwerendy, który spowodowa(cid:239)by wy(cid:258)wietlenie okna ostrze(cid:285)enia JavaScript, gdyby parametr by(cid:239) wra(cid:285)liwy na atak XSS www.example.com/vuln.php?name=Brandon script alert(1) /script Gdyby skrypt PHP wykorzystywa(cid:239) parametr name do stworzenia kodu HTML, a ten ostatecznie zosta(cid:239)by wyrenderowany w przegl(cid:200)darce WWW, to adres URL z listingu 2.8 móg(cid:239)by spowodowa(cid:202) wy(cid:258)wietlenie w przegl(cid:200)darce okna pop-up JavaScript z liczb(cid:200) 1. Fuzzing (cid:285)(cid:200)da(cid:241) GET z wykorzystaniem fuzzera mutacyjnego Teraz, gdy znasz ju(cid:285) podstawy luk iniekcji SQL i XSS, spróbujemy zaimplemento- wa(cid:202) prosty fuzzer, który znajduje potencjalne wra(cid:285)liwo(cid:258)ci na iniekcje SQL lub ataki XSS w parametrach ci(cid:200)gu kwerendy. Parametry ci(cid:200)gu kwerendy to argumenty w adresie URL wyst(cid:218)puj(cid:200)ce za znakiem ? w formacie klucz=warto(cid:258)(cid:202). W tym pod- rozdziale skupimy si(cid:218) na parametrach HTTP w (cid:285)(cid:200)daniach GET, ale najpierw sparsu- jemy adres URL tak, by móc przegl(cid:200)da(cid:202) w p(cid:218)tli wszystkie parametry ci(cid:200)gu zapyta- nia HTTP, jak pokazano na listingu 2.9. Listing 2.9. Prosta metoda Main() parsuj(cid:200)ca parametry ci(cid:200)gu kwerendy w podanym adresie URL string url = args[0]; public static void Main(string[] args) { int index = url. string[] parms = url. foreach (string parm in parms) Console.WriteLine(parm); } IndexOf( ? ); Remove(0, index+1). Split( ); W kodzie z listingu 2.9 pobieramy pierwszy argument (args[0]) przekazany do g(cid:239)ównej aplikacji fuzzera i zak(cid:239)adamy, (cid:285)e jest to adres URL z niektórymi fuzzowalnymi parametrami HTTP w ci(cid:200)gu kwerendy. Aby przekszta(cid:239)ci(cid:202) parametry na posta(cid:202), która nadaje si(cid:218) do iterowania, usuwamy z adresu URL wszystkie znaki a(cid:285) do wyst(cid:200)pienia znaku zapytania (?) w(cid:239)(cid:200)cznie i korzystamy z wywo(cid:239)ania IndexOf( ? ) do ustalenia indeksu pierwszego wyst(cid:200)pienia znaku zapytania. F u z z i ng . W y k o r z y s t a ni e X S S o r a z i n i e k c j i S Q L 45 Poleć książkęKup książkę Jest to indeks, na którym adres URL si(cid:218) zako(cid:241)czy(cid:239). Dalej s(cid:200) parametry ci(cid:200)gu kwerendy. To s(cid:200) parametry, które mo(cid:285)emy sparsowa(cid:202). Wywo(cid:239)anie Remove(0, indeks + 1) zwraca ci(cid:200)g, który zawiera wy(cid:239)(cid:200)cznie , parametry adresu URL. Ten ci(cid:200)g jest nast(cid:218)pnie dzielony za pomoc(cid:200) znaku oznaczaj(cid:200)cego pocz(cid:200)tek nowego parametru. Na koniec u(cid:285)ywamy s(cid:239)owa kluczowego foreach w celu przetwarzania w p(cid:218)tli wszystkich ci(cid:200)gów w tablicy parms i wy(cid:258)wie- tlenia wszystkich parametrów oraz ich warto(cid:258)ci. W(cid:239)a(cid:258)nie wyizolowali(cid:258)my z adresu URL parametry ci(cid:200)gu kwerendy i ich warto(cid:258)ci. Mo(cid:285)emy teraz zacz(cid:200)(cid:202) modyfikowa(cid:202) warto(cid:258)ci podczas wykonywania (cid:285)(cid:200)da(cid:241) HTTP, aby wywo(cid:239)ywa(cid:202) b(cid:239)(cid:218)dy z aplikacji webowej. Preparowanie parametrów i testowanie luk Nast(cid:218)pnym krokiem po wydzieleniu wszystkich parametrów adresu URL, które mog(cid:200) by(cid:202) wra(cid:285)liwe, jest ska(cid:285)enie ka(cid:285)dego z nich fragmentem danych, które serwer poprawnie oczy(cid:258)ci, je(cid:258)li nie jest wra(cid:285)liwy na iniekcje SQL lub XSS. W przypadku XSS do ska(cid:285)onych danych dodamy xss , natomiast do danych przeznaczonych do testowania pod k(cid:200)tem iniekcji SQL wprowadzimy pojedynczy apostrof. Mo(cid:285)emy stworzy(cid:202) dwa nowe adresy URL do testowania celu przez zast(cid:200)pienie znanych dobrych warto(cid:258)ci parametrów w adresach URL danymi ska(cid:285)onymi dla iniekcji SQL i XSS, tak jak pokazano na listingu 2.10. Listing 2.10. Zmodyfikowana p(cid:218)tla foreach zast(cid:218)puj(cid:200)ca parametry ska(cid:285)onymi danymi foreach (string parm in parms) { string xssUrl = url.Replace(parm, parm + fd xss sa ); string sqlUrl = url.Replace(parm, parm + fd sa ); Console.WriteLine(xssUrl); Console.WriteLine(sqlUrl); } W celu testowania wra(cid:285)liwo(cid:258)ci na luki trzeba zadba(cid:202) o stworzenie takich adre- sów URL, które b(cid:218)d(cid:200) zrozumia(cid:239)e dla docelowej witryny. Aby to zrobi(cid:202), najpierw zast(cid:218)pujemy stary parametr w adresie URL parametrem ska(cid:285)onym, a nast(cid:218)pnie wy(cid:258)wietlamy nowe adresy URL, których b(cid:218)dziemy (cid:285)(cid:200)da(cid:202). Podczas wy(cid:258)wietlania na ekranie ka(cid:285)dy parametr w adresie URL powinien mie(cid:202) jeden wiersz, który za- wiera parametr ska(cid:285)ony XSS , oraz jeden wiersz zawieraj(cid:200)cy parametr z pojedyn- czym apostrofem , tak jak pokazano na listingu 2.11. Listing 2.11. Wy(cid:258)wietlone adresy URL ze ska(cid:285)onymi adresami HTTP http://192.168.1.75/cgi-bin/badstore.cgi?SearchQuery=testfd xss sa (cid:180)idealna akcja = Szukaj http://192.168.1.75/cgi-bin/badstore.cgi? (cid:180)searchquery=testfd sa idealna akcja = Szukaj /xss --ciach— 46 R o z d z i a (cid:239) 2 Poleć książkęKup książkę Budowanie (cid:285)(cid:200)da(cid:241) HTTP Nast(cid:218)pnie programowo zbudujemy (cid:285)(cid:200)dania HTTP za pomoc(cid:200) klasy HttpWebRequest, a potem stworzymy (cid:285)(cid:200)dania HTTP ze ska(cid:285)onymi parametrami HTTP, by zobaczy(cid:202), czy zostan(cid:200) zwrócone b(cid:239)(cid:218)dy (patrz listing 2.12). Listing 2.12. Pe(cid:239)na p(cid:218)tla foreach testuj(cid:200)ca podany adres URL pod k(cid:200)tem wra(cid:285)liwo(cid:258)ci na ataki XSS i iniekcje SQL foreach (string parm in parms) { string xssUrl = url.Replace(parm, parm + fd xss sa ); string sqlUrl = url.Replace(parm, parm + fd sa ); HttpWebRequest request = (HttpWebRequest)WebRequest. request. Method = GET ; Create(sqlUrl); string sqlresp = string.Empty; using (StreamReader rdr = new StreamReader(request.GetResponse().GetResponseStream())) sqlresp = rdr. ReadToEnd(); request = (HttpWebRequest)WebRequest.Create(xssUrl); request.Method = GET ; string xssresp = string.Empty; using (StreamReader rdr = new StreamReader(request.GetResponse().GetResponseStream())) xssresp = rdr.ReadToEnd(); if (xssresp.Contains( xss )) Console.WriteLine ( Znaleziono potencjaln(cid:200) luk(cid:218) XSS (cid:180)w parametrze: + parm); if (sqlresp.Contains( error in your SQL syntax )) Console.WriteLine( Znaleziono luk(cid:218) iniekcji SQL (cid:180)w parametrze: + parm); } W kodzie z listingu 2.12 do przes(cid:239)ania (cid:285)(cid:200)dania HTTP u(cid:285)yli(cid:258)my statycznej metody Create() klasy WebRequest. Adres URL przekazali(cid:258)my jako argument w zmiennej sqlUrl ska(cid:285)onej pojedynczym apostrofem i zrzutowali(cid:258)my wynikowy egzemplarz klasy WebRequest zwrócony do obiektu HttpWebRequest (metody statycz- ne s(cid:200) dost(cid:218)pne bez tworzenia egzemplarza klasy). Statyczna metoda Create() korzysta z wzorca „fabryka” w celu stworzenia nowych obiektów na podstawie przekazanego adresu URL, dlatego musimy zrzu- towa(cid:202) obiekt zwrócony do obiektu HttpWebRequest. Gdyby(cid:258)my na przyk(cid:239)ad przeka- zali URL poprzedzony ftp:// lub file://, to typ obiektu zwracanego przez metod(cid:218) F u z z i ng . W y k o r z y s t a ni e X S S o r a z i n i e k c j i S Q L 47 Poleć książkęKup książkę Create() by(cid:239)by obiektem innej klasy (odpowiednio FtpWebRequest lub FileWeb (cid:180)Request). Nast(cid:218)pnie ustawiamy w(cid:239)a(cid:258)ciwo(cid:258)(cid:202) Method obiektu HttpWebRequest na i zapisujemy odpowied(cid:283) na (cid:285)(cid:200)danie w ci(cid:200)gu GET (zatem tworzymy (cid:285)(cid:200)danie GET) resp za pomoc(cid:200) klasy StreamReader i metody ReadToEnd() . Je(cid:258)li odpowied(cid:283) zawiera nieprzefiltrowany (cid:239)adunek XSS lub zg(cid:239)asza b(cid:239)(cid:200)d dotycz(cid:200)cy sk(cid:239)adni SQL, to znaczy, (cid:285)e znale(cid:283)li(cid:258)my luk(cid:218). Zwró(cid:202)my uwag(cid:218) na u(cid:285)ycie w powy(cid:285)szym kodzie s(cid:239)owa kluczowego using w nowy sposób. Wcze(cid:258)niej stosowali(cid:258)my s(cid:239)owo kluczowe using w celu importowania do fuzzera klas z przestrzeni nazw (na przyk(cid:239)ad System.Net). Ogólnie rzecz bior(cid:200)c, egzemplarze obiektów (obiekty utworzone za pomoc(cid:200) s(cid:239)owa kluczowego new) mog(cid:200) by(cid:202) u(cid:285)ywane w bloku using w taki sposób, gdy klasa implementuje interfejs IDisposable (który wymaga od klasy zaimplementowania metody Dispose()). Gdy zakres bloku using ko(cid:241)czy si(cid:218), metoda Dispose() obiektu jest wywo(cid:239)ywana automatycznie. To bardzo przydatny sposób zarz(cid:200)dzania zasobami zakresu. Nieod- powiednie zarz(cid:200)dzanie takimi zasobami mo(cid:285)e prowadzi(cid:202) do wycieków zasobów, takich jak zasoby sieciowe lub deskryptory plików. Testowanie fuzzowanego kodu Spróbujmy przetestowa(cid:202) nasz kod za pomoc(cid:200) pola wyszukiwania na stronie g(cid:239)ów- nej BadStore. Po otwarciu aplikacji BadStore w przegl(cid:200)darce WWW kliknij przy- cisk pozycji menu Home z lewej strony ekranu, a nast(cid:218)pnie skorzystaj z pola szyb- kiego wyszukiwania w polu wyszukiwania w lewym górnym rogu. W przegl(cid:200)darce powinien wy(cid:258)wietli(cid:202) si(cid:218) adres URL podobny do tego, który pokazano na li- stingu 2.13. Listing 2.13. Przyk(cid:239)adowy adres URL do strony wyszukiwania BadStore http://192.168.1.75/cgi-bin/badstore.cgi?SearchQuery=test Action=Search Przeka(cid:285) do programu jako argument w wierszu polecenia adres URL z listin- gu 2.13 (zast(cid:218)puj(cid:200)c adres IP adresem IP aplikacji BadStore w Twojej sieci), tak jak pokazano na listingu 2.14. To powinno rozpocz(cid:200)(cid:202) fuzzowanie. Listing 2.14. Uruchamianie fuzzera XSS i iniekcji SQL $ ./fuzzer.exe http://192.168.1.75/cgi- bin/badstore.cgi?searchquery=test action=search Znaleziono luk(cid:218) iniekcji SQL w parametrze: searchquery=test Znaleziono potencjaln(cid:200) luk(cid:218) XSS w parametrze: searchquery=test $ Uruchomienie fuzzera powinno znale(cid:283)(cid:202) w aplikacji BadStore wra(cid:285)liwo(cid:258)(cid:202) za- równo na iniekcj(cid:218) SQL, jak i atak XSS. Wynik dzia(cid:239)ania fuzzera powinien by(cid:202) podobny do wyj(cid:258)cia zamieszczonego na listingu 2.14. 48 R o z d z i a (cid:239) 2 Poleć książkęKup książkę Fuzzowanie (cid:285)(cid:200)da(cid:241) POST W tym podrozdziale skorzystamy z systemu BadStore do fuzzowania parametrów (cid:285)(cid:200)dania POST ((cid:285)(cid:200)danie u(cid:285)ywane w celu przes(cid:239)ania danych do przetwarzania do zasobu webowego) zapisywanych na lokalnym dysku twardym. (cid:191)(cid:200)danie POST prze- chwycimy za pomoc(cid:200) Burp Suite — (cid:239)atwego w u(cid:285)yciu serwera proxy HTTP stwo- rzonego dla specjalistów zajmuj(cid:200)cych si(cid:218) zabezpieczeniami. Burp Suite dzia(cid:239)a pomi(cid:218)dzy przegl(cid:200)dark(cid:200) a serwerem HTTP, dzi(cid:218)ki czemu mo(cid:285)na ogl(cid:200)da(cid:202) dane prze- sy(cid:239)ane tam i z powrotem. Pobierz serwer Burp Suite spod adresu http://www.portswigger.net/ i zainstaluj go (Burp Suite jest publikowany jako archiwum Javy, w formacie pliku JAR, któ- ry mo(cid:285)na zapisa(cid:202) na pendrivie albo na innym przeno(cid:258)nym medium). Po pobraniu Burp Suite uruchom aplikacj(cid:218) za pomoc(cid:200) Javy, u(cid:285)ywaj(cid:200)c polece(cid:241) z listingu 2.15. Listing 2.15. Uruchamianie Burp Suite z wiersza polecenia $ cd ~/Downloads/ $ java -jar burpsuite*.jar Po uruchomien
Pobierz darmowy fragment (pdf)

Gdzie kupić całą publikację:

Gray Hat C#. Język C# w kontroli i łamaniu zabezpieczeń
Autor:

Opinie na temat publikacji:


Inne popularne pozycje z tej kategorii:


Czytaj również:


Prowadzisz stronę lub blog? Wstaw link do fragmentu tej książki i współpracuj z Cyfroteką: