Indizierung von PDF für OSINT und Pentesting

By Alejandro Nolla – @z0mbiehunt3r Die meisten von uns nutzen bei der Durchführung von OSINT-Aufgaben oder beim Sammeln von Informationen…

By Alejandro Nolla – @z0mbiehunt3r

Die meisten von uns nutzen bei der Durchführung von OSINT-Aufgaben oder beim Sammeln von Informationen für die Vorbereitung eines Pests Google-Hacking-Techniken wie site:company.acme filetype:pdf „for internal use only“ oder etwas Ähnliches, um nach potenziell sensiblen Informationen zu suchen, die versehentlich hochgeladen wurden. In anderen Fällen bittet uns ein Kunde, herauszufinden, ob er fahrlässig diese Art von sensiblen Informationen weitergegeben hat, und wir machen ein paar Google-Hacking-Funktionen.

Aber was ist, wenn wir diese Abfragen bei Google nicht durchführen und außerdem Links aus der Suche folgen wollen, die möglicherweise Verweise verraten könnten? Natürlich könnten wir Dokumente herunterladen und sie manuell vor Ort überprüfen, aber das ist langweilig und zeitaufwändig. Hier ist der Punkt, an dem Apache Solr ins Spiel, um Dokumente zu verarbeiten und einen Index zu erstellen, der uns fast in Echtzeit Suchfunktionen bietet.

Was ist Solr?

Solr ist eine schemabasierte (auch mit Unterstützung für dynamische Felder) Suchlösung, die auf Apache Lucene aufbaut und Volltextsuchfunktionen, Dokumentenverarbeitung, REST API zum Abrufen von Ergebnissen in verschiedenen Formaten wie XML oder JSON usw. bietet. Mit Solr können wir die Indizierung von Dokumenten mit mehreren Optionen für die Behandlung von Text, die Tokenisierung, die automatische Konvertierung (oder Nichtkonvertierung) in Kleinbuchstaben, den Aufbau von verteilten Clustern, die automatische Erkennung von Duplikaten in Dokumenten usw. durchführen.

Solr einrichten

Es gibt eine Menge Material darüber, wie man Solr installieren daher werde ich hier nicht darauf eingehen, sondern nur auf die spezifischen Kernoptionen für diese Quick’n Dirty-Lösung. Als erstes müssen Sie ein Konfigurations- und ein Datenverzeichnis anlegen. In diesem Fall habe ich /opt/solr/pdfosint/ und /opt/solr/pdfosintdata/ angelegt, um die Konfigurations- bzw. Dokumentendaten zu speichern.

Um das Schema einzurichten, erstellen Sie einfach die Datei /opt/solr/pdfosint/conf/schema.xml mit folgendem Inhalt:

schema.xml Inhalt für pdfosint core

<!--?xml version="1.0" encoding="UTF-8" ?-->
<?xml version="1.0" encoding="UTF-8" ?>
<schema name="pastebincom" version="1.5">
 <fields>
   <field name="id" type="uuid" indexed="true" stored="true" default="NEW" multiValued="false" />
   <field name="text" type="text_general" indexed="true" stored="true"/>
   <field name="timestamp" type="date" indexed="true" stored="true" default="NOW" multiValued="false"/>
   <field name="_version_" type="long" indexed="true" stored="true"/>
   <dynamicField name="attr_*" type="text_general" indexed="true" stored="true" multiValued="true"/>
 </fields>

 <types>
   <fieldType name="string" class="solr.StrField" sortMissingLast="true" />
   <fieldType name="long" class="solr.TrieLongField" precisionStep="0" positionIncrementGap="0"/>
   <fieldType name="date" class="solr.TrieDateField" precisionStep="0" positionIncrementGap="0"/>
   <fieldType name="uuid" class="solr.UUIDField" indexed="true" />
   <fieldType name="text_general" class="solr.TextField" positionIncrementGap="100">
      <analyzer type="index">
        <tokenizer class="solr.WhitespaceTokenizerFactory"/>
        <filter class="solr.LowerCaseFilterFactory"/>
      </analyzer>
      <analyzer type="query">
        <tokenizer class="solr.WhitespaceTokenizerFactory"/>
        <filter class="solr.LowerCaseFilterFactory"/>
      </analyzer>
    </fieldType>
 </types>
</schema>

Ich habe ein id-Feld angegeben, das eindeutig sein soll (UUID), ein Textfeld, um den Text selbst zu speichern, einen Zeitstempel, der auf das Datum gesetzt werden soll, an dem das Dokument in Solr gepusht wird, eine Version, um die Indexversion zu verfolgen (interne Verwendung von Solr zur Replikation usw.) und ein dynamisches Feld namens attr_*, um alle Werte zu speichern, die im Schema nicht angegeben sind und vom Parser bereitgestellt werden. Zuletzt habe ich festgelegt, wie die Indizierung und die Abfrage behandelt werden sollen. Für die Tokenisierung verwende ich Leerzeichen (ich splice Wörter nur auf der Basis von Leerzeichen, ohne mich um spezielle Satzzeichen zu kümmern) und konvertiere sie in Kleinbuchstaben. Wenn Sie mehr über Textverarbeitung wissen möchten, empfehle ich Ihnen Python Textverarbeitung mit NLTK 2.0 Kochbuch als eine Einführung, Natürliche Sprachverarbeitung mit Python für eine tiefer gehende Verwendung (beide auf Python basierend) und Natürliche Sprachverarbeitung Online-Kurs bei Coursera verfügbar.

Der nächste Schritt besteht darin, Solr über den neuen Kern zu benachrichtigen. Dazu fügen Sie einfach /opt/solr/solr.xml/ hinzu .

Neuer Kern für die PDF-Indizierung

<cores>
  ...
  <core name="pdfosint" instanceDir="pdfosint"/>
</cores>

Jetzt müssen Sie Solr nur noch über einen Request Handler mit Funktionen zur Verarbeitung von Binärdokumenten ausstatten, in diesem Fall nur für den pdfosint-Kern. Erstellen Sie dazu /opt/solr/pdfosint/solrconfig.xml (wir können das mitgelieferte Beispiel mit Solr kopieren und bei Bedarf ändern) und geben Sie den Request Handler an:

Einrichten des Solr Request Handlers für binäre Dokumente

 <requestHandler name="/update/extract" class="org.apache.solr.handler.extraction.ExtractingRequestHandler" >
    <lst name="defaults">
        <str name="fmap.content">text</str>
        <str name="lowernames">true</str>
        <str name="uprefix">attr_</str>
        <str name="captureAttr">true</str>
    </lst>
  </requestHandler>

Die Klasse kann je nach Version und Klassennamen geändert werden. fmap.content gibt an, dass der extrahierte Text in einem Feld namens text indiziert wird, lowernames gibt an, dass alle verarbeiteten Dokumente in Kleinbuchstaben umgewandelt werden, uprefix gibt an, wie mit geparsten und nicht in schema.xml bereitgestellten Feldern umgegangen werden soll (in diesem Fall verwenden Sie ein dynamisches Attribut mit dem Suffix attr_) und captureAttr gibt an, dass geparste Attribute in separaten Feldern indiziert werden. Um mehr über ExtractingRequestHandler zu erfahren, gehen Sie bitte hier.

Dazu habe ich /opt/solr/extract/ erstellt und solr-cell-4.2.0.jar aus dem Verzeichnis dist des Solr-Distributionsarchivs kopiert. Außerdem habe ich alles aus contrib/extraction/lib/ wieder aus dem Distributionsarchiv in denselben Ordner kopiert.

Schließlich fügen Sie diese Zeile zu /opt/solr/pdfosint/solrconfix.xml hinzu, um anzugeben, von wo aus die Bibliotheken geladen werden:

...
<lib dir="/opt/solr/extract" regex=".*.jar" />
...

Um mehr über diesen Prozess und weitere Rezepte zu erfahren, empfehle ich dringend Apache Solr 4 Kochbuch.

Indizieren und Graben von Daten

Jetzt haben wir einen Extraktions- und Indizierungs-Handler auf http://localhost:8080/solr/pdfosint/update/extract/, so dass wir die PDFs nur noch an Solr senden und analysieren müssen. Der einfachste Weg ist, die heruntergeladenen PDFs (oder vielleicht aus einer Meterpreter-Sitzung geholt? }:) ) mit curl an Solr zu senden:

$ for i in ls /tmp/pdf/*.pdf; do curl "http://localhost:8080/solr/pdfosint/update/extract/?commit=true" -F "myfile=@$i"; done;

Nach einer gewissen Zeit, die von verschiedenen Faktoren wie Maschinenspezifikationen und Dokumentengröße abhängt, sollten wir einen Index wie diesen erhalten:

Jetzt versuchen wir also eine Abfrage, um Dokumente mit der Phrase „nur für den internen Gebrauch“ zu finden, und Bingo!

Um zu sehen, wie eine Phrase von Solr behandelt und indiziert werden sollte, wenn sie eingereicht wird, können wir eine Analyse mit der integrierten Schnittstelle durchführen:

Ich hoffe, Sie finden dies nützlich und probieren es aus, bis bald!

Den Originalbeitrag von Alejandro Nolla – @z0mbiehunt3r finden Sie hier.

You Might Also Like

Vom Suchunternehmen zum praktischen KI-Pionier: Unsere Vision für 2025 und darüber hinaus

CEO Mike Sinoway gibt Einblicke in die Zukunft der KI und stellt...

Read More

Wenn KI schief geht: Fehlschläge in der realen Welt und wie man sie vermeidet

Lassen Sie nicht zu, dass Ihr KI-Chatbot einen 50.000 Dollar teuren Tahoe...

Read More

Lucidworks Kernpakete: Branchenoptimierte KI-Such- und Personalisierungslösungen

Entdecken Sie unsere umfassenden Core Packages, die Analytics Studio, Commerce Studio und...

Read More

Quick Links