Dekodierungs T-SQL CAST in C # / VB.NET

stimmen
48

Vor kurzem unserer Website wurde mit dem Wiederaufleben der schwemmt Asprox Botnet SQL - Injection - Attacke. Ohne ins Detail zu gehen, versucht der Angriff SQL - Code auszuführen durch Codieren der T-SQL - Befehle in einer ASCII - Binärkette codiert. Es sieht etwa 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, aber ich war ein wenig vorsichtig, dies zu tun, da ich nicht genau wusste, was zu der Zeit geschieht.

Ich habe versucht , ein einfaches Werkzeug dekodieren zu schreiben, so konnte ich diese Art von Text , ohne auch nur zu berühren dekodieren SQL Server . Der Hauptteil I decodiert müssen , ist:

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

Ich habe alle der folgenden Befehle ohne Glück versucht:

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, um diese Codierung zu übersetzen, ohne SQL Server zu verwenden? Ist es möglich? Ich werde VB.NET-Code nehmen, da ich damit zu vertraut bin.


Okay, ich bin sicher, ich bin etwas fehlt hier, also hier, wo ich bin.

Da meine Eingabe eine grundlegende Zeichenfolge ist, begann ich mit nur einen Ausschnitt aus der codierten Teil - 4445434C41 (was Decla übersetzt) ​​- und der erste Versuch war, dies zu tun ...

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

... und es tat, war genau die gleiche Sache zurück, die ich in setzen, da es Byte jedes Zeichen in umgewandelt wird.

Ich erkannte, dass ich jeweils zwei Zeichen in ein Byte analysieren müssen manuell, da ich weiß nicht von irgendwelchen Methoden noch, dass das tun, so jetzt mein kleiner Decoder etwas wie folgt aussieht:

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);

Es sieht für die ersten paar Paare gut, aber dann wird die Schleife stockt, wenn es um das „4C“ Paar bekommt und sagt, dass die Zeichenfolge im falschen Format ist.

Interessanterweise, wenn ich durch den Debugger und die GetString-Methode auf dem Byte-Array Schritt, die ich in der Lage war zu diesem Zeitpunkt zu analysieren, bekomme ich „- +“ als das Ergebnis.

Wie kann ich herausfinden, was mir fehlt - muss ich eine „direkte Besetzung“ für jedes Byte tun, anstatt zu versuchen, es zu analysieren?

Veröffentlicht am 01/08/2008 um 16:23
quelle vom benutzer
In anderen Sprachen...                            


2 antworten

stimmen
7

Versuchen Sie, das Entfernen 0xund dann rufen Encoding.UTF8.GetString. Ich denke , dass arbeiten kann.

Im Wesentlichen: 0x44004500

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

44 00 = D

45 00 = E

6F 00 = o

72 00 = r

So ist es auf jeden Fall ein Unicode / UTF-Format mit zwei Bytes / Zeichen.

Beantwortet am 02/08/2008 um 02:38
quelle vom benutzer

stimmen
20

Hazzah !!!!

Ich ging zurück zu Michael Post, haben einige Stoßend und erkennen, dass ich brauchte eine doppelte Umwandlung zu tun, und schließlich arbeitete dieses kleine Nugget aus:

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

Von dort habe ich einfach eine Schleife gehen durch alle Zeichen 2 von 2 und erhalten sie „hexified“ und dann in einen String übersetzt.

Nick, und jemand anderes interessiert, ging ich weiter und habe meine kleine Anwendung in über CodePlex . Fühlen Sie sich frei zu verwenden / ändern , wie Sie benötigen.

Beantwortet am 05/08/2008 um 18:02
quelle vom benutzer

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more