DoYouGot
@DoYouGot

Уязвимость форматной строки printf() и не только, работает ли на x64 системах?

Если да, есть одекватные примеры как это должно быть реализовано ? Так как у меня не выходит сделать это правильно. Зарание спасибо.
  • Вопрос задан
  • 509 просмотров
Пригласить эксперта
Ответы на вопрос 1
Код:
#include <stdio.h>

void fn() {
  // Засовываем в стек массив указателей на секретную строку
  char *s[128];
  for (int i = 0; i < 100; ++i) {
    s[i] = "THIS IS A SECRET";
  }
}

int main(int argc, char *argv[]) {
  // Вызываем функцию, которая кладет в стек секретные строки
  fn();

  // А теперь вызываем обычный printf с параметром формата, взятым из первого аргумента командной строки
  printf(argv[1], "just a string");

  return 0;
}


$ uname -a
Linux tarik02 4.4.0-17763-Microsoft #55-Microsoft Sat Oct 06 18:05:00 PST 2018 x86_64 x86_64 x86_64 GNU/Linux

$ gcc -dumpmachine
x86_64-linux-gnu

$ gcc main.c -o main

$ ./main "%s"
just a string

$ ./main "%s %s"
just a string THIS IS A SECRET


Следует обращать внимание, каким компилятором собран код, какая реализация libc используется, на какой OS запускается. В моём случае можно видеть Ubuntu (на WSL).
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы