Как передать нули в аргументе программе

Исправлено. tzselectне работает. Чтобы изменить общесистемное использование времени:dpkg-reconfigure tzdata

3
02.11.2019, 21:00
1 ответ

Итак, ваша программа делает следующее. Функция check_pwdвыделяет буфер в стеке, который вы переполняете, поэтому адрес возврата поврежден. Вы пытаетесь выбрать это искажение так, чтобы оно указывало на другую функцию, print_my_pwd, строка :GUUUU, если интерпретировать ее как 64-битное значение на машине с прямым порядком байтов, равна 0x??0055555555473A, причем первые 8 бит не определены. Если 8 бит равны нулю, то у вас есть адрес print_my_pwd. 16 Aсимволов предназначены для заполнения 8-байтового массива name, а затем перезаписывают сохраненный указатель кадра.

Итак, ваш вопрос: «Если мне нужен 0 байт как часть адреса возврата, как мне указать его в командной строке?», на что ответ «это не имеет значения, так как вы используете strcpy выполнить переполнение, и это остановится на байте NUL, поэтому атака не удастся».

В целом ответ на ваш вопрос состоит в том, что интерфейс ядра основан на строках C, поэтому даже если ваша программа использует memcpy, а не strcpy, вы все равно не сможете делать то, что хотите.

Реальные атаки на переполнение буфера переходят к собственному коду, который часто конструирует значение для сохранения в памяти и не должен беспокоиться о символах NUL.

2
27.01.2020, 21:24

Теги

Похожие вопросы