pwnable.tw orw 例题
这里用 pwnable.tw 网站上的 orw 例题来讲解 orw 的用法:这里给出 flag 在/home/orw/flag 文件下
三连获取基本信息:32 位开启 canary,程序基本流程是输入字符串。看一下 IDA 的情况:
找到 main 函数,发现一开始执行了 orw_seccomp() 函数,是 orw 题目,查一下系统调用:
目前发现我们可以利用的有 open,read,write ,这三个系统调用已经足够我们获取 flag 了。
这里 read 就是一个非常浅显的栈溢出漏洞,直接往里面填写东西就可以了。由于orw_seccomp()保护,我们需要编写相应的汇编代码去获取 flag:
- open:打开文件 sys_open(const char __user *filename, int flags, int mode)
- read:读取文件内容 sys_read(unsigned int fd, char __user * buf, size_t count)
- write:将读取到的内容写入到标准输出 sys_write(unsigned int, fd, const char __user *, buf, size_t, count))
- 首先我们需要通过 open 函数来打开 flag 文件:内核中是由系统调用sys_open()函数完成
1 | # 通过提示我们知道flag在home/orw/flag目录下: |
- 利用read函数读取文件中的数据
1 | sys_read(3,file,100); |
- 利用write函数将文件中的数据打印到屏幕上
1 | sys_write(1,file,size); |
- exit(0) >> 可要可不要
1 | sys_exit(0) |
剩下的就是传入 shellcode 了:
1 | from pwn import * |
更新: 2026-03-19 10:23:41
原文: https://www.yuque.com/idcm/wnemg9/bggcgc4grxz3tatw