Frage

Kürzlich wurde unsere Website mit dem Wiederaufleben des Themas überschwemmt Asprox-Botnetz SQL-Injektion Attacke.Ohne auf Details einzugehen, versucht der Angriff, SQL-Code durch Kodierung auszuführen T-SQL Befehle in einer ASCII-codierten BINARY-Zeichenfolge.Es sieht ungefähr so ​​aus:

DECLARE%20@S%20NVARCHAR(4000);SET%20@S=CAST(0x44004500...06F007200%20AS%20NVARCHAR(4000));EXEC(@S);--

Ich konnte dies in SQL entschlüsseln, war dabei aber etwas vorsichtig, da ich zu diesem Zeitpunkt nicht genau wusste, was geschah.

Ich habe versucht, ein einfaches Dekodierungstool zu schreiben, damit ich diese Art von Text entschlüsseln kann, ohne ihn überhaupt zu berühren SQL Server.Der Hauptteil, den ich entschlüsseln muss, ist:

CAST(0x44004500...06F007200 AS
NVARCHAR(4000))

Ich habe alle folgenden Befehle ohne Erfolg ausprobiert:

txtDecodedText.Text =
    System.Web.HttpUtility.UrlDecode(txtURLText.Text);
txtDecodedText.Text =
    Encoding.ASCII.GetString(Encoding.ASCII.GetBytes(txtURLText.Text));
txtDecodedText.Text =
    Encoding.Unicode.GetString(Encoding.Unicode.GetBytes(txtURLText.Text));
txtDecodedText.Text =
    Encoding.ASCII.GetString(Encoding.Unicode.GetBytes(txtURLText.Text));
txtDecodedText.Text =
    Encoding.Unicode.GetString(Convert.FromBase64String(txtURLText.Text));

Was ist der richtige Weg, diese Codierung zu übersetzen, ohne SQL Server zu verwenden?Ist es möglich?Ich nehme VB.NET-Code, da ich damit auch vertraut bin.


Okay, ich bin mir sicher, dass mir hier etwas fehlt, also hier ist, wo ich bin.

Da es sich bei meiner Eingabe um eine einfache Zeichenfolge handelt, habe ich nur mit einem Ausschnitt des codierten Teils begonnen – 4445434C41 (übersetzt in DECLA) – und der erste Versuch bestand darin, dies zu tun ...

txtDecodedText.Text = Encoding.UTF8.GetString(Encoding.UTF8.GetBytes(txtURL.Text));

... und alles, was es tat, war, genau das Gleiche zurückzugeben, das ich eingegeben hatte, da jedes Zeichen in ein Byte umgewandelt wurde.

Mir wurde klar, dass ich alle zwei Zeichen manuell in ein Byte analysieren muss, da ich noch keine Methoden kenne, die das bewerkstelligen. Daher sieht mein kleiner Decoder jetzt in etwa so aus:

while (!boolIsDone)
{
    bytURLChar = byte.Parse(txtURLText.Text.Substring(intParseIndex, 2));
    bytURL[intURLIndex] = bytURLChar;
    intParseIndex += 2;
    intURLIndex++;

    if (txtURLText.Text.Length - intParseIndex < 2)
    {
        boolIsDone = true;
    }
}

txtDecodedText.Text = Encoding.UTF8.GetString(bytURL);

Bei den ersten paar Paaren sieht es gut aus, aber dann bricht die Schleife ab, wenn sie das „4C“-Paar erreicht, und sagt, dass die Zeichenfolge das falsche Format hat.

Interessanterweise erhalte ich als Ergebnis „,-+“, wenn ich durch den Debugger gehe und zur GetString-Methode für das Byte-Array gehe, das ich bis zu diesem Punkt analysieren konnte.

Wie finde ich heraus, was mir fehlt? Muss ich für jedes Byte eine „direkte Umwandlung“ durchführen, anstatt zu versuchen, es zu analysieren?

War es hilfreich?

Lösung

Ich ging zurück zu Michaels Beitrag, stocherte noch einmal herum und erkannte, dass ich eine doppelte Konvertierung durchführen musste, und habe schließlich dieses kleine Nugget herausgefunden:

Convert.ToString(Convert.ToChar(Int32.Parse(EncodedString.Substring(intParseIndex, 2), System.Globalization.NumberStyles.HexNumber)));

Von dort aus habe ich einfach eine Schleife erstellt, um alle Zeichen 2 mal 2 durchzugehen, sie zu „hexifizieren“ und dann in einen String zu übersetzen.

An Nick und alle anderen Interessierten: Ich ging voran und habe meine kleine Bewerbung gepostet vorbei CodePlex.Fühlen Sie sich frei, es nach Bedarf zu verwenden/zu ändern.

Andere Tipps

Versuchen Sie, das zu entfernen 0x Erst und dann anrufen Encoding.UTF8.GetString.Ich denke, das könnte funktionieren.

Im Wesentlichen:0x44004500

Entfernen Sie das 0x, dann sind immer zwei Bytes ein Zeichen:

44 00 = D

45 00 = E

6F 00 = o

72 00 = r

Es handelt sich also definitiv um ein Unicode/UTF-Format mit zwei Bytes/Zeichen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top