Конкурс SQL-injection challenge

Всем привет!

В продолжение серии статей 1 2 3 4 5 6 я решил приготовить вам сюрприз в виде таска. По моей оценке сложность задачи 8 из 10 баллов. Предлагаю всем желающим пошевелить мозгами, и испытать свои навыки по внедрению произвольного кода в базы данных.

Условия конкурса

1. Взломать базу данных, и вытащить оттуда secret_key
2. Прислать своё решение мне в л.с. (подробное прохождение)
3. Дать свою оценку сложности таска по 10 балльной шкале

Конкурс продлится 10 дней, окончание конкурса 8 сентября в 23 ч по МСК.

Ответы от зарегистрированных на форуме после старта конкурса НЕ принимаются.

Администрация форума предоставила призы для конкурса:

1. Место - Alfa AWUS036H
2. Место - 500 рублей
3. Место - 500 рублей

Места победителей распределяются по очерёдности решения - кто первый выполнит задание, тот и первый, и т.д.
Запрещается писать до окончания конкурса в теме прохождение и подсказки. После окончания конкурса, будут опубликованы имена победителей и write up.

hacker.gif


GO!!!
 
Спасибо Сереж. Вот это номер. Я ему UNION - Based в итоге сварил, а он говорит грязное.
Так и есть, в твоих запросах 2/3 от payload просто отбрасываются, зачем это писать тогда? Я все забросы для анализа записывал, и дал даже пометку твоему запросу "какая-то жесть".
Будет мега-подробный разбор задачи, сам увидишь сколько мусора ты наделал. Твой запрос не буду публиковать, просто сделаешь выводы, и даже узнаешь для себя что-то новое.
 
Так и есть, в твоих запросах 2/3 от payload просто отбрасываются, зачем это писать тогда? Я все забросы для анализа записывал, и дал даже пометку твоему запросу "какая-то жесть".
Будет мега-подробный разбор задачи, сам увидишь сколько мусора ты наделал. Твой запрос не буду публиковать, просто сделаешь выводы, и даже узнаешь для себя что-то новое.
1) :D Это в мантре было 0xчетотам я конвертил туда сюда. две последние строки снизу
2) Я прекрасно знаю про DIOS
3) Прекрасно знаю про group_concat
4) Вот красивый ' union select 1,0x(' union select <DIOS> -- -)%00; - но это уже вкусовщина.
 
Да я писал не для того чтобы как-то приуменьшить твои достижения, а чтобы ты обратил внимание на недочёты. Часть мелочей была упущена, из-за этого много времени ушло. Можешь до райтапа попробовать ещё обойти фильтр без использования hex.

Твоя воля к победе заслуживает 10 баллов из 10. Если бы все участники проявили бы такую же стойкость, то решивших было бы в разы больше. Райтап будет или сегодня, или завтра вечером/ночью.
 
  • Нравится
Реакции: Сергей Попов
Да я писал не для того чтобы как-то приуменьшить твои достижения, а чтобы ты обратил внимание на недочёты. Часть мелочей была упущена, из-за этого много времени ушло. Можешь до райтапа попробовать ещё обойти фильтр без использования hex.

Твоя воля к победе заслуживает 10 баллов из 10. Если бы все участники проявили бы такую же стойкость, то решивших было бы в разы больше. Райтап будет или сегодня, или завтра вечером/ночью.
Ты меня не так понял. Я не претензии выдвигаю, а говорю, что как мне кажется способ с union-based,сам по себе уже более изящный чем через Blind, Таск огонь, очень хороший, я думал у меня уйдет 10 минут на его решение.
 
Ты меня не так понял. Я не претензии выдвигаю, а говорю, что как мне кажется способ с union-based,сам по себе уже более изящный чем через Blind, Таск огонь, очень хороший, я думал у меня уйдет 10 минут на его решение.

Да, именно через union-based и нужно было решать. Blind, тем более Time-based только усложняют решение.

Участники конкурса, ответьте на один вопрос - хотите ли вы в будущем увидеть ещё таски по SQL сложностью 7-10 баллов?
Более слабые варианты не рассматриваю, ибо для этого есть готовые виртуальные машины типа DVWA.
 
Да, именно через union-based и нужно было решать. Blind, тем более Time-based только усложняют решение.

Участники конкурса, ответьте на один вопрос - хотите ли вы в будущем увидеть ещё таски по SQL сложностью 7-10 баллов?
Более слабые варианты не рассматриваю, ибо для этого есть готовые виртуальные машины типа DVWA.
Мочи, уж следующий я точно решу за сутки.(ставлю свою мышку)
 
  • Нравится
Реакции: Marylin
Хотелось бы глянуть на исходники)
Тут и спрашивать не нужно - да(сам же видел активность). Исходники тоже тиресна.
Мочи, уж следующий я точно решу за сутки.(ставлю свою мышку)

Принято! Таски будут. Сначала подробный райтап будет, исходники чуть позже.
SooLFaa, фото мышки в студию! Она у тебя золотая что ли? )))
 
  • Нравится
Реакции: batu5ai
Райтап готов! Все, кому не удалось решить таск, могут теперь его пройти в спокойной обстановке, и разобраться что к чему.
 
По "просьбам трудящихся" выкладываю код таска.

Сначала создаём базу

create database routed;

Потом заполняем её

CREATE TABLE IF NOT EXISTS fantastik (
ID int(11)UNSIGNED NOT NULL AUTO_INCREMENT,
Name VARCHAR(40) NOT NULL,
Money int(11)UNSIGNED NOT NULL,
PRIMARY KEY (ID)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

INSERT INTO fantastik (Name, Money) VALUES
('Bill', 500000),
('Debil', 100),
('Krokodil', 500),
('Gamadril', 200);


CREATE TABLE IF NOT EXISTS xz (
ID int(11)UNSIGNED NOT NULL AUTO_INCREMENT,
_Name_ VARCHAR(40) NOT NULL,
Text VARCHAR(40) NOT NULL,
PRIMARY KEY (ID)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

INSERT INTO xz (_Name_, Text) VALUES
('token', '3a6f2hj5fd85ar35'),
('schlyapa', 'luser'),
('secret_key', '_your_win_'),
('chuvak','nishtyak');


Картинку hacker.gif берём со страницы таска и закидываем её в папку images
Ну и самое главное, код index.php

HTML:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>SQL Injection</title>
</head>
<body>
<style>
.marginauto {
    margin: 10px auto 20px;
    display: block;
    
}
// Медиа запрос для мобилы
@media (max-width:600px)
{
.marginauto{width: 100%;}
}
</style>
// Данные для обращения к базе
<?php
$server = "localhost";
$user = "root";
$password = "";
$db = "routed";
 
// Открываем соединение
$link = new mysqli($server, $user, $password, $db);
 
// Проверка результата подключения
if ($link->connect_error) {
    die("Подключение не удалось: " . $link->connect_error);
}
// Первый запрос к базе идёт к двум колонкам через параметр id
if(isset($_GET['id']))
{
$id=$_GET['id'];
$id= blacklist($id);
$sql="SELECT ID,Name FROM fantastik WHERE id='$id'";
// Срабатывание алерта первый запрос
$result=mysqli_query($link,$sql);
if(!$result){
echo '<font color= "#0000ff"><H2 align="center">';
echo "Discovered Hacker!";
echo "<br>";
echo "</font></H2>";
echo '<img class="marginauto" src="http://localhost/images/hacker.gif">';
exit;
}
$row = mysqli_fetch_array($result);

    if($row)
    {
      echo '<font color= "#0000ff">';   
      
      
      //echo 'Your Name: ' .$row['Name']; Это вывод из первого запроса, но он закомментирован
      echo "</font>";
      }
    }
// Второй запрос к базе данных для одной колонки

$sql="SELECT Money FROM fantastik WHERE Name='".$row['Name']."'";
  
$result=mysqli_query($link,$sql);
// Срабатывание алерта второй запрос
if(!$result){
echo '<font color= "#0000ff"><H2 align="center">';
echo "Discovered Hacker!";
echo "<br>";
echo "</font></H2>";
echo '<img class="marginauto" src="http://localhost/images/hacker.gif">';

exit;
}
// Вывод из второго запроса
$row = mysqli_fetch_array($result);

    if($row)
    {     
      echo 'Money: ' .$row['Money'];
      }
    else { echo "You Hacker???";}   
// Здесь фильтрация
function blacklist($id)
{
    $id= preg_replace('/or|and|[\s]|--|[+]|[#]|=|[`]/i',"", $id);   
    
    return $id;
}   
?>
<div>
<br>
// Просто текст на странице
<p>Bla-bla-bla!</p>
</div>
</body>
</html>

Теперь можете гонять таск на локалке, и как угодно его модифицировать )
 
Следующий таск будет в октябре. А кто хочет немного пораскинуть мозгами, может зайти опять на и обойти фильтр. Больше ничего не менялось. Совсем уже не сложно, когда был райтап и исходники.
Ну и поскольку это уже не конкурс, то можете обмениваться комментами свободно по обходу фильтра.
 
Следующий таск будет в октябре. А кто хочет немного пораскинуть мозгами, может зайти опять на и обойти фильтр. Больше ничего не менялось. Совсем уже не сложно, когда был райтап и исходники.
Ну и поскольку это уже не конкурс, то можете обмениваться комментами свободно по обходу фильтра.
Спасибо за таск) Было интересно попробовать обойти фильтр, хоть и не получилось
 
Спасибо за таск) Было интересно попробовать обойти фильтр, хоть и не получилось
Ещё раз если ВНИМАТЕЛЬНО прочитать райтап, то фильтр обойти будет проще пареной репы ) А ещё лучше просмотреть исходники, и тогда будет ясно как работает данный фильтр. Алгоритм работы не менялся, просто больше стало фильтроваться разного.

Новый таск будет ещё интереснее и немного сложнее )
 
Мы в соцсетях:

Взломай свой первый сервер и прокачай скилл — Начни игру на HackerLab