Dodany: 2019-01-11 05:24:59 | Ostatnio wołany: 2019-01-11 05:27:55


Czasami programiści zakładają, że niektóre funkcje są bezpieczne ze względu na swoją naturę.
Co bowiem złego może się stać podczas sprawdzania czy dany plik istnieje na dysku.
Funkcja file_exists przyjmuje tylko jeden parametr i zwraca prawdę lub fałsz.
Ale jak to w #od0dopentestera bywa - diabeł tkwi w szczegółach.

class aplikacja {
function __construct($name) {
$this->name = 'pliki/'.$name;

if (strpos($this->name, "..") !== false) {
die('HACKER');
}

if (!file_exists($name)) {
echo 'PLIK NIE ISTNIEJE';
}
}

function __destruct() {
unlink($this->name);
}


}

W tym kawałku kodu sprawdzamy, czy plik o danej nazwie istnieje w katalogu pliki.
Jeżeli tak - usuwamy go przy pomocy funkcji unlink.

Chcemy obsługiwać wyłącznie ten jeden katalog - chronimy się przed atakiem path traversal sprawdzając, czy nie podano podwójnych kropek.
To chroni nas przed ciągami w stylu ./pliki/../../inny_katalog/.

Niektóre funkcje związane z odczytywaniem plików z dysku obsługują tak zwane wrapery.
To tak naprawdę inna nazwa na obsługę danego protokołu np. http czy https.
#php obsługuje format PHAR - czyli pewnego rodzaju archiwa, które mogą przechowywać całą aplikację w jednym pliku.
Można to porównać do plików JAR w Java.

Archiwum oprócz treści plików przechowuje także metadane.
Są one trzymane w zserializowanej formie - oznacza to że do ich odczytu używana jest funkcja unserialize.
Ona to jest niebezpieczna - ponieważ podczas jej użycia interpreter automatycznie wywołuje magiczne metody - co może doprowadzić do ataku object injection.

Wystarczy więc stworzyć paczkę PHAR z obiektem aplikacja, w której name ustawiamy na złośliwą wartość.
Taki plik wysyłamy na serwer a następnie odnosimy się do niego przy użyciu funkcji file_exists wykorzystując protokół phar://.
Wtedy to dany plik zostanie otwarty a podczas deserializacji metadanych zostanie wywołana magiczna metoda __destruct.
Dzięki temu możemy usunąć dowolny plik i ominąć zabezpieczenie.

Jeżeli chcesz być wołany dodaj się do Mirkolisty.
Masz pytanie na temat bezpieczeństwa? Zadaj je na grupie od 0 do pentestera na Facebooku.

#security #bezpieczenstwo #programowanie #programista15k #informatyka #it #nauka #technologia #ciekawostki #gruparatowaniapoziomu

Przejdź do wpisu

Dodany: 2019-01-07 14:34:59 | Ostatnio wołany: 2019-01-07 14:35:41


Co to są Canary Tokens i jak można wykorzystać je do wykrycia włamania we wczesnej jego fazie.
Jakie informacje na temat naszych zakupów posiada Google?
Czy hasła maskowane stosowane w bankach to rzeczywiście taki dobry pomysł?
Jak przekonać użytkownika do zainstalowania złośliwego oprogramowania przy pomocy HTML?
O metodzie ataku poprzez kabel USB podpinany do komputera.

Masz pytanie na temat bezpieczeństwa? Zadaj je na grupie od 0 do pentestera na Facebooku.
Jeżeli chcesz być wołany dodaj się do Mirkolisty.

#od0dopentestera #bezpieczenstwo #programowanie #informatyka #it #nauka #technologia #ciekawostki

Przejdź do wpisu

Dodany: 2018-12-24 10:19:23 | Ostatnio wołany: 2018-12-24 10:20:04


Jak działa atak Business Email Compromise?
Czy phishing może doprowadzić do ewakuacji szkoły?
Jak nie cenzurować internetowych map?
Czy można wykraść tajne dane z telefonu, jeżeli podłączymy go do złośliwej ładowarki?

Masz pytanie na temat bezpieczeństwa? Zadaj je na grupie od 0 do pentestera na Facebooku.
Jeżeli chcesz być wołany dodaj się do Mirkolisty.

#od0dopentestera #bezpieczenstwo #programowanie #informatyka #it #nauka #technologia #ciekawostki

Przejdź do wpisu

Dodany: 2018-12-20 09:11:04 | Ostatnio wołany: 2018-12-20 09:11:54


Poliglota to osoba znająca wiele języków. Ale termin ten ma również znaczenie w odniesieniu do kwestii związanych z bezpieczeństwem.
Dzisiaj w od #od0dopentestera 0dopentestera o plikach polyglot, które przyspieszają testowanie aplikacji internetowych.

Weźmy prosty atak XSS.
Dochodzi do niego jeżeli programista nie będzie odpowiednio filtrował danych pochodzących od użytkownika.
Te dane, mogą być wyświetlane na stronie w różnych miejscach - tak zwanych kontekstach.
Standardowo jeden payload - to jeden kontekst.

Aby sprawdzić czy błąd występuje w różnych kontekstach potrzebujemy różnych ciągów znaków.
Dlatego też w celu oszczędności czasu wykorzystuje się tak zwane polygloty.
Są to specjalnie ciągi znaków, które zostały przygotowane w taki sposób, aby działały w wielu kontekstach równocześnie.
Warto spojrzeć na stronę konkursu na najkrótszy polyglot, który jest w stanie przetestować aż 20 różnych miejsc na raz.

Tą idee można z powodzeniem stosować w innych miejscach np. w atakach SQL Injection.
Można tak również omijać wbudowane mechanizmy bezpieczeństwa tworząc plik .jpg, który równocześnie jest prawidłowym kodem #javascript

Masz pytanie na temat bezpieczeństwa? Zadaj je na grupie od 0 do pentestera na Facebooku.
Jeżeli chcesz być wołany dodaj się do Mirkolisty.

#security #bezpieczenstwo #programowanie #programista15k #informatyka #it #nauka #technologia #ciekawostki #gruparatowaniapoziomu

Przejdź do wpisu

Dodany: 2018-12-17 14:35:53 | Ostatnio wołany: 2018-12-17 14:36:30


Jak działają dynamicznie generowane domeny i dlaczego są wykorzystywane w malware?
Co to jest atak miliarda uśmiechów, inaczej nazywany bombą XML?
Jak jednemu z badaczy udało się stworzyć własny adres e-mail w domenie google.com?
Czy znasz popularne błędy w smart kontraktach Ethereum?
A na koniec opis ataku Cross-Site Search wykorzystujący długie zapytania w systemach zgłaszania błędów.

#podcast Szurkogadanie - zestawienie ciekawych informacji o #bezpieczenstwo
Dostępny również na Spotify oraz Google i Apple Podcasts.

Jeżeli chcesz być wołany dodaj się do Mirkolisty.

Masz pytanie na temat #security? Zadaj je na grupie od 0 do pentestera na Facebooku.

#programowanie #swiat #informatyka #it #nauka #technologia #ciekawostki #gruparatowaniapoziomu

Przejdź do wpisu

Dodany: 2018-12-13 05:35:03 | Ostatnio wołany: 2018-12-13 05:36:37


Jak wyglądają realne błędy w aplikacjach?
W dzisiejszym odcinku #od0dopentestera pokażę Ci 4 błędy w oprogramowaniu Kallithea, które umożliwiają dostęp do cudzych danych.

Kallithea to serwer #git napisany w #python

Uprawnienia w całej aplikacji są weryfikowane przy pomocy dekoratorów.

Za każdym razem gdy chcemy sprawdzić czy użytkownik posiada dostęp do danej funkcjonalności - zamiast wywoływać funkcję HasRepoPermission - możemy użyć dekoratorów.

@HasRepoPermissionAllDecorator('repository.admin')
def delete(self, repo_name):

Takie rozwiązanie poprawia czytelność kodu, ale jeżeli nie umieścimy żadnego dekoratora przed funkcją - aplikacja będzie myślała, że dany użytkownik ma pełne uprawnienia do danej funkcjonalności.

W tym wypadku programiści zapomnieli o dekoratorze w miejscu, które było odpowiedzialne za ustawianie odpowiednich uprawnień dostępu do repozytorium.

Wystarczyło więc znać nazwę cudzego repozytorium i ustawić siebie jako administratora.

Drugi błąd znajdował się w interfejsie API.

Aplikacja pozwalała na tworzenie repozytoriów na podstawie innych repozytoriów.

Standardowe użycie to podanie adresu http interesującego nas repozytorium - na przykład na Githubie.

Ale git pozwala również na klonowanie lokalnych repozytoriów - przy użyciu normalnej ścieżki do katalogu.

Jeżeli znaliśmy nazwę używaną przez innego użytkownika - mogliśmy przewidzieć w jakim katalogu Kallithea trzyma wszystkie potrzebne dane.

Następnie wystarczyło podać tą ścieżkę podczas tworzenia nowego repozytorium i kod do którego nie posiadaliśmy dostępu, nagle okazuje się być dostępny.

Więcej informacji na temat tych błędów na moim blogu.

Jeżeli chcesz być wołany dodaj się do Mirkolisty.
Masz pytanie na temat bezpieczeństwa? Zadaj je na grupie od 0 do pentestera na Facebooku.

#security #bezpieczenstwo #programowanie #programista15k #informatyka #it #nauka #technologia #ciekawostki #gruparatowaniapoziomu

Przejdź do wpisu

Dodany: 2018-12-11 13:41:46 | Ostatnio wołany: 2018-12-11 13:42:26


Co to jest atak na pomoc techniczną i jak nie dać się nabrać.
Czy kradzież danych z mieszkania przy pomocy żarówek jest możliwa?
Jak wykorzystać Google Translate jako serwer proxy?
Atak gorszy niż spam - email flooding.
Znajdowanie drukarek podpiętych do Internetu przy pomocy serwisu Shodan.

#podcast Szurkogadanie - zestawienie ciekawych informacji o #bezpieczenstwo
Dostępny również na Spotify oraz Google i Apple Podcasts.

Jeżeli chcesz być wołany dodaj się do Mirkolisty.
Masz pytanie na temat #security? Zadaj je na grupie od 0 do pentestera na Facebooku.

#od0dopentestera #programowanie #swiat #informatyka #it #nauka #technologia #ciekawostki #gruparatowaniapoziomu

Przejdź do wpisu

Dodany: 2018-12-07 07:28:43 | Ostatnio wołany: 2018-12-07 07:29:51


postMessage pozwala na wymienianie danych pomiędzy różnymi domenami przy użyciu #javascript
Dzisiaj w #od0dopentestera o tym, jak sprawdzić źródło wiadomości oraz dlaczego nie używać wyrażeń regularnych do tego celu.

window.addEventListener("message", function(message) {
alert(message.data);
}

Jeżeli na stronie umieścimy taki kawałek kodu, dowolna inna witryna będzie mogła przesłać do naszej domeny wiadomość i wyświetlić ją użytkownikowi:

document.getElementById("f").contentWindow.postMessage("Wiadomość", "*");

Jest to możliwe ponieważ nie sprawdzamy skąd pochodzi taka wiadomość.
Powinniśmy pozwalać na wykonanie akcji tylko zaufanym stroną.
W tym celu przeglądarka do każdej wiadomości dodaje pole origin, w którym zawarta jest nazwa domeny próbującej przesłać wiadomość:

if (message.origin == "http://naszadomena.local")

Ale ciągi znaków można sprawdzać na różne sposoby, na przykład przy użyciu wyrażeń regularnych:

if (/^http\/\/www.domena.local$/.test(message.origin))

Łatwo wtedy zapomnieć, że kropka - oznacza dowolny jeden znak.
Aby sprawdzać czy jest tam rzeczywiście kropka - musielibyśmy poprzedzić ją \.
W tym przypadku dane można również wysłać z wwwXdomena.local czy też wwwYdomena.local.

if (message.origin.indexOf("www.domena2.local") > 0)

Funkcja indexOf zwraca offset pod którym odnalazła poszukiwany ciąg.
Sprawdza zatem czy podany tekst znajduje się gdziekolwiek.
Aby obejść ten filtr możemy stworzyć subdomenę: www.domena2.local.innadomena.local

Jeżeli chcesz być wołany dodaj się do Mirkolisty.
Masz pytanie na temat bezpieczeństwa? Zadaj je na grupie od 0 do pentestera na Facebooku.

Ps. Zapraszam do obserwowania tagu autorskiego #od0dopentestera

#security #bezpieczenstwo #programowanie #programista15k #informatyka #it #nauka #technologia #ciekawostki #gruparatowaniapoziomu

Przejdź do wpisu

Dodany: 2018-12-03 14:35:47 | Ostatnio wołany: 2018-12-03 14:36:43


Jak przy pomocy zakupów w supermarketach sprawdzić czy jesteś w ciąży?
Co to jest atak homograficzny na domeny internetowe?
Jak stworzyć odcisk palca pasujący do wielu osób?
Nowa metoda rozpowszechniania złośliwego oprogramowania przy pomocy obrazów iso.
Dlaczego atakujący próbują zdobyć nasze dane do Spotify?

#podcast Szurkogadanie - cotygodniowe zestawienie najciekawszych wiadomości ze świata bezpieczeństwa komputerowego.

Jeżeli chcesz być wołany dodaj się do Mirkolisty.
Masz pytanie na temat bezpieczeństwa? Zadaj je na grupie od 0 do pentestera na Facebooku.

Ps. Zapraszam do obserwowania tagu autorskiego #od0dopentestera

#security #bezpieczenstwo #programowanie #informatyka #it #nauka #technologia #ciekawostki #hacking #gruparatowaniapoziomu

Przejdź do wpisu

Dodany: 2018-11-30 08:39:18 | Ostatnio wołany: 2018-11-30 08:46:23


Dzisiaj w #od0dopentestera o ataku: Cross-Site Websocket Hijacking na przykładzie #java
Dawniej, aby na stronie treści pojawiały się w czasie rzeczywistym należało z poziomu #javascript co kilka sekund wysyłać żądanie do serwera.
Teraz do tego celu wykorzystuje się websockety.

@ServerEndpoint(value="/endpoint")
public class socketer {
@OnMessage
public void onMessage(String message, Session session) {
session.getBasicRemote().sendText("tajny socket:"+message);
}
}

Jeżeli coś pojawi się na websockecie - odsyłam tą treść do użytkownika dodając do niej tekst.
Równocześnie mamy stronę, która próbuje się połączyć z endpointem.

var w = new WebSocket('ws://dobradomena.local/endpoint');
w.onmmessage = function(e) {
alert(e.data);
};
w.onopen = function(e) {
w.send('Hej!');
};

Jak działa taka komunikacja?

Nasza strona wysyła żądanie HTTP, w którym informuje, że chce przejść na websockety.
W odpowiedzi, serwer zwraca kod 101 i od tego momentu komunikacja odbywa się na podstawie ramek.

Gdzie jest błąd?

Aby uprościć przykład - nie jest w nim widoczna żadna metoda autoryzacji.
Załóżmy więc, że aby połączyć się z endpointem użytkownik musi posiadać prawidłowe ciasteczko.

Skopiujmy teraz nasz kod i umieśćmy go na innej domenie.
Tam również będzie działał prawidłowo. Dlaczego?

W kodzie #js odnosimy się do dobrejdomeny.
Podczas inicjalizacji połączenia z websocketem najpierw wysyłane jest żądanie HTTP.
Przeglądarka widząc więc dobradomena.local dołączyła do niej pasujące ciasteczko.
Serwer sprawdził ciasteczko i zwrócił odpowiedni socket.
Tym samym zła domena może odczytywać oraz zapisywać do niego dowolne dane.

Atakujący nie musiał posiadać hasła użytkownika.
Wystarczy, że atakowana osoba była wcześniej zalogowana.

Jak zatem uchronić się przed tym atakiem?

Przeglądarka do żądań dodaje również nagłówek origin, w którym zawiera nazwę domeny, od której pochodzi dane zapytanie.
Możemy zatem sprawdzać jego treść po stronie serwera - i weryfikować czy żądanie pochodzi z naszej witryny.
Wtedy - nawet jeżeli ciasteczko jest prawidłowe - a żądanie pochodzi z obcej domeny - będziemy je w stanie rozpoznać.

Jeżeli chcesz być wołany dodaj się do Mirkolisty.
Masz pytanie na temat bezpieczeństwa? Zadaj je na grupie od 0 do pentestera na Facebooku.

Ps. Zapraszam do obserwowania tagu autorskiego #od0dopentestera

#security #bezpieczenstwo #programowanie #informatyka #it #nauka #technologia #ciekawostki #hacking #gruparatowaniapoziomu

Przejdź do wpisu
Założona przez:

KacperSzurek

Osób na liście: 172
Wołań: 80
Lista tagu "od 0 do pentestera" gdzie publikuje informacje na temat szeroko pojętego bezpieczeństwa komputerowego.

Kategoria: Nauka i newsy

Ostatnie wydarzenia (zobacz wszystkie)


2020-02-20 00:20:44
@Tobol dołączył do listy


2020-02-19 21:39:46
@Ochaj dołączył do listy


2020-02-19 21:22:31
@dasdwe dołączył do listy


2020-02-19 16:13:53
@drobny dołączył do listy


2020-02-19 14:16:00
@adrian__23 dołączył do listy


2020-02-19 14:02:22
@BaRu dołączył do listy


2020-02-19 10:28:09
@djhardfall opuścił listę


2020-02-19 07:41:41
@LuGo_ opuścił listę


2020-02-19 06:35:25
@KacperSzurek zawołał do wpisu


2020-02-18 09:57:21
@dracorp dołączył do listy