• B правой части каждого сообщения есть стрелки и . Не стесняйтесь оценивать ответы. Чтобы автору вопроса закрыть свой тикет, надо выбрать лучший ответ. Просто нажмите значок в правой части сообщения.

Как сделать так, чтобы байты x00 не "перетерались" другими?

ROP

Red Team
27.08.2019
328
668
BIT
173
Привет, всем✋

Хочу задать вопрос.
Практикуюсь в атаке возврата в библиотеку. ASLR отключен. Вот такая ситуация:
Адрес system - 0xb7e18c00
Адрес /bin/sh - 0xb7f58aaa

Перезапускаю программу в gdb с помощью команды: r $(python -c 'print "\x41" * 36 + "\xaa\x8a\xf5\xb7" + "AAAA" + "\x00\x8c\xe1\xb7" ').
Но в стеке байты "\x00" перетираются другими. Получается адрес 0x00b7e18c, но нужен 0xb7e18c00.

Стек

1.png


Если перезапустить с помощью этой команды: r $(python -c 'print "\x41" * 36 + "\xaa\x8a\xf5\xb7" + "AAAA" + "\x01\x8c\xe1\xb7" '). Всё ок, но адрес не тот 0xb7e18c01.

Стек

2.png

Как сделать так, чтобы нулевые байты не перетирались?
 
Последнее редактирование:
0x00 - это конец строки. Он-же badchar в большинстве эксплоитов/шеллкодов. Изменить его поведение ты не сможешь.
 
Решение
Мы в соцсетях:

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