सी में डिकोडिंग T-SQL कास्ट # / VB.NET

वोट
48

हाल ही में हमारी साइट के पुनरुत्थान के साथ deluged कर दिया गया है Asprox botnet एसक्यूएल इंजेक्शन हमले। विवरण में जाने के बिना, हमले एन्कोडिंग द्वारा SQL कोड को निष्पादित करने का प्रयास करता है T-SQL एक ASCII एन्कोड की गई बाइनरी स्ट्रिंग में आदेश। यह इस तरह दिखता है:

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

मैं एसक्यूएल में इस डिकोड करने में सक्षम था, लेकिन मैं के बाद से मैं यह कर नहीं पता था कि वास्तव में क्या समय हो रहा था, का एक छोटा सावधान था।

मैं एक साधारण डिकोड उपकरण लिखने का प्रयास किया, तो मैं भी छू के बिना पाठ के इस प्रकार को डिकोड कर सकता है एसक्यूएल सर्वर । मुख्य हिस्सा रहा डीकोड करने की जरूरत है:

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

मैं कोई भाग्य के साथ निम्न कमांड के सभी की कोशिश की है:

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

एसक्यूएल सर्वर का उपयोग किए बिना इस एन्कोडिंग अनुवाद करने के लिए उचित तरीका क्या है? क्या यह संभव है? के बाद से मैं भी उस के साथ परिचित हूँ मैं VB.NET कोड ले लेंगे।


ठीक है, मुझे यकीन है कि मैं यहाँ कुछ याद कर रहा हूँ हूँ, इसलिए यहाँ है, जहां मैं यहां हूं।

चूंकि मेरे इनपुट एक बुनियादी स्ट्रिंग है, मैं इनकोडिंग भाग का सिर्फ एक टुकड़ा के साथ शुरू किया - 4445434C41 (जो decla करने के लिए अनुवाद) - और पहले ही प्रयास यह करने के लिए था ...

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

... और यह सब किया था ठीक उसी बात यह है कि मैं में डाल लौटने के लिए, क्योंकि यह में प्रत्येक वर्ण परिवर्तित था बाइट है।

मुझे एहसास हुआ कि मैं एक बाइट मैन्युअल रूप से मैं अभी तक किसी भी तरीके कि कि क्या करेंगे के बारे में पता नहीं है, इसलिए अब मेरी छोटी डिकोडर कुछ इस तरह दिखता में प्रत्येक दो अक्षर पार्स करने के लिए की जरूरत है:

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

हालात जोड़े की पहली जोड़ी के लिए अच्छे लग रहे हैं, लेकिन फिर पाश जब यह 4C जोड़ी के लिए हो जाता है और कहता है कि स्ट्रिंग गलत फ़ॉर्मेट में है कतरा रही है।

दिलचस्प बात यह है कि जब मैं डिबगर के माध्यम से और बाइट सरणी है कि मैं उस समय तक पार्स करने में सक्षम था पर GetString विधि करने के लिए कदम, मैं , - + परिणाम के रूप में।

मैं बजाय उसे पार्स करने के प्रयास के प्रत्येक बाइट के लिए एक प्रत्यक्ष डाली करने की आवश्यकता है - मैं कैसे यह पता लगाने की क्या मैं याद कर रहा हूँ क्या ज़रूरत है?

01/08/2008 को 16:23
का स्रोत उपयोगकर्ता
अन्य भाषाओं में...                            


2 जवाब

वोट
20

Hazzah !!!!

मैं माइकल के पोस्ट करने के लिए वापस चला गया, कुछ और poking किया था और एहसास हुआ कि मैं एक डबल रूपांतरण करने की ज़रूरत थी, और अंततः इस छोटे डला बाहर काम किया:

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

वहां से मैं बस 2 2 से सभी पात्रों के माध्यम से जाने के लिए और उन्हें "hexified" और फिर एक स्ट्रिंग में अनुवाद किया पाने के लिए एक पाश बना दिया।

निक, और किसी और रुचि के लिए, मैं आगे चला गया और मेरी छोटी आवेदन पोस्ट में अधिक CodePlex । का उपयोग / के रूप में आप की जरूरत को संशोधित करने के लिए स्वतंत्र महसूस।

05/08/2008 को 18:02
का स्रोत उपयोगकर्ता

वोट
7

निकालने का प्रयास करें 0xऔर फिर फोन Encoding.UTF8.GetString। मुझे लगता है कि काम कर सकते हैं।

मूलतः: 0x44004500

0x निकालें, और फिर हमेशा दो बाइट्स एक चरित्र हैं:

44 00 = D

45 00 = E

6F 00 = o

72 00 = r

तो यह निश्चित रूप से दो बाइट्स / चरित्र के साथ एक यूनिकोड / UTF प्रारूप है।

02/08/2008 को 02:38
का स्रोत उपयोगकर्ता

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