Wpis z mikrobloga

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 powtarzał się w tym pliku kilkanaście razy?
Na pomoc przychodzą nam encję - czyli coś podobnego do funkcji znajdź i zamień w notatniku.

xml version="1.0"?

]>

&zamien

Parser ten plik będzie bowiem widział następująco:

Bardzo długi tekst
Twórcy standardu wpadli na genialny pomysł, aby treść encji można było przechowywać w zewnętrznych plikach.
I właśnie ta funkcjonalność prowadzi do ataku XXE czyli XML External Entity.

xml version="1.0"?

]>

&xxe

Używając takiej składni atakujący może pobrać dowolny plik z naszego serwera.
Element test bowiem będzie teraz zawierał treść pliku sekret.txt.

Jak zatem chronić się przed tego rodzaju atakiem?
Jednym z rozwiązań jest uruchomienie specjalnego trybu Secure processing:

dbFactory.setFeature(XMLConstants.FEATURE_SECURE_PROCESSING, true);
Błędy tego rodzaju możliwe są w każdym języku programowania, który posiada obsługę XML.

Podobna podatność w PHP.

#programowanie #informatyka #it #hacking #bezpieczenstwo
  • 3