Tym razem w #od0dopentestera pod lupę weźmiemy #php

Czasami potrzebujemy umożliwić użytkownikowi pobranie plików z serwera.
Może on pobrać wszystkie pliki z konkretnego katalogu oprócz jednego - nazwanego u nas sekret.txt
$plik = basename((string) $ _GET['plik']);
if (stristr($plik, 'sekret.txt') === false) {
echo file_get_contents ($plik);
}

Funkcja basename usuwa wszystkie znaki ../ oraz ..` z parametru plik.
Dzięki temu jesteśmy pewni, że podany przez użytkownika adres do pliku nie zawiera katalogów nadrzędnych.
KacperSzurek - Tym razem w #od0dopentestera pod lupę weźmiemy #php

Czasami potrzeb...
Kolejna porcja błędów programistycznych #od0dopentestera
Dzisiaj nietypowo, nie będziemy bowiem przyglądać się konkretnemu językowi #programowanie a komendzie unzip z #linux

Czasami wymagania biznesowe sprawiają, że musimy dodać obsługę archiwów do naszego serwisu internetowego.
Mogą to być pliki zip, rar czy też tar.
Załóżmy, że prowadzimy serwis, w którym można tworzyć galerie.
Użytkownik może wysłać kilka zdjęć na raz przesyłając do nas archiwum zip.
Plik ten jest wypakowywany po stronie
KacperSzurek - Kolejna porcja błędów programistycznych #od0dopentestera
Dzisiaj niet...
@MacDada: Nie do końca. Symlink może bowiem wskazywać na Twój tajny obrazek do którego nie mam dostępu, np. /home/user/tajny_obrazek.png (zakładam tutaj oczywiście, że serwer WWW ma uprawnienia do tego pliku no i musze znać jego nazwę).

Wtedy to po wypakowaniu i sprawdzeniu czy plik jest obrazkiem – jeśli dalej podążasz za dowiązaniami symbolicznymi – wyświetlisz swój plik użytkownikowi.

Dodatkowo sprawdzenie czy plik jest tylko obrazkiem i czy nie zawiera niczego złego
Cześć!

Dzisiaj w #od0dopentestera o tym jak odczytać tajne dane z serwera #java przy pomocy plików XML.

public static void main(String[] args) {
try {
File xmlFile = new File("plik.xml");
DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
Document doc = dBuilder.parse(xmlFile);
System.out.println(doc.getDocumentElement().getTextContent());
} catch (Exception e) {
e.printStackTrace();
}
}
}

Przykładowy plik XML wygląda mniej więcej tak:

xml version="1.0"?
demo

Co jeśli demo zastąpimy dłuższym ciągiem znaków, który dodatkowo będzie
KacperSzurek - Cześć!

Dzisiaj w #od0dopentestera o tym jak odczytać tajne dane z s...
W dzisiejszym odcinku #od0dopentestera #podcast Szurkogadanie – czyli o bezpieczeństwie dla wszystkich.

W tym odcinku dowiesz się jak przestępcy używają serwisu Technet #microsoft do prób wyłudzeń na suport techniczny a także dlaczego usypianie firmowego komputera z tajnymi danymi nie jest najlepszym pomysłem z powodu ataku Cold Boot.
Opowiadam również co to jest Rubber ducky – czyli wirtualna klawiatura używana podczas pentestów oraz co zmieniło się w najnowszym Safari na #ios i co
KacperSzurek - W dzisiejszym odcinku #od0dopentestera #podcast Szurkogadanie – czyli ...
Cześć!
Kontynuujemy naszą podróż w cyklu #od0dopentestera dzisiaj język #ruby

Czasami w naszych firmach nie możemy wejść na niektóre strony ponieważ są one zablokowane na firewallu.
Dlatego też stworzymy naszą własną bramkę proxy.

class ProxyServlet < WEBrick::HTTPServlet::AbstractServlet
def do_GET (request, response)
open(request.query["url"]) do |http|
result = http.read
response.body = result
end
end
end

Użytkownik podaje parametr url który jest następnie przekazywany do funkcji open.
Ona to pobiera treść witryny i wyświetla
KacperSzurek - Cześć!
Kontynuujemy naszą podróż w cyklu #od0dopentestera dzisiaj jęz...
@yggdrasil: ssrf najlepiej jakąś zewnętrzną biblioteką, np: ssrf_filter
Trzeba tam bowiem pamiętać o przekierowaniach, które również mogą być niebezpieczne.
Regexpy powinny dać radę o ile używamy \A\z do zaznaczania początku i końca tekstu zamiast ^$
"|dir;\n[https://wykop.pl](https://wykop.pl)" =~ /^http/ działa bowiem bez problemów
Więcej: tu, tu i tu.
Cześć!
W dzisiejszym odcinku #od0dopentestera zaczniemy od języka #python

Co złego może być w 2 linijkach:

imie = input("Twoje imie:")
print ("Witaj ", imie)

Funkcja input to tak naprawdę eval połączony z raw_input(treść) co można sprawdzić tutaj.
Możliwe jest zatem wykonanie dowolnego kodu, eval służy bowiem do dynamicznego wykonywania treści.
Dla przykładu wyświetlimy zawartość bieżącego katalogu.
Przekazywany przez nas ciąg znaków musi się zmieścić w 1 linijce tekstu.
Nie możemy zatem
KacperSzurek - Cześć!
W dzisiejszym odcinku #od0dopentestera zaczniemy od języka #py...
Cześć. Ostatnio są tutaj popularne różnego rodzaju bootcampy. Ja jednak chciałbym zainteresować #programista15k a w szczególności programistów #javascript którzy posiadają już pewną wiedzę z #programowanie i chcieli by poszerzyć swoje umiejętności z #bezpieczenstwo aby tworzyć bezpieczny kod.

Na początek 4 popularne błędy w paczkach NPM do #nodejs

W tym filmie zobaczysz dlaczego łączenie fs.readfile z req.url nie jest najlepszym pomysłem oraz dowiesz się co to jest atak redos.

Jeśli interesują Cię
KacperSzurek - Cześć. Ostatnio są tutaj popularne różnego rodzaju bootcampy. Ja jedna...

źródło: comment_Kv7fcEHFiRdqvUVVb9OgSj39lB0HmRFa.jpg

Pobierz
@tt_2: Nie musisz być programistą aby zostać pentesterem ponieważ w tej pracy człowiek styka się z różnymi językami programowania i ciężko być ekspertem w każdym z nich. Aczkolwiek warto znać przynajmniej jeden język chociażby po to aby tworzyć własne skrypty oraz dogłębnie zrozumieć na czym polega dana podatność.
Typy podatności są standardowe i podobne w każdym języku. Jeśli zrozumiesz na czym polega dany błąd – będziesz w stanie znaleźć go w