重中之重!!!!
链里参数顺序必须按 gadget 的弹栈顺序放
32 位 Linux 系统:
1 2 3 4
| eax: 系统调用号 ebx: 第 1 个参数 ecx: 第 2 个参数 edx: 第 3 个参数
|
常见函数及其构造
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35
| 1. read,一般用于 bss 段写入 /bin/sh read(0, BSS, 8)
eax = 3 含义: 调用 read
ebx = 0 含义: 文件描述符 0,即标准输入 stdin
ecx = BSS 含义: 把读到的数据写到 BSS 地址
edx = 8 含义: 最多读取 8 字节,一般是 /bin/sh\x00
2. execve , 用于getshell!
execve(BSS, 0, 0)
eax = 11(0xb) 含义: 调用 execve
ebx = BSS 含义: filename 指针,指向字符串 /bin/sh\x00
ecx = 0 含义: argv = NULL
edx = 0 含义: envp = NULL
执行结果: 等价于 execve("/bin/sh", NULL, NULL),成功就拿到 shell。
|