Zhakuj swojego Wordpressa, WordUP Trojmiasto

download Zhakuj swojego Wordpressa, WordUP Trojmiasto

If you can't read please download the document

Transcript of Zhakuj swojego Wordpressa, WordUP Trojmiasto

Zhakuj swojego Wordpress'a

Na podstawie studium przypadkw bdw z 2015 roku

WordUP Trjmiasto #4

Plan gry

Troch o testach bezpieczestwa

Troch o podatnociach aplikacji webowych:SQL injection - Wstrzyknicie zapytania do bazy danych - OWASP Top 1

XSS wykonanie zoliwego kodu w kontekcie przegldarki klienta OWASP Top 3

Upload PHP Shell wykonanie kodu na serwerze przez bd w wysyaniu plikw

Podsumowanie - troch o dobrych praktykach

O testach bezpieczestwa webaplikacji

HTTP Proxy modyfikowanie zapyta

1

2

3

4

SQL injection brutalny klasyk

Konsekwencje: odczyt/zapis danych z bazy, utworzenie plikw, odczyt danych z pliku np. z wp-config.php, wykonanie polecenia OS

Jak sprawdzi: Modyfikacja zapytania SQL do bazy danych i sprawdzenie, czy mamy kontrol nad zapytaniemhttp://127.0.0.1/wordpress/?p=2-1

http://127.0.0.1/wordpress/?p=1 order by 100--

http://127.0.0.1/wordpress/?p=1 or 1=1

http://127.0.0.1/wordpress/?p=1' or '1'='1

Rodzaje: Klasyczny

Blind (time based) - najczstszy w pluginach do Wordpress'a

Error

Second order

Blind SQLi w SEO by Yoast

Podatna wersja 1.7.3.3, zaatana 11.03.2015

Payload

Proof of Concept serwer wysa odpowied po 10s, czyli atakujcy ma kontrol nad zapytaniami do serwera baz danych

%2c(select%20*%20from%20(select(sleep(10)))a)

http://127.0.0.1/wordpress/wp-admin/admin.php?page=wpseo_bulk-editor&type=title&orderby=post_date%2c(select%20*%20from%20(select(sleep(10)))a)&order=asc

Blind SQLi w SEO by Yoast

Warunki: atakujcy musi by uwierzytelniony, czyli wczeniej uzyska dostp do konta administratora, edytora, menadera SEO lub insider attackAtak #1: zmodyfikowany payload, ktry sprawdza kolejne znaki hasha hasa administratora Wordpress'a

Tu sprawdzilimy czy pierwszy znak hasha odpowiada 36 znakowi z tabeli ASCII czyli $. Jeli warunek jest prawdziwy to serwer odpowie z opnieniem 5 sekund.

Atak #2: payload, ktry sprawdza kolejne znaki hasa uytkownika bazodanowego dla Wordpress'a wpisanego otwartym tekstem do
wp-config.php

Blind SQLi w SEO by Yoast

Podatna funkcja: parse_item_query mimo zastosowania esc_sql()Podatna wersja: 1.7.3.3

protected function parse_item_query( $subquery, $all_states, $post_type_clause ) {

$orderby = WPSEO_Utils::filter_input( INPUT_GET, 'orderby' );

$orderby = ! empty( $_GET['orderby'] ) ? esc_sql( sanitize_text_field( $_GET['orderby'] ) ) : 'post_title';

$orderby = $this->sanitize_orderby( $orderby );

(...)

$query = "SELECT ID, post_title, post_type, post_status, post_modified, post_dateFROM {$subquery}WHERE post_status IN ({$all_states}) $post_type_clauseORDER BY {$orderby} {$order}LIMIT %d,%d

Blind SQLi WooCommerce 2.3.5

Podatna wersja: 2.3.5 (odkryty przez Matt Berry)Podatny parametr: tax_rate_country w zapytaniu POSTPrzyczyna: refaktoring klasy i brak rzutowaniaProof of Concept:

Patch:

tax_rate_country[(SELECT SLEEP(5))]

SQLi - zabezpieczenia

Prepared statements: biblioteka PDO, Wordpress wpdb->prepare

$wpdb->query( $wpdb->prepare( " INSERT INTO $wpdb->postmeta ( post_id, meta_key, meta_value ) VALUES (%d,%s,%s ) ", 1, META_KLUCZ, META_WARTO ) );

Stored procedure:

$result = $wpdb->query("CALL posts_count(@total_posts)");

Eskejpujemy wprowadzane dane przez uytkownika:

esc_sql()*, add_slashes(), mysql_real_escape_string()*patrz. Dokumentacja zamienna przekazywana do zapytania musi by otoczona znakami cudzysowu "

Biae/czarne listy, WAF

Ograniczanie uprawnie

ModSecurity

Kada strona WP to osobny uytkownik DB z ograniczonymi uprawnieniami np. bez uprawnie FILES

XSS - niedoceniany a grony

Mozliwoci ataku: Przejcie zalogowanej sesji (ccokies)

Modyfikacja drzewa DOM strony

Wyciek danych w tle np.keylogger (XmlHttpRequest)

Dostp do danych geolokalizacyjnych, mikrofonu, kamery (HTML5 API)

rdo http://excess-xss.com/

XSS istota podatnoci

Podatno: brak filtracji danych od uytkownika przed ich wywietleniem w aplikacji. Ochrona: zamiana istotnych znakw HTML na encje HTML:

& - &< - ->" -"' -' / -/

Przykad: evilCode()

Wazny jest kontekstContextExample codeHTML element contentuserInputHTML attribute valueURL query valuehttp://example.com/?parameter=userInputCSS valuecolor: userInputJavaScript valuevar name = "userInput";

...

XSS wykry podatno

Szybki test: '';!--"=&{()}

bez '';

podwjny escape\";alert('XSS');//

brak znakw alfanumerycznychhieroglyphy.com ,jsfuck.com

Uwaga: istniej sposoby omijania filtrw OWASP XSS Filter Evasion Cheat Sheet

Stored XSS w Shareaholic 7.6.0.3

Odkryty przez: @kacperszurek , http://security.szurek.pl/shareaholic-7603-xss.htmlPodatna funkcja:

Zapis: do shareholic_settingsWywietlenie: location_id

NA ADNYM ETAPIE NIE MA FILTRACJI W KODZIE

Stored XSS w Shareaholic 7.6.0.3

Proof of Concept: @kacperszurek

Zalogowany uzytkownik moe wykona atak przeciwko gwnemu administratorowi WP

XSS - zabezpieczanie

Na podstawie OWASP XSS Prevention Cheat SheetEskejpuj niezaufane dane w elementach HTML np. pomidzy

w dynamicznie generowanym JS, handlerach zdarze np. onmouseover,

stylach CSS

odpowiednie biblioteki typu HTML sanitizer

funkcje Wordpress'a np.

inne: ciasteczka z flag HttpOnly, nagwek odpowiedzi X-XSS-Protection, wdroenie polityk Content Security Policy

...DANE...

selector { property : ...DANE...; } property value