ANTICHAT.XYZ    VIDEO.ANTICHAT.XYZ    НОВЫЕ СООБЩЕНИЯ    ФОРУМ  
Баннер 1   Баннер 2
Antichat снова доступен.
Форум Antichat (Античат) возвращается и снова открыт для пользователей. Здесь обсуждаются безопасность, программирование, технологии и многое другое. Сообщество снова собирается вместе.
Новый адрес: forum.antichat.xyz
Вернуться   Форум АНТИЧАТ > Программирование > С/С++, C#, Delphi, .NET, Asm
   
 
 
Опции темы Поиск в этой теме Опции просмотра

SQL-Inj Strings Converter
  #1  
Старый 06.11.2007, 01:59
L0rd_Ha0S
Участник форума
Регистрация: 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..
 
Ответить с цитированием
 



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Обнаружение Sql инъекций в Oracle, часть вторая k00p3r Чужие Статьи 0 13.06.2005 11:26
Sql инъекция и Oracle, часть первая k00p3r Чужие Статьи 0 13.06.2005 11:23
Внедрение Sql кода с завязанными глазами k00p3r Чужие Статьи 0 12.06.2005 20:48
SQL Injection в Oracle k00p3r Чужие Статьи 0 12.06.2005 12:41



Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 


Быстрый переход




ANTICHAT.XYZ