← Natrag

Web Sigurnost - 1. dio

Što je web aplikacija

Klijent-poslužitelj način komunikacije

Klijent

Poslužitelj

Komunikacija je bazirana na HTTP(S) protokolu

Primjer komunikacije između klijenta i servera HTTP communication

Proxy

Posrednik u komunikaciji. Sve podatke koje šaljemo nekome prvo šaljemo proxy serveru i on ih prosljeđuje daje.

Koraci sigurnosti testiranja web aplikacija

Enumeracija otvorenih portova

Za provjeru koji su portovi otvoreni koristiti:

nmap -sV -v [URL]

Moguće je definirati drugi range za testiranje sa -p[OD_PORT]-[DO_PORT]

Enumeracija web aplikacija

Enumeracija dostupnih funkcionalnosti i okvirni pregled aplikacije

Note

HTTP zaglavlja često otkrivaju verziju poslužitelja i OS

Enumeracija JavaScript datoteka

Izlistavanje direktorija sa inurl:/wp-content site:*.hr na google-u

Automatizirani alati za enumeraciju datoteka

Alati:

Bitno je odabrati dobru listu riječi

Primjer pretraživanja domene mach1ne.org alatom dirsearch

$ dirsearch -u https://mach1ne.org

  _|. _ _  _  _  _ _|_    v0.4.3
 (_||| _) (/_(_|| (_| )

Extensions: php, aspx, jsp, html, js | HTTP method: GET | Threads: 25 | Wordlist size: 11460

Output File: /home/mateo/reports/https_mach1ne.org/_25-04-05_11-13-09.txt

Target: https://mach1ne.org/

[11:13:09] Starting:
[11:13:14] 403 -  199B  - /.ht_wsr.txt
[11:13:14] 403 -  199B  - /.htaccess.bak1
[11:13:14] 403 -  199B  - /.htaccess.save
[11:13:14] 403 -  199B  - /.htaccess.orig
[11:13:14] 403 -  199B  - /.htaccess_sc
[11:13:14] 403 -  199B  - /.htaccess_extra
[11:13:14] 403 -  199B  - /.htaccessOLD2
[11:13:14] 403 -  199B  - /.htaccess_orig
[11:13:14] 403 -  199B  - /.htaccess.sample
[11:13:14] 403 -  199B  - /.htaccessOLD
[11:13:14] 403 -  199B  - /.htaccessBAK
[11:13:14] 403 -  199B  - /.htm
[11:13:14] 403 -  199B  - /.html
[11:13:14] 403 -  199B  - /.htpasswd_test
[11:13:14] 403 -  199B  - /.htpasswds
[11:13:14] 403 -  199B  - /.httr-oauth
[11:13:15] 301 -  232B  - /.js  ->  https://mach1ne.org/.js/
[11:13:16] 403 -  199B  - /.php
[11:13:42] 200 -    0B  - /content.php
[11:13:45] 403 -  199B  - /demos/
[11:13:49] 200 -  102KB - /favicon.ico
[11:13:58] 301 -  239B  - /javascript  ->  https://mach1ne.org/javascript/
[11:14:01] 200 -   19B  - /log.php
[11:14:01] 200 -   46B  - /log.txt
[11:14:22] 403 -  199B  - /server-status/
[11:14:22] 403 -  199B  - /server-status
[11:14:31] 403 -  199B  - /test/
[11:14:31] 301 -  233B  - /test  ->  https://mach1ne.org/test/
[11:14:36] 200 -    0B  - /vendor/autoload.php
[11:14:36] 200 -    0B  - /vendor/composer/autoload_real.php
[11:14:36] 403 -  199B  - /vendor/
[11:14:36] 200 -    0B  - /vendor/composer/autoload_psr4.php
[11:14:36] 200 -    0B  - /vendor/composer/ClassLoader.php
[11:14:36] 200 -    0B  - /vendor/composer/autoload_static.php
[11:14:36] 200 -    0B  - /vendor/composer/autoload_classmap.php
[11:14:36] 200 -    0B  - /vendor/composer/autoload_namespaces.php

Task Completed

~ took 1m35s
$

GET/POST

GET \Rightarrow šalje podatke u url-u POST \Rightarrow šalje podatke u tjelu zahtjeva

Cross-Site Scripting

Ubacivanje zlonamjernog JavaScript koda u web stranicu

Reflektirajući XSS

Parametrizirani URL se reflektira bez sanitizacije u stranicu

https://fer.unizg.hr/lib/ajax_autocomplete_search.php?aaa<img+src=x+onerror=alert(1)>

Sa XSS-om moguće je skoro sve što može i žrtva

Pohranjeni XSS

Ubacivanje JS-a u neku komponentu unutar aplikacija

Ostali tipovi

Obrane od XSS napada

CSRF

PortSwigger za igranje sa raznim ranjivostima

Ideja je podvaliti žrtvi HTTP zahtjev kojega ne bi inače poslali

Kako krivotvoriti zahtjev

  1. Korisnik mora biti prijavljen u aplikaciju (kolačići aktivni)
  2. Korisnik klikne na link napadačeve stranice
  3. Stranica napadača šalje HTTP zahtjev na ranjivu app
  4. Browser u zahtjev automatski dodaje kolačiće
  5. Browser ne zna da se dogodlilo nešto loše, zahtjev je prihvaćen od aplikacije

Same-Site i Cross-Site

Sve je Same-Site dok se ne mijenja protokol i TLD+1 (example.com) npr. test.exaple.com i www.example.com su Same-Site

To je problem jer su fer.unizg.hr, foi.unizg.hr itd. su sve Same-Site

Anti-CSRF tokeni

Tokeni koje znaju korisnik i server, pa se komunikacija može potvrditi

SQL Injection

Umetanje SQL koda u forme kako bi se pokrenuo neki maliciozan SQL kod.

Otkrivanje SQL ranjivosti:

Automatatizirani način SQLmap

python sqlmap.py -u [URL]

Spriječavanje

Napadi na prijavu

Napad na dvofaktorsku autentikaciju

Ukoliko je implementirana u dva zasebna koraka

  1. Unos korisničkog imena, lozinke
  2. Unos 2FA koda

Jesu li koraci povezani?

Vraća li se sesija od korisnika nakon unosa lozinke ili 2FA koda

Preporuke za implementaciju 2FA

Kontrola pristupa

Najčešće u praksi

Web aplikacije imaju često više korisnika i rola

Može li niže privilegirani korisnik neautorizirano prisupiti krajnjim točkama koje su namijenjene za više privilegirane korisnike

Logičke ranjivosti

Izravna poveznica na objekt (DOR)

U svim ovim slučajevim se može naći taj podatak i pristupiti specifičnom korisniku

Obrana:

Web Aplication Firewall (WAF)

Zahtjev MORA proći kroz firewall da bi išta radilo.

Lagano se bypass-a jer je često miskonfiguriran.

XSS - vrijance