Dodano produkt do koszyka

Promocja

BEZPIECZEŃSTWO APLIKACJI WEBOWYCH

BEZPIECZEŃSTWO APLIKACJI WEBOWYCH

red.MICHAŁ SAJDAK

Wydawnictwo: SECURITUM

Cena: 170.00 zł 153.00 brutto

Koszty dostawy:
  • Paczkomaty InPost 14.99 zł brutto
  • Poczta Polska - odbiór w punkcie 9.99 zł brutto
  • Poczta Polska - przedpłata 15.99 zł brutto
  • Poczta Polska - pobranie 19.99 zł brutto
  • Kurier DHL - przedpłata 18.99 zł brutto
  • Kurier DHL - pobranie 21.99 zł brutto
  • Odbiór osobisty - UWAGA - uprzejmie prosimy poczekać na informację z księgarni o możliwości odbioru zamówienia - 0.00 zł brutto

Opis

Opis produktu

ISBN: 978-83-954853-0-5

796 stron
oprawa: twarda
Rok wydania: 2019

Książka jest pierwszym tego typu projektem na polskim rynku. W jednym tomie zebrano informacje o problemach bezpieczeństwa aplikacji webowych. Autorami tekstów są polscy pentesterzy i badacze rozpoznawalni na najważniejszych konferencjach i publikujący na łamach branżowych periodyków i portali. Wyczerpująco, klarownie i z przywołaniem aktualnego stanu wiedzy.

SPIS TREŚCI

Autorzy

Przedmowa
Gynvael Coldwind

Wstęp
Michał Sajdak
Dlaczego aplikacje webowe?
Co można powiedzieć o ich bezpieczeństwie?
Największy problem z bezpieczeństwem aplikacji WWW?
Czy istnieją metody sprawdzenia poziomu bezpieczeństwa naszych aplikacji?
Podziękowania

Prawne aspekty ofensywnego bezpieczeństwa IT
Bohdan Widła
Wstęp
Prawo, czyli właściwie co?
Ochrona informacji i dostępu do systemów informatycznych
Przełamywanie lub omijanie zabezpieczeń
Dostęp do systemu bez omijania zabezpieczeń
Podsłuch komputerowy
Ingerencja w dane lub w pracę systemu informatycznego
Naruszanie integralności danych
Zakłócanie przetwarzania danych lub pracy systemu
Sabotaż
Narzędzia
Próba ograniczenia karalności, czyli lex bug bounty
Stan wyższej konieczności
Kilka uwag końcowych

Podstawy protokołu HTTP
Michał Sajdak
Wstęp
Podstawowa komunikacja HTTP
Metody HTTP
URL czy URI?
Nagłówki HTTP
Czy nagłówki są absolutnie wymagane?
Wartości przekazywane do aplikacji protokołem HTTP
Nagłówki żądania HTTP
URL
POST: application/x-www-form-urlencoded
POST: multipart/form-data
Ciasteczka
Podsumowanie

Burp Suite Community Edition - wprowadzenie do obsługi proxy HTTP
Marcin Piosek
Wstęp
Wyznaczamy cel
Czym jest Burp Suite?
Alternatywy i dlaczego Burp?
Pobranie i uruchomienie Burp Suite Community Edition
Konfiguracja środowiska pracy
Przystępujemy do pracy
Modyfikowanie zapytań HTTP
Przechwytywanie odpowiedzi
Repeater - powtórz to jeszcze raz
Intruder - automatyzacja i oszczędność czasu
Comparer - wskaż różnice
Decoder - radzimy sobie z "dziwnym" ciągiem znaków
Sequencer - analiza entropii i nie tylko
Połączenie nie jest bezpieczne - HTTPS
Dopasuj i zamień
Socksproxy - proxy w proxy
Rozwiązywanie nazw i brak uprawnień
Skróty klawiszowe
Wtyczki - jeszcze więcej możliwości!
Gdy coś przebiega niezgodnie z planem
Podsumowanie

Protokół HTTP/2 - czyli szybciej, ale czy również bezpieczniej?
Michał Sajdak
Wstęp
Porównanie komunikacji z HTTP/1.1
Wykorzystanie protokołu TCP
Podstawy komunikacji HTTP/2
Bezpieczeństwo
Obowiązkowy TLS?
Złożoność protokołu
Znane podatności raz jeszcze
WAF/IDS
Co dalej?
Narzędzia
Podsumowanie
Bezpieczeństwo aplikacji webowych

Nagłówki HTTP w kontekście bezpieczeństwa
Artur Czyż
Wstęp
Jak możemy sprawdzić aktualne nagłówki dla konkretnej strony?
Wybrane nagłówki HTTP a ich wpływ na bezpieczeństwo
HTTP Strict-Transport-Security (HSTS)
Wdrożenie
Referrer-Policy
Wdrożenie
X-Content-Type-Options
Wdrożenie
Feature-Policy
Wdrożenie
X-Frame-Options
Wdrożenie
Nagłówki w służbie omijania zabezpieczeń i filtrów (m.in. WAF)
Podsumowanie

Chrome DevTools w służbie bezpieczeństwa aplikacji webowych
Rafał ‘bl4de‘ Janicki
Wstęp
Narzędzia
Analiza kodu HTML
Analiza mechanizmów przechowywania danych (Cookies, Storage)
Statyczna analiza kodu JavaScript
Debugger JavaScript
Wykonywanie kodu JavaScript z użyciem snippetów (Snippets)
Punkty wejścia i wykonania kodu (sources oraz execution sinks)
Podsumowanie

Bezpieczeństwo haseł statycznych
Adrian ‘vizzdoom‘ Michalczyk
Wstęp
Metody uwierzytelniania
Hasła statyczne
Hasła jednorazowe
Protokół wyzwanie-odpowiedź
Przechowywanie haseł statycznych
Funkcje skrótu i ich właściwości
Kryptograficzna funkcja skrótu Message Digest
Kryptograficzna funkcja skrótu SHA
Problem szybkości
Sól i pieprz
Key stretching
Wszystko w jednym - funkcje PBKDF
Studium przypadku - Battlefield Heroes
Studium przypadku - Dropbox
Ataki zdalne (online)
Ataki lokalne (offline)
Kompromis czasowo-pamięciowy i tęczowe tablice
Receptury
Polecane zasoby w sieci

Rekonesans aplikacji webowych (poszukiwanie celów)
Michał Sajdak
Wstęp
Cel inwentaryzacji
Lokalizacja serwerów webowych na zadanym zakresie adresów IP
Poszukiwanie aktywne
nmap
Poszukiwanie pasywne
VirusTotal/PassiveTotal
Censys/Zoomeye/Shodan
Inne narzędzia
Rekonesans poddomen
Aktywne zapytania do DNS
Amass - metoda słownikowa i pozyskiwanie danych z zewnętrznych źródeł
DNS zone transfer
DNSSEC
Pasywne pozyskiwanie informacji o poddomenach
PassiveTotal
VirusTotal
Google/Bing/Yandex
Certificate Transparency logs
Projekt Sonar - historyczne wpisy Forward DNS oraz Reverse DNS
SecurityTrails
CSP
Źródła stron HTML/JS/CSS
Aplikacje mobilne
Domeny wirtualne
Automatyzacja rekonesansu
Domeny powiązane z bazowymi
Builtwith
ViewDNS.info
Podsumowanie

Ukryte katalogi i pliki jako źródło informacji o aplikacjach internetowych
Rafał ‘bl4de‘ Janicki
Wstęp
Systemy kontroli wersji
Podstawowe informacje o obiektach Git
Plik .gitignore
Subversion (SVN)
Katalogi i pliki konfiguracyjne środowisk programistycznych
JetBrains IDE - PHPStorm, WebStorm, PyCharm, IntelliJ IDEA
Bezpieczeństwo aplikacji webowych
NetBeans IDE
Pliki konfiguracyjne narzędzi deweloperskich
Pliki konfiguracyjne specyficzne dla Node.js czy JavaScript:
bower.json oraz package.json
Plik konfiguracyjny .gitlab-ci.yml (GitLab CI/CD)
Plik Ruby on Rails: database.yml
Plik macOS .DS_Store
Odkrywaj ukryte foldery oraz pliki z gotowym słownikiem
dla swojego ulubionego narzędzia
Podsumowanie

Podatność Cross-Site Scripting (XSS)
Michał Bentkowski
Wstęp
Czym jest XSS oraz typy podatności XSS
Skutki XSS
Konteksty XSS
Konteksty DOM XSS
Funkcje typu eval
Funkcje przyjmujące kod HTML
Funkcje przyjmujące adres URL
XSS nie tylko w HTML
XSS a dopuszczanie fragmentów HTML
Ochrona przed XSS
Enkodowanie danych
Systemy szablonów z automatycznym enkodowaniem
Ochrona przed DOM XSS
Filtrowanie HTML
Upload plików
Content-Security-Policy
Filtry anty-XSS w przeglądarkach
XSS a popularne biblioteki JS
Dynamiczne budowanie szablonów
Bezpośrednie podstawianie HTML
Pułapka kontekstu URL-owego
Frameworki a DOM XSS
Podsumowanie

Content Security Policy (CSP)
Michał Bentkowski
Czym jest CSP i przed czym chroni
Składnia CSP
Dyrektywy CSP
Dyrektywy *-src
Dyrektywa script-src
Dyrektywa base-uri
Dyrektywy block-all-mixed-content i upgrade-insecure-requests
Dyrektywa form-action
Dyrektywa frame-ancestors
Dyrektywa plugin-types
Dyrektywa report-uri
Dyrektywa sandbox
Raportowanie
Sposoby obejścia CSP
Obejście przez JSONP
Obejście przez frameworki JS
Kiedy warto, a kiedy nie warto stosować CSP?
Przykładowe polityki CSP
Podsumowanie

Same-Origin Policy i Cross-Origin Resource Sharing (CORS)
Mateusz Niezabitowski
Wstęp
Same-Origin Policy (SOP)
Przykład 1
Przykład 2
Przykład 3
Cross-Origin Resource Sharing (CORS)
Przykład podobny do trzeciego ze wstępu
Przykład podobny do drugiego ze wstępu
Obiekty XMLHttpRequest2
Model pierwszy - zapytania proste (Simple Requests)
Model drugi - zapytania nie-takie-proste (Not-So-Simple Requests)
Przesyłanie danych uwierzytelniających w CORS
Implementacja mechanizmu CORS po stronie serwera
Wady CORS
Alternatywy dla CORS
JSONP
postMessage
Serwer proxy
WebSockets
Flash i crossdomain.xml
Sposoby obejścia Same-Origin Policy
Obejścia CORS
Zbyt szerokie uprawnienia: * (gwiazdka) w odpowiedzi
Zbyt szerokie uprawnienia: "odbijanie" originu
Błędy implementacji
"null" origin
Nadmierne zaufanie do stron trzecich
CORS i Cache Poisoning
Inne przykłady obejścia SOP
Przykład 1
Przykład 2
Przykład 3
Przykład 4
Przykład 5
Obejścia dla deweloperów
Bezpieczeństwo aplikacji webowych
Podsumowanie
Polecane zasoby w sieci

Podatność Cross-Site Request Forgery (CSRF)
Michał Sajdak
Wstęp
Przykład 1. CSRF realizowany w tej samej domenie.
Nieautoryzowane utworzenie nowego konta administracyjnego, metoda GET
Przykład 2. CSRF realizowany pomiędzy różnymi domenami
Nieautoryzowane usunięcie konta administratora, metoda GET
CSRF a Same-Origin Policy
Przykład 3. CSRF realizowany pomiędzy różnymi domenami
Bankowość elektroniczna, metoda POST
CSRF a inne niż GET/POST metody HTTP
Przykład 4. CSRF w połączeniu z innymi podatnościami - urządzenia sieciowe
Przykład 5. Podatność wieloetapowa - przejęcie dostępu
do systemu WordPress
Metody ochrony przed CSRF
Losowe tokeny
SameSite
Ekran logowania
Nowe podatności wprowadzone przez ochronę przeciwko CSRF
Podsumowanie

Podatność Server-Side Template Injection (SSTI)
Mateusz Niezabitowski
Wstęp
Silniki szablonów
Server-Side Template Injections - Velocity
Teoria, metodyka, narzędzia
Identyfikacja podatności
Identyfikacja silnika
Eksploitacja
Narzędzia i przykład zastosowania - Freemarker
Zapobieganie i obrona
Rezygnacja z szablonów (przynajmniej częściowo)
Użycie bezpiecznych silników
Sandboxing
Hardening
Podsumowanie
Polecane zasoby w sieci

Podatność Server-Side Request Forgery (SSRF)
Michał Sajdak
Wstęp
Przykłady
Możliwe skutki wykorzystania podatności
Częste miejsca występowania podatności SSRF
Podstawy
Pliki XML
XXE
Document type definition (DTD)
XInclude
SVG/XLink
XSLT
Formaty pakietów biurowych
Inne formaty plików
Dowolne formaty
MP4
Biblioteki
Mechanizm uploadu
Inne miejsca
Protokoły inne niż HTTP wykorzystywane w SSRF
Wstęp
HTTPS
PHAR
Gopher
Inne protokoły
Częste błędy w filtrach anty-SSRF
Filtry blacklist
Filtry whitelist
Metody ochrony
Podsumowanie

Podatność SQL Injection
Michał Bentkowski
Wstęp
Czym jest SQL Injection
Sposoby wykorzystania SQL Injection
UNION-based
ERROR-based
BLIND (content based)
BLIND (time based)
Stacked queries
Skutki wykorzystania SQL Injection
Wydobycie dowolnych danych z bazy
Omijanie ekranu logowania
Modyfikacja/usuwanie danych
Przykład 1. Zmiana hasła administratora: UPDATE
Przykład 2. Ścieżka dostępu
Przykład 3. Wykonanie kodu PHP
Odczyt plików z dysku
Zapis plików na dysku
Wykonywanie poleceń systemu operacyjnego
Jak szukać SQL Injection?
Second-order SQL Injection
Bezpieczeństwo aplikacji webowych
Metody ochrony przed SQL Injection
Zapytania parametryzowane
Walidacja typów danych
Stosowanie systemów klasy ORM
Hardening bazy danych
Podsumowanie

Podatność Path Traversal
Marcin Piosek
Wstęp
Logika podatności
Zagrożenia
Ujawnienie nadmiarowych informacji
Ujawnienie plików konfiguracyjnych
Zdalne wykonanie kodu
Szersze spojrzenie na problem
Przykłady podatności
GlassFish Server
ColoradoFTP 1.3
Testowanie
Automatyzacja
Omijanie filtrów
Ochrona
Blokowanie ataku poprzez podmianę tekstu
Modelowanie zagrożeń
Podsumowanie

Code Injection i Command Injection -
przegląd wektorów ataku w aplikacjach webowych
Marcin Piosek
Wstęp
Czym jest Code Injection oraz Command Injection?
Wektory ataków
Formalność - Eval
Klasyka: Local File Inclusion i Remote File Inclusion
Podatności w mechanizmie wgrywania plików
Uruchamianie zewnętrznego oprogramowania - Command Injection
Panele administracyjne
Cross-Site Scripting a Code Injection
Tryb debug a serwer produkcyjny
Od SQL Injection do RCE
XSLT
WebDAV
Podatności w bibliotekach
Przegląd podatności
Drobne błędy
Czy to już wszystko?
Skutki
Spis treści
Wykradanie danych
Eskalacja
Jakby tego było mało - webshelle i tylne furtki
Podsumowanie

Uwierzytelnianie, zarządzanie sesją, autoryzacja
Marcin Piosek
Wstęp
Teoria i podstawowe pojęcia
Błędne pojęcia
Identyfikacja
Uwierzytelnianie
Zarządzanie sesją
Autoryzacja
Błędy bezpieczeństwa
Rodzaje mechanizmów uwierzytelniania
Sposób klasyczny (zapytanie oraz ciasteczka HTTP)
HTTP Basic Authentication
OpenID Connect
Klucze API
Uwierzytelnianie certyfikatem
Kerberos oraz NTLM
Uwierzytelnianie
Nie ma HTTPS, nie ma poświadczeń
Brak uwierzytelnienia
Po co wyważać, skoro można obejść - omijanie uwierzytelnienia
Poświadczenia podane na tacy
Praca po stronie serwera
Enumeracja użytkowników
Automatyzacja ataku, czyli ataki brute-force
Zabezpieczenia tak dobre, że aż złe - jak skutecznie bronić się przed atakami siłowymi
Jak nie drzwiami, to oknem
Reset hasła
Niebezpieczne pytania bezpieczeństwa
Podaj hasło jeszcze raz - krytyczne akcje
Higiena przechowywania haseł
Polityka bezpieczeństwa haseł
Logowanie zdarzeń
Zarządzanie sesją
Wymyślanie koła na nowo
Regenerowanie sesji
Session Fixation
Obsługa równoległych sesji
Strzec jak oka w głowie
Odpowiednia złożoność
Odpowiedni czas życia
Unieważnianie sesji
ID sesji jako fingerprint
ID sesji jako zagrożenie
Bezpieczeństwo aplikacji webowych
Kłopotliwa funkcja "zapamiętaj mnie"
Autoryzacja
Brak autoryzacji oraz autoryzacja na warstwie interfejsu
Podejmowanie decyzji i eskalacja uprawnień
Problem globalnych identyfikatorów
Centralizacja
Rozliczalność oraz niezaprzeczalność
Krytyczne operacje
Wybór modelu autoryzacji
Zasada najmniejszego uprzywilejowania
Co można zrobić lepiej
Uwierzytelnianie dwuskładnikowe
Poszerzanie wiedzy
Podsumowanie
Polecane zasoby w sieci

Pułapki w przetwarzaniu plików XML
Michał Bentkowski
Wstęp
Podstawy XML - encje i encje parametryczne
Billion laughs
Quadratic blowup
XXE (XML eXternal Entity)
Inne podatności XML
Podsumowanie

Bezpieczeństwo API REST
Michał Sajdak
Wstęp
Czym jest API REST?
Metody HTTP
Brak ścisłej formalizacji użycia metod
Nadpisywanie metod
Rekonesans API
Przykład
Dokumentacja
Wykonanie metody API na wiele różnych sposobów
Frameworki
Struts REST Plugin
Spring Data REST
Spring OAuth
RESTEasy
Jackson Databind
Tryb debug
Jakie formaty danych akceptuje nasze API?
JSON
XML
YAML
Bezpośrednia deserializacja
Jakiego formatu danych oczekuję w odpowiedzi?
Problemy z kluczami API
Bezpieczeństwo webhooks
Uwierzytelnienie i autoryzacja
Problem z uwierzytelnieniem, a następnie z autoryzacją
Reset hasła
Dostęp do panelu administracyjnego
Kradzież środków z jednego z największych banków w Indiach
Dostęp do wewnętrznego API
Podsumowanie

Niebezpieczeństwa JSON Web Token (JWT)
Michał Sajdak
Wstęp
Definicja
Kolejny przykład JWT i pierwsze problemy bezpieczeństwa
Kolec pierwszy: nadmierna komplikacja
Kolec drugi: none
Kolec trzeci: łamanie hasła do HMAC
Kolec czwarty: gdzie algorytmów sześć, tam nie ma bezpieczeństwa
Kolec piąty: choć może należałoby mu się pierwszeństwo
Kolec szósty: czy szyfrowanie JWT może w ogóle działać?
Kolec siódmy: dekodowanie/weryfikacja - co za różnica?
Kolec ósmy: przechwycenie dowolnego tokena = przejęcie dostępu do API?
Kolec dziewiąty: replay JWT
Kolec dziesiąty: ataki czasowe na podpis
Kolec jedenasty: mnogość bibliotek
Alternatywa do JWT?
Czy JWT może być bezpieczne?
Podsumowanie
Polecane zasoby w sieci

Zalety i wady OAuth 2.0 z perspektywy bezpieczeństwa
Marcin Piosek
Wstęp
Czym jest OAuth 2.0?
Wykorzystywana terminologia
Zasada działania OAuth
Korzyści wynikające ze stosowania OAuth
Krok w tył - czym OAuth nie jest
Pozostałe metody pozyskiwania tokena
Implicit Grant
Client Credentials
Resource Owner Credentials
Refresh token
Jaką metodę pozyskiwania tokena wybrać?
Co może pójść nie tak
Bezpieczeństwo aplikacji webowych
Brak szyfrowanego kanału komunikacji
Serwer autoryzujący
Problematyczne przekierowania
Stary znajomy - CSRF
Granulacja uprawnień
Klient
Tokeny oraz kody dostępu
Consent screen
OAuth i phishing
Biblioteki i gotowe rozwiązania
Aplikacje mobilne
Cookies
Brak izolacji
Krok w tył
Złe nawyki
Własne URI
PKCE
Alternatywa dla WebViews oraz Custom URI
Aplikacje natywne
Różnice w stosunku do OAuth 1.0 oraz kontrowersje
Modelowanie zagrożeń
Podsumowanie

Bezpieczeństwo protokołu WebSocket
Marcin Piosek
Wstęp
Co to jest i jak działa protokół WebSocket?
Prosty klient
Zagrożenia
Same-Origin Policy
Niepoprawne zarządzanie uwierzytelnieniem oraz sesją
Ominięcie autoryzacji
Wstrzyknięcia i niepoprawna obsługa danych
Wyczerpanie zasobów serwera
Tunelowanie ruchu
Szyfrowany kanał komunikacji
Gotowe rozwiązania
Testowanie
Modelowanie zagrożeń
Podsumowanie
Polecane zasoby w sieci

Flaga SameSite - jak działa i przed czym zapewnia ochronę?
Marcin Piosek
Wstęp
Podstawy - przeglądarki, ciasteczka i sesja
Nadużycie
SameSite na ratunek
Polityka Lax - nawigacja "top-level" oraz bezpieczne metody HTTP
Bilans zysków i strat
Podsumowanie: lek na całe zło?

Niebezpieczeństwa deserializacji w PHP
Michał Bentkowski
Wstęp
Jak wygląda serializacja w PHP?
Podatność PHP Object Injection
Trening - wykorzystanie Object Injection w Guzzle
Praktyczne wykorzystanie Object Injection
Ochrona przed podatnością
Podsumowanie

Niebezpieczeństwa deserializacji w Pythonie (moduł pickle)
Michał Bentkowski
Wstęp
Jak działa moduł pickle?
Złośliwe użycie pickle
Sposoby ochrony
Podsumowanie

Niebezpieczeństwa deserializacji w .NET
Grzegorz Trawiński
Wstęp
Środowisko programistyczne
Json.Net
XmlSerializer
Case Studies
Breeze (CVE-2017-9424)
DotNetNuke Platform (CVE-2017-9822)
Microsoft SharePoint (CVE-2019-0604)

Niebezpieczeństwa deserializacji w Javie
Mateusz Niezabitowski
Wstęp
Podstawy - teoria
Mechanizm serializacji/deserializacji
Niebezpieczna deserializacja
Automatyczne wykonanie metod
Klasy "interesujące" i "dostępne"
Program deserializuje dane od użytkownika
Podatność deserializacji w języku Java
Apache commons-collections gadget chain
Analiza
Podatność deserializacji w języku Java - praktyka
Bezpieczeństwo aplikacji webowych
Case Study: prosta aplikacja
Natywna serializacja a DoS
Rekurencyjne zbiory (java.util.Set)
Analiza
Modyfikacja zserializowanych danych i błąd przepełnienia pamięci
Analiza
Inne formaty serializacji
Biblioteka XStream
Jak się zabezpieczyć przed deserializacją niezaufanych danych?
Rozwiązanie #0: obfuskacja
Rozwiązanie #1: brak serializacji
Eliminacja serializacji natywnej
Rozwiązanie #2: blokowanie gadżetów
Blacklisting i whitelisting
Java Serialization Filter
Rozwiązanie #3: kryptografia
Analiza
Rozwiązanie bonusowe: monitoring
Monitorowanie przesyłania zserializowanych obiektów
Monitorowanie wyjątków
Podsumowanie

Wprowadzenie do programów bug bounty
Jarosław Kamiński
Wstęp
Programy bug bounty
Rys historyczny
Jak się do tego zabrać?
Budowanie warsztatu
Udział w konkursach i programy bughunterskie
W jaki sposób zgłosić błąd?
Dokumentacja programu
Zasady punktacji
Zgłoszenie znalezionej podatności
Modelowy raport
Cykl życia błędu, czyli co się dzieje po przesłaniu raportu
Jak wybrać program?
Na miarę możliwości
Rozpoznana technologia
Wnikliwa analiza zasad obowiązujących w programie
Zakres testu
Prawa i obowiązki programów
Profesjonalizacja
Podsumowanie

Kod wydawnictwa: 978-83-954853-0-5

Opinie, recenzje, testy:

Ten produkt nie ma jeszcze opinii

Twoja opinia

aby wystawić opinię.

Ocena:
  • Wszystkie pola są wymagane
Zapytaj o produkt

Produkty powiązane

Kontakt

Księgarnia Ekonomiczna Kazimierz Leki Sp. z o.o.

ul. Grójecka 67

02-094 Warszawa

NIP: 7010414095

Tel. 22 822 90 41

www.24naukowa.com.pl

naukowa@ksiegarnia-ekonomiczna.com.pl