If you can't read please download the document
Upload
secmanpl
View
230
Download
1
Embed Size (px)
Citation preview
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