Результаты поиска
Декодирование T-SQL приведено в C#/VB.NET
Недавно наш сайт был затоплен с возрождением asprox ботнет SQL инъекции атаки. Не вдаваясь в подробности, атака пытается выполнить код SQL, кодируя команды T-SQL в кодированной строке ASCII BINARY. Это выглядит примерно так:
DECLARE%20@S%20NVARCHAR(4000);SET%20@S=CAST(0x44004500...06F007200%20AS%20NVARCHAR(4000));EXEC(@S);--
Я смог расшифровать это в SQL, но я немного опасался делать это, так как я не знал точно, что происходило в то время.
Я попытался написать простой инструмент декодирования, чтобы я мог декодировать этот тип текста, даже не касаясь сервера SQL . Основная часть, которую мне нужно декодировать, - это:
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));
Как правильно перевести эту кодировку без использования SQL Server? Возможно ли это? Я возьму код 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 на массиве байтов, который я смог разобрать до этого момента, я получаю", - + " в результате.
Как мне выяснить, что мне не хватает - нужно ли мне делать "direct cast" для каждого байта вместо того, чтобы пытаться разобрать его?
Эффективно преобразовать шестнадцатеричную строку в целое число в C?
В C, какой самый эффективный способ преобразовать строку из hex цифр в двоичный unsigned int или unsigned long ?
Например, если у меня есть 0xFFFFFFFE , я хочу int со значением base10 4294967294 .
Какие инструменты (бесплатные или другие) вы находите полезными для разработки и отладки C#/C++?
Вот некоторые из них, которые я использую (все они находятся в свободном доступе):
Hex Редактор: Hexplorer
Отладчик: WinDbg
Компилятор Документации: SandCastle
Автоматическая Сборка: Круиз Control.Net
Off-the-Shelf C++ Hex Дамп-Код
Я много работаю с сетевым и последовательным программным обеспечением связи, поэтому мне часто необходимо иметь код для отображения или регистрации hex дампов пакетов данных.
Каждый раз, когда я делаю это, я пишу еще одну процедуру hex-dump с нуля. Я собираюсь сделать это снова, но решил спросить Здесь: есть ли где-нибудь хороший бесплатный код дампа hex для C++?
Особенности, которые я хотел бы:
- N байт на строку (где N каким-то образом настраивается)
- дополнительный дамп ASCII/UTF8 рядом с hex
- настраиваемые отступы, префиксы для каждой строки, суффиксы для каждой строки и т. д.
- минимальные зависимости (в идеале, я бы хотел, чтобы весь код был в заголовочном файле или был фрагментом кода, который я могу просто вставить)
Edit: уточнение: я ищу код, который я могу легко забросить в свои собственные программы для записи в stderr, stdout, файлы журналов или другие подобные выходные потоки. Я не ищу утилиту дампа командной строки hex.