2

いくつかのスタック オーバーフロー テクニックを学び、シェルコードを使用しようとしています。いくつかの基本的なシェルコードを正常に使用できました。それから、私はアセンブリで使用する作業を開始し、それexeveを呼び出しls -lて、再び成功しました。現在、相対アドレス指定を使用して、コード内の null 値を取り除こうとしています。そのため、単純な自己変更コードを試しました。コードセグメントが読み取り専用であることはわかっているのでmprotect、書き込み可能にするために呼び出してみました。私のコードはまだ機能せず、 でセグメンテーション違反が発生しmovb %al, 0x7(%esi)ます。誰かが私のコードで間違っていることについて洞察を与えることができれば、本当に感謝しています.

.text
.globl _start

_start:
  jmp StartPoint

  execvecall:
  popl %esi    # the address of string

  #calling mprotect to make the memory writable
  movl $0x7d, %eax
  movl %esi, %ebx
  movl $0x20, %ecx
  movl $7, %edx
  int $0x80

  xorl %eax, %eax

  movb %al, 0x7(%esi)  #putting zero for at the end of /bin/ls
  movb %al, 0xa(%esi)  #putting another zero at the end of -l

  #this part forms an array ending with for the second parameter of execve
  movl %esi, 0xb(%esi)
  movl %esi, %ebx
  addl $8, %ebx
  movl %ebx, 0xf(%esi)
  movl %eax, 0x13(%esi)

  movl %esi, %ebx
  leal 0xb(%esi), %ecx
  leal 0x13(%esi), %edx

  movb $11, %al
  int $0x80

StartPoint:
  call execvecall
SomeVarHere:
  .ascii "/bin/ls0-l0111122223333"
4

1 に答える 1