找回密码
 立即注册
首页 业界区 安全 pwn中常用函数

pwn中常用函数

仰翡邸 2025-10-28 11:05:04
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字节长度的内容,写入的内容由键盘输入
  1. read(0, buf, 0x100);        // 从键盘读 0x100 字节
复制代码
gets()函数

函数原型:
char *gets(char *s);
功能:
从 stdin 读一行(直到 '\n' 或 EOF),不检查长度
参数:

  • s:目标缓冲区,经典栈溢出点
示例:
  1. gets(buf);                  // 可无限溢出
复制代码
scanf()函数

函数原型:
int scanf(const char *fmt, ...);
int sscanf(const char *str, const char *fmt, ...);
功能:
按 fmt 解析输入并写入后续指针。
%s 不限制长度 可溢出;%n 可写内存。
示例
  1. scanf("%s", buf);           // 溢出
  2. sscanf(input, "%d%n", &a, &offset); // 用 %n 写 offset
复制代码
fputs()函数

函数原型
  1. int fputs(const char *s, FILE *stream);
复制代码
功能:把字符串 s 写入 stream,不自动加 '\n'
参数:stream=stdout 可泄露信息。
示例
  1. fputs(buf, stdout);        // 打印 buf 内容
复制代码
fgets()函数

函数原型
  1. char *fgets(char *s, int size, FILE *stream);
复制代码
功能:从 stream 最多读 size-1 字节到 s,自动补 '\0'
参数:size 正确时可防止溢出;但 size 过大仍可控。
示例
  1. fgets(buf, 0x100, stdin);  // 安全读入
复制代码
puts()函数

函数原型
  1. int puts(const char *s);
复制代码
功能:把 s 写到 stdout 并自动追加 '\n'
参数:s 可控时可用作信息泄露。
示例
  1. puts(buf);                 // 打印并换行
复制代码
转换类

atoi()函数
  1. int atoi(const char *nptr);
复制代码
功能:把字符串转 int,失败返 0。
参数:nptr 可控时可构造负数绕检查。
示例
  1. int atoi(const char *nptr);
复制代码
strtoul()函数
  1. unsigned long strtoul(const char *nptr, char **endptr, int base);
复制代码
功能:按 base 解析无符号长整型;base=0 自动识别 0x/0。
参数:endptr 可置 NULL;结果可控做索引或大小。
示例
  1. size_t n = strtoul(buf, NULL, 0); // 输入 0xFFFFFFFF 得 -1
复制代码
过滤类

seccomp()函数

函数原型
  1. int seccomp(unsigned int operation, unsigned int flags, void *args);
复制代码
功能:安装沙盒规则,限制可用 syscall
参数:operation=SECCOMP_SET_MODE_STRICT 或 FILTER。
示例
  1. seccomp(SECCOMP_SET_MODE_STRICT, 0, NULL); // 只允许 read/write/exit
复制代码
利用提示:先 seccomp-tools dump ./bin 看白名单,再挑允许 syscall 构造 ROP/ORW。
执行类

execve()函数
  1. int execve(const char *pathname, char *const argv[], char *const envp[]);
复制代码
功能:替换进程映像,真正的 syscall shell
参数:pathname="/bin/sh";argv={"/bin/sh",NULL}。
示例
  1. execve("/bin/sh", NULL, NULL);
复制代码
system()函数
  1. int system(const char *command);
复制代码
功能:把 command 交给 /bin/sh -c 执行。
参数:command="/bin/sh" 即拿 shell;指针可控可 one-gadget。
示例
  1. system("/bin/sh");         // 最简拿 shell
复制代码
来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

相关推荐

您需要登录后才可以回帖 登录 | 立即注册