いくつかのスタック オーバーフロー テクニックを学び、シェルコードを使用しようとしています。いくつかの基本的なシェルコードを正常に使用できました。それから、私はアセンブリで使用する作業を開始し、それ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"