Antichat снова доступен.
Форум Antichat (Античат) возвращается и снова открыт для пользователей.
Здесь обсуждаются безопасность, программирование, технологии и многое другое.
Сообщество снова собирается вместе.
Новый адрес: forum.antichat.xyz
SQL-Inj Strings Converter |

06.11.2007, 01:59
|
|
Участник форума
Регистрация: 25.01.2006
Сообщений: 158
Провел на форуме: 1000724
Репутация:
361
|
|
SQL-Inj Strings Converter
Вот, написал конвертер строк в ASCII и НЕX вид. Может быть полезен при проведении sql-инъекций, когда в запросы надо вставить данные в виде char(104,101,108,108,111) или в hex - 0x68656c6c6f. Создан с целью экономии времени. (Что он успешно делает)
Пользоваться так:
Код:
haos@localhost(23:49:49)~ $ sql-conv
Usage: sql-conv 'String for converting'
haos@localhost(23:49:58)~ $ sql-conv 'Hello, World!'
Source string ==> Hello, World!
ASCII string ===> char(72,101,108,108,111,44,32,87,111,114,108,100,33)
HEX string =====> 0x48656c6c6f2c20576f726c6421
haos@localhost(23:50:11)~ $
Исходники лежат тут: http://lanham.nm.ru/sources/
Upd(10 Nov 2007):
P.S. писал для себя, тут выложил только потому , что это может кому-либо пригодиться.
Код:
/* sql-conv.c
Author: L0rd_Ha0S (forum.antichat.ru)
Description: Converting strings to ASCII and HEX codes. For SQL-Inj.
Date: 7 Nov, 2007 21:00
Charset for comments: UTF-8
Version: 0.2
Compiling: gcc -o sql-conv sql-conv.c
*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
//#include <malloc.h> // Needed by Windows. Uncomment this if you use Windows.
void usage(const char *ProgramName);
void word2hex(const char *SourceString, char *ResultBuffer, int string_length);
void word2ascii(const char *SourceString, char *ResultBuffer, int string_length);
int main(int argc, char *argv[])
{
if (argc < 2) // Проверка параметров
usage(argv[0]);
const char *SqlString = argv[1]; // сохраняем исходную строку в SqlString
const int SqlStringLength = strlen(SqlString); // вычисляем длину переданной строки
char *buffer; // будет хранить указатель на нашу память
if (SqlStringLength == 0){
printf(" Source string is empty!\n");
exit (1);
}
else
printf("\n Source string ==> %s\n", SqlString); // выводим исходную строку
/* Выделяем область памяти, в которой будет храниться результирующая строка. Размер выделяемой памяти равен
выражению SqlStringLength*4, т.к. ascii-вид строки(в текстовом виде) будет занимать размер исходя из
=> 1 символ = 3 символа(max) + 1 символ запятой + символ \0. Но т.к. последний символ печатается без запятой,
то место запятой займет символ \0. Для хранения hex-вида(в текстовом представлении) нужно ещё меньше памяти.
Поэтому будем выделять память по-максимуму, т.е. по ascii-виду - SqlStringLength*4 */
if ((buffer = (char *) malloc(SqlStringLength*4)) == 0 ){
printf(" malloc() is failed!\n");
exit (1);
}
memset(buffer, 0, SqlStringLength*4); // заполняем нашу память нулями
word2ascii(SqlString, buffer, SqlStringLength);
printf("\n ASCII string ===> char(%s)\n", buffer);
memset(buffer, 0, SqlStringLength*4); // очищаем буфер для вызова word2hex()
word2hex(SqlString, buffer, SqlStringLength);
printf("\n HEX string =====> %s\n\n", buffer);
free(buffer); // Освобождаем память, которую мы использовали для хранения результата
exit (0);
}
/* usage() */
void usage(const char *ProgramName)
{
printf(" Usage: %s \'String for converting\'\n", ProgramName);
exit (0);
}
/* Функция word2hex() конвертирует переданную ей строку в hex вид, результат сохраняется в выделенной для этого
области памяти. Принимает 3 параметра: 1й - указатель на строку, которую нужно отконвертировать,
2й - указатель на область памяти, где будет храниться результат выполнения, 3й - длина исходной строки в символах (strlen()) */
void word2hex(const char *SourceString, char *ResultBuffer, int string_length)
{
int i; // счётчик символов
char buf_tmp[3]; // буфер, хранящий текстовое значение hex-кода символа.
for (memcpy(ResultBuffer, "0x", sizeof("0x")) && (i = 0); i < string_length; i++){
snprintf(buf_tmp, sizeof("%x"), "%x", SourceString[i]);
strcat(ResultBuffer, buf_tmp);
}
}
/* Функция word2ascii() конвертирует переданную ей строку в ascii вид, результат сохраняется в выделенной для этого
области памяти. Принимает 3 параметра: 1й - указатель на строку, которую нужно отконвертировать,
2й - указатель на область памяти, где будет храниться результат выполнения, 3й - длина исходной строки в символах (strlen()) */
void word2ascii(const char *SourceString, char *ResultBuffer, int string_length)
{
int i; // счётчик символов
char buf_tmp[5]; // буфер, хранящий текстовое значение hex-кода символа.
for (i = 0; i < string_length; i++){
if (i != (string_length - 1)){
if (SourceString[i] < 100){
snprintf(buf_tmp, sizeof("%2d,"), "%2d,", SourceString[i]);
strcat(ResultBuffer, buf_tmp);
}
else{
snprintf(buf_tmp, sizeof("%3d,"), "%3d,", SourceString[i]);
strcat(ResultBuffer, buf_tmp);
}
}
else{
if (SourceString[i] < 100){
snprintf(buf_tmp, sizeof("%2d"), "%2d", SourceString[i]);
strcat(ResultBuffer, buf_tmp);
}
else{
snprintf(buf_tmp, sizeof("%3d"), "%3d", SourceString[i]);
strcat(ResultBuffer, buf_tmp);
}
}
}
}

Последний раз редактировалось L0rd_Ha0S; 10.11.2007 в 02:48..
|
|
|
|
|
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
|
|
|
|