Привет.
Идем дальше.
Смотрим в IDA main
На скриншоте все почищено, переименовано для лучшей читабельности.
Что видим - сть 2 однобайтовых массива по 32 элемента в каждом. Есть буффер в котором лежат bash комманды одна с начала, вторая с 31 элемента массива.
Для логина и пароля используется не безопасный пользовательский ввод. По условиям админской панели мы можем посмотреть список файлов в директории или посмотреть часть истории введенных команд. Но нам это не очень то и надо. Нам бы получить шелл, что бы получить флаг. Так же вывод команд из buffer происходит с помощью системного вызова (system).
Посмотрим на память
Ага переменные лежат в стеке друг за другом, значит для записи нужной команды в buffer. нам надо переписать login и часть buffer с нужной нам командой.
Как происходит проверка введенных значений?
Видим, что для логина проверяется только первые 4 символа, а для пароля 20. По двойному клику по логину и паролю узнаем чо за логин/пароль у нас есть.
Исходя из данных пишем нагрузку. Вот состояние памяти после нагрузки.
Как видно из скриншота мы смогли переписать login и в начало buffer положили строку flag.
Так как у нас pwn, то будем использовать pwn.
Что тут происходит. В нагрузке у нас логин, который мы нашли в коде, а пароль я затёр на скриншоте. Далее мы затираем оставшиеся данные в массиве login мусором и переписываем начало буфера с командами нашей командой - вызов шелла. В конце нагрузки ставится nullbyte, что бы строка дальше не использовалась. В админском меню выбираем "View the history of the user's oleg commands.", так как при таком выборе идет вызов system с командой из начала buffer.
PWNED
Идем дальше.
Смотрим в IDA main
На скриншоте все почищено, переименовано для лучшей читабельности.
Что видим - сть 2 однобайтовых массива по 32 элемента в каждом. Есть буффер в котором лежат bash комманды одна с начала, вторая с 31 элемента массива.
Для логина и пароля используется не безопасный пользовательский ввод. По условиям админской панели мы можем посмотреть список файлов в директории или посмотреть часть истории введенных команд. Но нам это не очень то и надо. Нам бы получить шелл, что бы получить флаг. Так же вывод команд из buffer происходит с помощью системного вызова (system).
Посмотрим на память
Ага переменные лежат в стеке друг за другом, значит для записи нужной команды в buffer. нам надо переписать login и часть buffer с нужной нам командой.
Как происходит проверка введенных значений?
Видим, что для логина проверяется только первые 4 символа, а для пароля 20. По двойному клику по логину и паролю узнаем чо за логин/пароль у нас есть.
Исходя из данных пишем нагрузку. Вот состояние памяти после нагрузки.
Как видно из скриншота мы смогли переписать login и в начало buffer положили строку flag.
Так как у нас pwn, то будем использовать pwn.
Что тут происходит. В нагрузке у нас логин, который мы нашли в коде, а пароль я затёр на скриншоте. Далее мы затираем оставшиеся данные в массиве login мусором и переписываем начало буфера с командами нашей командой - вызов шелла. В конце нагрузки ставится nullbyte, что бы строка дальше не использовалась. В админском меню выбираем "View the history of the user's oleg commands.", так как при таком выборе идет вызов system с командой из начала buffer.
PWNED