ANTICHAT.XYZ    VIDEO.ANTICHAT.XYZ    НОВЫЕ СООБЩЕНИЯ    ФОРУМ  
Баннер 1   Баннер 2

ANTICHAT — форум по информационной безопасности, OSINT и технологиям

ANTICHAT — русскоязычное сообщество по безопасности, OSINT и программированию. Форум ранее работал на доменах antichat.ru, antichat.com и antichat.club, и теперь снова доступен на новом адресе — 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..
 
Ответить с цитированием

  #2  
Старый 06.11.2007, 18:21
L0rd_Ha0S
Участник форума
Регистрация: 25.01.2006
Сообщений: 158
Провел на форуме:
1000724

Репутация: 361
По умолчанию

To [x26]VOLAND:
Цитата:
А Gui зделать никак?
Честно говоря, не думаю что ради вывода из трёх строчек стоит писать GUI, к тому же программа потеряет свою переносимость, и будет заточена именно под конкретную ОС. Этот исходник будет работать и на *nix, и на винде.
Это не релиз наикрутейшей проги, которой не хватает только gui. Я её писал в первую очередь для себя, чтобы избавить себя от гемора, а так как я пользуюсь только Линуксом, то мне было удобней сделать её именно в консольном варианте, ибо консоль у меня запущена всегда. Если у меня будет время, я подумаю над тем, как примотать к нему GUI, а пока я могу предложить сделать это тебе.
 
Ответить с цитированием

  #3  
Старый 06.11.2007, 21:41
guest3297
Banned
Регистрация: 27.06.2006
Сообщений: 1,614
Провел на форуме:
3887520

Репутация: 2996


По умолчанию

Очень слабо...
 
Ответить с цитированием

SQL-Conv v0.2
  #4  
Старый 08.11.2007, 01:20
L0rd_Ha0S
Участник форума
Регистрация: 25.01.2006
Сообщений: 158
Провел на форуме:
1000724

Репутация: 361
По умолчанию SQL-Conv v0.2

Написал новую версию. Все переписано по-новому. Теперь функции сохраняют результат в памяти, а не выводят его на stdout, так что при желании гуи прикрутить не составит большого труда (кому надо). В первом посте обновил исходник на вторую версию. При компиляции под виндой, не забудьте раскомментировать строку
Код:
#include <malloc.h>
Работоспособность проверена на Linux, FreeBSD(tnx Alexsize), Windows(Vista, на остальных значит тоже будет работать)

P.S. Просьба к людям более опытным чем я - посмотрите исходник (вторую версию), мож найдете какие ошибки, может что-то можно сделать проще чем у меня. Всё-таки опыта у меня пока не так много, так что буду благодарен за любые замечания.

Обе версии лежат здесь:
http://lanham.nm.ru/sources/

Последний раз редактировалось L0rd_Ha0S; 10.11.2007 в 02:55..
 
Ответить с цитированием

  #5  
Старый 08.11.2007, 02:04
KEZ
Banned
Регистрация: 18.05.2005
Сообщений: 1,981
Провел на форуме:
1941233

Репутация: 2726


Question

ОНА ЧТО, НЕ НА ДЕЛФИ???
 
Ответить с цитированием

  #6  
Старый 08.11.2007, 03:07
L0rd_Ha0S
Участник форума
Регистрация: 25.01.2006
Сообщений: 158
Провел на форуме:
1000724

Репутация: 361
По умолчанию

Цитата:
Сообщение от KEZ  
ОНА ЧТО, НЕ НА ДЕЛФИ???
Как видишь =)
 
Ответить с цитированием

  #7  
Старый 08.11.2007, 16:18
guest3297
Banned
Регистрация: 27.06.2006
Сообщений: 1,614
Провел на форуме:
3887520

Репутация: 2996


По умолчанию

Цитата:
Скомпилил под Вистой с через lcc, всё работает на ура.
Крут парень. Главно что под вистой =)
 
Ответить с цитированием

  #8  
Старый 08.11.2007, 18:38
__mad
Участник форума
Регистрация: 04.11.2007
Сообщений: 103
Провел на форуме:
548128

Репутация: 104
По умолчанию

тоже самое только чутка покороче)
Код:
#include <stdio.h>

int main(int argc,char**argv)
{
	if (argc != 2){printf("%s <string>\n",argv[0]);return(1);}
	for(printf("Source -> %s\n",argv[1]),printf("Hex -> 0x"),argv[0]=argv[1];*argv[1];*argv[1]++)
		printf("%x",*argv[1]);
	for(printf("\nAsci -> Char(%d",*argv[0]),*argv[0]++;*argv[0];*argv[0]++)
		printf(",%d",*argv[0]);
	return(printf(");\n"));
}
 
Ответить с цитированием

  #9  
Старый 08.11.2007, 18:55
Shred
Участник форума
Регистрация: 22.05.2006
Сообщений: 232
Провел на форуме:
561037

Репутация: 73
По умолчанию

эх и я тада влеплю свои 5 коп на асп дот нет
в TextBox3 - вписываем строку
в TextBox4 - выводица код типа char(116,101,115,116)

сорц обработки бутона

TextBox4.Text = "";
string sin2 = TextBox3.Text;
string temp = "";
for (int i = 0; i < sin2.Length; i++)
temp += String.Format("{0:d},", (int)sin2[i]);
if (temp == "") return;
temp = temp.Remove(temp.Length - 1);
TextBox4.Text = "char(" + temp + ")";

всё это щастье вист тута
http://shred-11.iis7.parking.ru
 
Ответить с цитированием

  #10  
Старый 08.11.2007, 20:51
KEZ
Banned
Регистрация: 18.05.2005
Сообщений: 1,981
Провел на форуме:
1941233

Репутация: 2726


По умолчанию

Цитата:
char *buffer;
//...
memset(buffer, 0, sizeof(buffer)); // заполняем нашу память нулями
Чел? А ты в курсе, что sizeof(char*) == 4. или 8 на 64-битных пл-х. но никак не количеству байт, которые ты передавал malloc'у.
Я просто не понимаю, если ты основ С не знаешь, то почему бы не писать на делфи?
 
Ответить с цитированием
Ответ



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Обнаружение 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