pwn中常用函数
pwn中常用函数
输入输出类
write()函数
*函数原型:**ssize_t write(int fd, const void *buf, size_t count)
函数功能:由fd指定输出的位置,将buf的内容进行输出,输出的长度为n
函数参数:
- fd:文件描述符;write一般为1,由屏幕输出显示
- buf:指定的缓冲区,即指针,指向一段内存单元;比如GOT表项
- count:要写入文件指定的字节数,64位一般指针8字节,32位是4字节
使用示例:write(1,GOT地址,8|4):显示GOT对应函数的实际地址
备注:
x64传参:
- rsi=p64(0x1)
- rdi=p64(GOT)
- rdx=p64(0x8)
read()函数
函数原型:ssize_t read (int fd, void *buf, size_t count)
函数功能:由fd指定写入内容的来源,将待写入的内容写入到buf,写入的长度为count
函数参数:
- fd:文件描述符;read 为0,由键盘写入
- buf:指定的缓冲区,即指针,指向一段内存单元;比如向.bss段写入’/bin/sh\x00’
- count:要写入文件指定的字节数
使用示例:read(0, buf, t):向buf所指的地址写入t字节长度的内容,写入的内容由键盘输入
read(0, buf, 0x100); // 从键盘读 0x100 字节
gets()函数
函数原型:
char *gets(char *s);
功能:
从 stdin 读一行(直到 '\n' 或 EOF),不检查长度。
参数:
- s:目标缓冲区,经典栈溢出点
示例:
gets(buf); // 可无限溢出
scanf()函数
函数原型:
int scanf(const char *fmt, ...);
int sscanf(const char *str, const char *fmt, ...);
功能:
按 fmt 解析输入并写入后续指针。
%s 不限制长度 可溢出;%n 可写内存。
示例
scanf("%s", buf); // 溢出
sscanf(input, "%d%n", &a, &offset); // 用 %n 写 offset
fputs()函数
函数原型
int fputs(const char *s, FILE *stream);
功能:把字符串 s 写入 stream,不自动加 '\n'。
参数:stream=stdout 可泄露信息。
示例
fputs(buf, stdout); // 打印 buf 内容
fgets()函数
函数原型
char *fgets(char *s, int size, FILE *stream);
功能:从 stream 最多读 size-1 字节到 s,自动补 '\0'。
参数:size 正确时可防止溢出;但 size 过大仍可控。
示例
fgets(buf, 0x100, stdin); // 安全读入
puts()函数
函数原型
int puts(const char *s);
功能:把 s 写到 stdout 并自动追加 '\n'。
参数:s 可控时可用作信息泄露。
示例:
puts(buf); // 打印并换行
转换类
atoi()函数
int atoi(const char *nptr);
功能:把字符串转 int,失败返 0。
参数:nptr 可控时可构造负数绕检查。
示例:
int atoi(const char *nptr);
strtoul()函数
unsigned long strtoul(const char *nptr, char **endptr, int base);
功能:按 base 解析无符号长整型;base=0 自动识别 0x/0。
参数:endptr 可置 NULL;结果可控做索引或大小。
示例:
size_t n = strtoul(buf, NULL, 0); // 输入 0xFFFFFFFF 得 -1
过滤类
seccomp()函数
函数原型
int seccomp(unsigned int operation, unsigned int flags, void *args);
功能:安装沙盒规则,限制可用 syscall。
参数:operation=SECCOMP_SET_MODE_STRICT 或 FILTER。
示例:
seccomp(SECCOMP_SET_MODE_STRICT, 0, NULL); // 只允许 read/write/exit
利用提示:先 seccomp-tools dump ./bin 看白名单,再挑允许 syscall 构造 ROP/ORW。
执行类
execve()函数
int execve(const char *pathname, char *const argv[], char *const envp[]);
功能:替换进程映像,真正的 syscall shell。
参数:pathname="/bin/sh";argv={"/bin/sh",NULL}。
示例:
execve("/bin/sh", NULL, NULL);
system()函数
int system(const char *command);
功能:把 command 交给 /bin/sh -c 执行。
参数:command="/bin/sh" 即拿 shell;指针可控可 one-gadget。
示例:
system("/bin/sh"); // 最简拿 shell

浙公网安备 33010602011771号