Решил рассказать про CTF
Итак,
Предстоит 48 тасков, каждый назван в честь мифического существа. Правила простые:
- Не атаковать другие БД
- Не эксплуатировать сервер
- Не ДДосить
После прохождения всех монстров победителя добавят в Зал Славы. У каждого или почти каждого таска может быть несколько решений. Поэтому прежде чем открывать спойлер с решением, рекомендую самому попробовать несколько вариантов. Во много таски достаточно простые и сложности начинаются после 17-20 таска.
1. Первый монстр - Gremlin
Перед нами страница, показывающая запрос БД и код php. Что может быть проще? Проверяются "prob", "_", ".", "(", ")" не зависимо от регистра. Иначе выскакивает сообщение "No Hack ~_~". Так же еще раз напоминают про правила не атаковать другие таблицы.
Нам нужно выбрать любой существующий id из таблицы и тогда пройдем таск.
2. Далее следует - Cobolt (скорее всего имелся в виду Cobold)
Здесь опять же проверяются "prob", "_", ".", "(", ")". Но теперь надо выбрать id админа.
3. Goblin
Нам надо пройти с id админа. К проверке добавляются одинарная, двойная и обратная кавычка.
Но они нам и не понадобятся.
4. Orc
"Сфоткай меня как будто я хакер"
Тут добавилась вторая проверка, уже недостаточно для прохода просто указать админа. Нужен также правильный пароль
5. Wolfman
К фильтрации "prob", "_", ".", "(", ")" добавляется пробел
Также в запросе уже указан id как guest, а нам надо пройти под id=admin
6. Darkelf
Тут идет проверка на 'prob', '_', '.', '(', ')', 'or', 'and'. Чтобы пройти таск, нам нужно пройти под админом. Все очень просто.
7. Orge
Выглядит угрожающе, но этот таск - одна из комбинаций того, что мы уже проходили.
8. Troll
Фильтруются кавычки и 'admin'. И нам как раз надо подставить в id значение admin.
9. Vampire
Фильтруются кавычки и 'admin', все переводится в нижний регистр
Следующие пять противников - комбинация из предыдущих тасков, не представляющие какой-либо сложности и оригинальности. Поэтому пробежимся галопом.
10-15. Skeleton, Golem, DarkKnight, Bugbear, Giant, Assassin
16. Succubus
Здесь уже поинтересней, много фильтров.
Дальше таски намного интересней, честно. Продолжим?
Ссылка скрыта от гостей
, которую я проходил. Это не совсем CTF в привычном понимании: нет флагов. Надо пройти таски один за одним с помощью SQL Injection. Мне очень помог курс SQLi Master, без него я не смог продвинуться дальше пятого таска. Поэтому всем советую, кто интересуется SQLi. Это первая часть, если будет интересно - напишите коммент, продолжу. Хотел сначала разбить на две части, но лень писать сразу. Поэтому эта 1/3.The Lord of the SQLi:The Fellowship of the SQLi, 2021
Антураж прикольный, картинки добавил от нейросетей.Предстоит 48 тасков, каждый назван в честь мифического существа. Правила простые:
- Не атаковать другие БД
- Не эксплуатировать сервер
- Не ДДосить
После прохождения всех монстров победителя добавят в Зал Славы. У каждого или почти каждого таска может быть несколько решений. Поэтому прежде чем открывать спойлер с решением, рекомендую самому попробовать несколько вариантов. Во много таски достаточно простые и сложности начинаются после 17-20 таска.
1. Первый монстр - Gremlin
Перед нами страница, показывающая запрос БД и код php. Что может быть проще? Проверяются "prob", "_", ".", "(", ")" не зависимо от регистра. Иначе выскакивает сообщение "No Hack ~_~". Так же еще раз напоминают про правила не атаковать другие таблицы.
Нам нужно выбрать любой существующий id из таблицы и тогда пройдем таск.
Добавляем кавычку и true, не забываем про комментарий. Все ненужное нам отбрасывается из запроса и Gremlin clear!
2. Далее следует - Cobolt (скорее всего имелся в виду Cobold)
Здесь опять же проверяются "prob", "_", ".", "(", ")". Но теперь надо выбрать id админа.
После первого таска, когда разобрались как все работает - cobolt пролетает за пару секунд Пишем в id=admin, все остальное отбрасываем
3. Goblin
Нам надо пройти с id админа. К проверке добавляются одинарная, двойная и обратная кавычка.
Но они нам и не понадобятся.
Как мы видим из кода, no={$_GET[no]} без обрамления, поэтому кавычки вообще не нужны для инъекции.
.php?no=0 - нет реакции
.php?no=1 - Hello, Guest. Хорошо, но не то что нужно. Нам нужен админ
Возвращаемся к нулю, добавляем логический оператор or и истинное значение, к примеру, true.
Hello, Guest
Далее у меня был тупик. Я перепробовал много вариантов и случайно попробовал limit... и это сработало!
Сначала проверил с первой строки
.php?on=0%20or%201=1%20limit%200,1
Потом пропустил первую строку
.php?no=0%20or%201=1%20limit%201,1
И получил:
Идем дальше!
.php?no=0 - нет реакции
.php?no=1 - Hello, Guest. Хорошо, но не то что нужно. Нам нужен админ
Возвращаемся к нулю, добавляем логический оператор or и истинное значение, к примеру, true.
Hello, Guest
Далее у меня был тупик. Я перепробовал много вариантов и случайно попробовал limit... и это сработало!
Сначала проверил с первой строки
.php?on=0%20or%201=1%20limit%200,1
Потом пропустил первую строку
.php?no=0%20or%201=1%20limit%201,1
И получил:
Идем дальше!
4. Orc
"Сфоткай меня как будто я хакер"
Тут добавилась вторая проверка, уже недостаточно для прохода просто указать админа. Нужен также правильный пароль
Указываем id=admin. Любой очевидно неправильный пароль, добавляем кавычку, чтобы осуществить инъекцию.
Добавляем логический оператор or и истинное значение. Получаем php?id=admin&pw=1' or true--+-
Orc нас приветствует как admin, но дальше не пускает
Тогда добавляем к истинному условию другие утверждения. И отсутствие/наличие приветственной надписи будет сообщать нам о верных шагах.
То есть самая обычная слепая инъекция.
С помощью операторов сравнения и length определяем длину пароля
php?pw=1234' or true and length(pw)=8-- -
Далее самое нудное - перебор. Наверное, следовало автоматизировать процесс и сервер не банит, но я об этом тогда не подумал. Можно через регулярку "and pw regexp '^095[0-9]?' -- -" или через asci "and ascii(substring((pw),2,1))=57", но первый вариант мне ближе.
Перебором выясняем пароль, сообщаем орку и проходим дальше
Добавляем логический оператор or и истинное значение. Получаем php?id=admin&pw=1' or true--+-
Orc нас приветствует как admin, но дальше не пускает
Тогда добавляем к истинному условию другие утверждения. И отсутствие/наличие приветственной надписи будет сообщать нам о верных шагах.
То есть самая обычная слепая инъекция.
С помощью операторов сравнения и length определяем длину пароля
php?pw=1234' or true and length(pw)=8-- -
Далее самое нудное - перебор. Наверное, следовало автоматизировать процесс и сервер не банит, но я об этом тогда не подумал. Можно через регулярку "and pw regexp '^095[0-9]?' -- -" или через asci "and ascii(substring((pw),2,1))=57", но первый вариант мне ближе.
Перебором выясняем пароль, сообщаем орку и проходим дальше
5. Wolfman
К фильтрации "prob", "_", ".", "(", ")" добавляется пробел
Также в запросе уже указан id как guest, а нам надо пройти под id=admin
Ничего сложного нет в этом таске, нас постепенно подготавливают к грядущим битвам.
Заменить пробел можно множеством способов. Например,
%09 – табуляция
%0A – символ новой строки
%0D – возврат каретки
%0B – вертикальная табуляция
%0C – символ новой страницы
Можно, также, пробел заменить с помощью комментария /**/, но в этом таске не сработало. Я использовал символ новой строки(%0A), так как легко запоминается и не надо гуглить.
Добавляем логический оператор or и истинное значение
.php?pw=3'%0Aor%0A1=1%09--'
Нас приветсвуют как Гостя
Меняем истинное значение на id=admin
Clear!
Заменить пробел можно множеством способов. Например,
%09 – табуляция
%0A – символ новой строки
%0D – возврат каретки
%0B – вертикальная табуляция
%0C – символ новой страницы
Можно, также, пробел заменить с помощью комментария /**/, но в этом таске не сработало. Я использовал символ новой строки(%0A), так как легко запоминается и не надо гуглить.
Добавляем логический оператор or и истинное значение
.php?pw=3'%0Aor%0A1=1%09--'
Нас приветсвуют как Гостя
Меняем истинное значение на id=admin
Clear!
6. Darkelf
Тут идет проверка на 'prob', '_', '.', '(', ')', 'or', 'and'. Чтобы пройти таск, нам нужно пройти под админом. Все очень просто.
'or' можно заменить на ||
Если есть необходимость в 'and' => &&
Далее как в предыдущем таске
Если есть необходимость в 'and' => &&
Далее как в предыдущем таске
7. Orge
Выглядит угрожающе, но этот таск - одна из комбинаций того, что мы уже проходили.
'and' заменяем на && и перебор с помощью регулярки
query : select id from prob_orge where id='guest' and pw='1' || true && pw regexp '^[0-9]' -- -''
query : select id from prob_orge where id='guest' and pw='1' || true && pw regexp '^[0-9]' -- -''
8. Troll
Фильтруются кавычки и 'admin'. И нам как раз надо подставить в id значение admin.
Решилось за несколько секунд добавлением обратного слэша в середине слова
9. Vampire
Фильтруются кавычки и 'admin', все переводится в нижний регистр
Вставляем админа в другого админа.
Следующие пять противников - комбинация из предыдущих тасков, не представляющие какой-либо сложности и оригинальности. Поэтому пробежимся галопом.
10-15. Skeleton, Golem, DarkKnight, Bugbear, Giant, Assassin
Skeleton
Делаем инъекцию в pw, добавляем логический оператор, id с админом
Golem
Надо выяснить пароль админа, чтобы зайти. Есть фильтры, но их несложно обойти.
pw='lol' || id like 'admin' && pw rlike '^[0-9]'-- -'
DarkKnight
Здесь фильтры также не мешают использовать регулярку. Если пароль кажется очень длинным - вытаскиваете не тот пароль
BugBear
Также обходим фильтры, вытаскиваем через регулярку. Пробел обходим символом новой строки как в предыдущих тасках
Giant
Этот таск как передышка, но мы ведь вовсе не устали, верно?
Много фильтров, но один забыли про вертикальную табуляцию
Assassin
Просто подобрать пароль, причем достаточно узнать первые три символа
Делаем инъекцию в pw, добавляем логический оператор, id с админом
Golem
Надо выяснить пароль админа, чтобы зайти. Есть фильтры, но их несложно обойти.
pw='lol' || id like 'admin' && pw rlike '^[0-9]'-- -'
DarkKnight
Здесь фильтры также не мешают использовать регулярку. Если пароль кажется очень длинным - вытаскиваете не тот пароль
BugBear
Также обходим фильтры, вытаскиваем через регулярку. Пробел обходим символом новой строки как в предыдущих тасках
Giant
Этот таск как передышка, но мы ведь вовсе не устали, верно?
Много фильтров, но один забыли про вертикальную табуляцию
Assassin
Просто подобрать пароль, причем достаточно узнать первые три символа
Здесь уже поинтересней, много фильтров.
Здесь поможет фрагментированная инъекция. Экранируем закрывающую кавычку в значении id и добавляем булевое истинное значение в pw.
Дальше таски намного интересней, честно. Продолжим?
Последнее редактирование модератором: