में टी-एसक्यूएल सीएएसटी डीकोडिंग हाल ही में हमारी साइट को Asprox botnetSQL injection हमले के पुनरुत्थान के साथ हटा दिया गया है। विवरण में जाकर, हमला ASCII एन्कोडेड बिनरी स्ट्रिंग में T-SQL कमांड को एन्कोड करके SQL कोड निष्पादित करने का प्रयास करता है। यह इस तरह दिखता है:सी #/वीबीएनईटी
DECLARE%[email protected]%20NVARCHAR(4000);SET%[email protected]=CAST(0x44004500...06F007200%20AS%20NVARCHAR(4000));EXEC(@S);--
मैं एसक्यूएल में इस डिकोड करने में सक्षम था, लेकिन मैं के बाद से मैं यह कर नहीं पता था कि वास्तव में क्या समय हो रहा था, का एक छोटा सावधान था।
मैंने एक साधारण डिकोड उपकरण लिखने की कोशिश की, इसलिए मैं SQL Server को छूए बिना इस प्रकार के टेक्स्ट को डीकोड कर सकता था। मुख्य हिस्सा रहा डीकोड करने की जरूरत है:
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));
एसक्यूएल सर्वर का उपयोग किए बिना इस एन्कोडिंग अनुवाद करने के लिए उचित तरीका क्या है? क्या यह संभव है? मैं वीबीएनईटी कोड लेगा क्योंकि मैं उससे भी परिचित हूं।
ठीक है, मुझे यकीन है कि मुझे यहां कुछ याद आ रहा है, इसलिए यहां मैं कहां हूं।
चूंकि मेरे इनपुट एक बुनियादी स्ट्रिंग है, मैं इनकोडिंग भाग का सिर्फ एक टुकड़ा के साथ शुरू किया - 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);
चीजें जोड़े के पहले जोड़े के लिए अच्छी लगती हैं, लेकिन फिर लूप बाक "4 सी" जोड़ी में जाती है और कहती है कि स्ट्रिंग गलत प्रारूप में है।
दिलचस्प बात यह है कि जब मैं डीबगर से गुजरता हूं और बाइट सरणी पर गेटस्ट्रिंग विधि पर जाता हूं, तो मैं उस बिंदु पर पार्स करने में सक्षम था, मुझे परिणाम के रूप में ", - +" मिलता है।
मैं यह कैसे समझ सकता हूं कि मुझे क्या याद आ रहा है - क्या मुझे इसे बार्स करने के बजाय प्रत्येक बाइट के लिए "सीधी कास्ट" करने की ज़रूरत है?
मेरा उत्तर यहां देखें: [http://stackoverflow.com/questions/32412/whats-the-best-way-of-cleaning-up-after-a-sql-injection#32422 ](http:// stackoverflow.com/questions/32412/whats-the-best-way-of-cleaning-up-after-a-sql-injection#32422) – SQLMenace
हाँ, मैं निश्चित रूप से एसक्यूएल पैरामीटर का उपयोग करके शुरू करूंगा, अगर आप पहले से नहीं हैं । – EndangeredMassa
मैंने कुछ 'उत्तरों' को आज़माने और हल करने के लिए अपनी पूरी कोशिश की, हालांकि उनमें से अधिकतर उत्तर नहीं हैं। इसलिए, गैर-उत्तरों पर टिप्पणियों के लिए अन्य गैर-उत्तरों को परिवर्तित करना संभव नहीं था, इसलिए उन्हें टिप्पणियों में परिवर्तित कर दिया गया। अगर मुझे कुछ गलत मिला, तो कृपया मुझे बताएं। –