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

06.11.2007, 18:21
|
|
Участник форума
Регистрация: 25.01.2006
Сообщений: 158
Провел на форуме: 1000724
Репутация:
361
|
|
To [x26]VOLAND:
Честно говоря, не думаю что ради вывода из трёх строчек стоит писать GUI, к тому же программа потеряет свою переносимость, и будет заточена именно под конкретную ОС. Этот исходник будет работать и на *nix, и на винде.
Это не релиз наикрутейшей проги, которой не хватает только gui. Я её писал в первую очередь для себя, чтобы избавить себя от гемора, а так как я пользуюсь только Линуксом, то мне было удобней сделать её именно в консольном варианте, ибо консоль у меня запущена всегда. Если у меня будет время, я подумаю над тем, как примотать к нему GUI, а пока я могу предложить сделать это тебе. 
|
|
|

06.11.2007, 21:41
|
|
Banned
Регистрация: 27.06.2006
Сообщений: 1,614
Провел на форуме: 3887520
Репутация:
2996
|
|
Очень слабо...
|
|
|

08.11.2007, 01:20
|
|
Участник форума
Регистрация: 25.01.2006
Сообщений: 158
Провел на форуме: 1000724
Репутация:
361
|
|
SQL-Conv v0.2
Написал новую версию. Все переписано по-новому. Теперь функции сохраняют результат в памяти, а не выводят его на stdout, так что при желании гуи прикрутить не составит большого труда (кому надо). В первом посте обновил исходник на вторую версию. При компиляции под виндой, не забудьте раскомментировать строку
Работоспособность проверена на Linux, FreeBSD(tnx Alexsize), Windows(Vista, на остальных значит тоже будет работать)
P.S. Просьба к людям более опытным чем я - посмотрите исходник (вторую версию), мож найдете какие ошибки, может что-то можно сделать проще чем у меня. Всё-таки опыта у меня пока не так много, так что буду благодарен за любые замечания.
Обе версии лежат здесь:
http://lanham.nm.ru/sources/
Последний раз редактировалось L0rd_Ha0S; 10.11.2007 в 02:55..
|
|
|

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

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

08.11.2007, 16:18
|
|
Banned
Регистрация: 27.06.2006
Сообщений: 1,614
Провел на форуме: 3887520
Репутация:
2996
|
|
Скомпилил под Вистой с через lcc, всё работает на ура.
Крут парень. Главно что под вистой =)
|
|
|

08.11.2007, 18:38
|
|
Участник форума
Регистрация: 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"));
}
|
|
|

08.11.2007, 18:55
|
|
Участник форума
Регистрация: 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
|
|
|

08.11.2007, 20:51
|
|
Banned
Регистрация: 18.05.2005
Сообщений: 1,981
Провел на форуме: 1941233
Репутация:
2726
|
|
char *buffer;
//...
memset(buffer, 0, sizeof(buffer)); // заполняем нашу память нулями
Чел? А ты в курсе, что sizeof(char*) == 4. или 8 на 64-битных пл-х. но никак не количеству байт, которые ты передавал malloc'у.
Я просто не понимаю, если ты основ С не знаешь, то почему бы не писать на делфи?
|
|
|
|
 |
|
|
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
|
|
|
|