自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(49)
  • 收藏
  • 关注

原创 2.linux权限

权限

2026-11-11 13:22:03 180

原创 1.linux的基础指令

基础指令使用

2026-11-07 17:14:48 619 1

原创 2.顺序表

顺序表

2026-11-06 22:56:58 477

原创 3.类和对象(中)

类和对象

2026-11-03 23:04:39 472

原创 24.House of Force 从零到 getshell

本文记录一道 House of Force 自命题 my_force 的完整分析与调试过程。题目基于 glibc 2.23,No PIE,唯一漏洞是 edit 功能中写入长度 nbytes 未与已分配的 sizes[i] 做校验,形成任意长度的堆溢出。利用思路为:先用 unsorted bin 泄漏 libc 基址,再把阻塞用的 guard 块与泄漏块依次释放使 top chunk 回到可控块之后,接着用溢出把 top chunk 的 size 改写为 -1,随后发一次巨额 malloc 请求把 main_

2026-11-02 00:01:37 378

原创 1.时间复杂度和空间复杂度

算法的时间复杂度和空间复杂度

2026-11-01 19:28:08 138

原创 2.类和对象(上)

类和对象的入门篇

2026-11-01 17:41:19 474

原创 1.c++入门篇

c++入门的一些基础知识

2026-10-31 00:51:19 446

原创 0.命名空间(namespace关键字)

c++命名空间相关知识点的讲解

2026-10-30 12:32:57 436

原创 23|House of Einherjar 实战:off-by-null 造出向前合并

自出题复现:off-by-null 只清一个字节,但要它有用,chunk 大小必须是 0x100 的倍数;而 2.27 又会先用 tcache 截走 free。讲清这两道门槛、fake 位置怎么定、以及chunksize 校验的绕法,全程 gdb 手打,最后改 __free_hook 拿 shell。

2026-10-28 23:10:43 444

原创 16|Tcache Poisoning 实战:UAF 改 fd 打 __free_hook

自出题复现:大块 free 进 unsorted 泄 libc,再切出同址小块 free 进 tcache,用 UAF 改next 打 __free_hook。每段 gdb 都带判据,关键尺寸都说明为什么,另附三个真实踩坑与完整偏移表。

2026-10-26 21:59:57 4544

原创 17|Large Bin Attack 实战:写堆地址劫持指针

自出题复现:largebin 里先放一块大的,再把一块小的放进 unsorted,改前者的 bk_nextsize为 target-0x20,插入小的那一刻 glibc 就把堆地址写进 target。每步都带判据,另附"只改第 4 个字段会毁掉链表"等三个真实踩坑。

2026-10-26 18:12:54 254

原创 21|Unsorted Bin 实战:HITCON magicheap 把 main_arena 写进全局变量

free 一块进 unsorted,把它 bk 改成 magic-0x10,下一次同尺寸 malloc 摘链时 glibc 就会把 main_arena 的地址写进 magic——一个 0 变成 0x7f 开头的大数。讲清 -0x10 的由来、为什么尺寸必须对上、以及 2.29 之后为什么直接失效。

2026-10-26 15:17:06 4686

原创 一键部署脚本:Teable + AFFiNE 同机上线(含健康检查)

一条命令把 AFFiNE(Docker Compose,:3010)和 Teable(k3s + Helm,80/443)装在同一台离线机器上。支持只装其中一个、dry-run 预检、status / verify / rollback。讲清四个设计约束(--pull never、externalUrl 改写、helm 不加 --wait、禁用 traefik)、每阶段判据和六个常见坑。

2026-10-20 22:15:01 290

原创 Teable 内网离线部署:k3s + Helm 全流程(附排查表)

一台干净机器,k3s 起单节点集群,离线导入 16 个镜像,装 ingress-nginx 接管 80/443,再用 Helm 部署 Teable。每步都有判据和"为什么",另附 9 条排查表和卸载步骤。镜像名对齐、--wait 死锁、CoreDNS 打 patch 这几个坑都单独说明了。

2026-10-20 22:11:51 274

原创 AFFiNE 内网离线部署:镜像导入 + 编排 + 常见报错排查

AFFiNE 离线部署 · Docker Compose · 指令版

2026-10-20 22:11:10 105

原创 18|Use-After-Free 实战:双档 bin 分离改函数指针

自出题:结构体(0x20)和内容块(0x40)分属不同档位,free 后靠 bin 的复用顺序让新 content落进旧结构体,就能改掉函数指针。讲清两次 malloc 的分配顺序、为什么是 0x18、GOT 泄露与二次错位拿 shell。

2026-10-09 22:56:25 393

原创 20|Unsafe Unlink 实战:HITCON CTF 2014 stkof 改 fd/bk 拿任意写

stkof 的洞在 name 长度可控、写的时候不看实际分配了多大,直接堆溢出。核心是 unlink 的两处写:把 fd 写成 ptr-0x18、bk 写成 ptr-0x10,让两个偏移都落回存着 P 的那个全局指针,摘链后指针就被挪了位。之后改 free@got 收尾。

2026-10-04 00:52:47 517

原创 LeetCode206. 反转链表

这个节点也就是反转后的“新头节点”,因此最终返回。

2026-09-28 20:43:57 149

原创 LeetCode 989. 数组形式的整数加法

每次相加后,如果结果大于 9,就意味着需要向前进一位(进位设为 1),而当前位只保留减去 10 之后的余数。只要数组 $A$ 还没遍历完、数字 $K$ 还没除尽,或者最后还留着一个进位,这个循环相加的过程就会一直继续。因此,最后必须通过双指针不断交换首尾元素,把整个数组翻转过来,恢复成正常的数字顺序。这是这个思路里最特别的一点:因为我们是从个位开始算,并且是从新数组的索引。对于数组 $A$,我们从最后一位(索引。对于数字 $K$,我们通过不断取模(开始存的,这就导致存进去的数字顺序是。

2026-09-28 18:04:05 271

原创 LeetCode 26. 删除排序数组中的重复项

当 nums[prev] == nums[cur] 时(走 else 分支),说明还在同一段重复数字里。当 cur 走到数组外面导致循环结束时,数组里的最后一段数字(无论是单个数字还是连续重复的数字)的末尾还停留在 nums[prev] 手里,没来得及入库。● dst(目标指针):像一个仓库管理员,负责记录下一个有效数字应该存放到数组的哪个坑位。● prev(前驱指针):紧跟在 cur 后面一位。● cur(当前指针):像一个侦察兵,永远走在最前面,负责探路。

2026-09-28 17:07:15 307

原创 LeetCode 27. 算法-移除元素

元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。不要使用额外的数组空间,你必须仅使用 O (1) 额外空间并。的元素,并返回移除后数组的新长度。

2026-09-28 16:37:50 364

原创 15|House of Pig:没有 malloc 的时候怎么打

程序只给 calloc、没有 malloc,tcache 投毒直接失效。这时要靠 large bin attack 写堆地址、tcache stashing unlink 往链里塞目标、再用 FSOP 走 _IO_str_jumps 里的函数指针字段拿 shell。讲清三个原语各自能干什么,以及 vtable 校验为什么只剩 str 系列。

2026-09-27 22:35:28 171

原创 22|Chunk Extend 实战:HITCON-Training heapcreator 造重叠

heapcreator 每个 book 都是「0x10 的结构体 + 一块内容」。编辑时写入长度等于申请长度,末尾多补的那个 `\0` 正好压到下一块的 size 低字节,把 0x21 改成 0x41;free 之后重新分配,两块内存就重叠了。再借重叠泄 libc、改 __free_hook。

2026-09-27 22:34:54 415

原创 13|House of Roman:不泄露地址也能打

不泄露地址怎么打?靠"只改最后几个字节"——地址低 12 位按页对齐是固定的,高位随机但可以保留。讲清 fastbin 与 unsorted 两侧各有什么、为什么必须跳两次、hook-0x23 的 0x7f从哪来,以及最后那个 1/16 是怎么算的。

2026-09-27 10:38:22 339

原创 14|House of Rabbit:malloc_consolidate 轻信了 chunk->size

fastbin 取块会验 size,但 malloc_consolidate 搬块时不验——这就是漏洞所在。把假块的size 写成 -0x10 让它回绕,请求 ≥0x400 触发大扫除,假块就变成了 unsorted 里的合法空闲块。讲清四步流程、-0x18 的算式和三个必踩的坑。

2026-09-27 10:38:10 264

原创 11|House of Orange:没有 free 也能造出一个 unsorted bin

程序没有 free 怎么办?把 top 的 size 改小,申请一块更大的,sysmalloc 扩容时会顺手把旧 top 扔进 unsorted——相当于白拿一块"已释放"内存。讲清三条对齐约束、为什么 payload里要把 size 改成 0x60,以及 2.24 的 vtable 校验把它堵在哪。

2026-09-26 09:47:21 334

原创 12|House of Lore:smallbin 的 bk 为什么能被注入

smallbin 从尾部取块,取之前只验一句 bck->fd == victim。所以改掉空闲块的 bk 指向伪造块、再让伪造块的 fd 指回去,两次 malloc 就能拿到任意地址。讲清这条链的两步推导、tcache 为什么先截走、以及 fake+nb 必须可写这个坑。

2026-09-26 09:46:51 473

原创 10|House of Force:把 top 推到任意位置

把 top 的 size 改成 -1,然后一次 malloc 就能把 top 挪到任意地址,下一次 malloc 直接返回目标。讲清 request2size 那个 +8 对齐的坑(最容易差 0x10)、负数偏移怎么回绕、三个前提,以及 2.29 的 corrupted top size 为什么把它彻底杀死。

2026-09-25 11:06:31 287

原创 09|House of Einherjar:off-by-null 怎么让 free 向前合并

一个 \x00 清掉 PREV_INUSE,一个伪造的 prev_size 指向栈上的假块,free 时 glibc 就把两块相隔很远的内存合并了。讲清 prev_size 的借用机制、五步流程、完整 demo,以及 guard、tcache、2.28 检查这三个必踩的坑。

2026-09-25 11:05:42 294

原创 wifi密码

2026-09-24 07:51:58 765

原创 01|Tcache Poisoning 理论:2.27 为什么完全不校验 fd

讲清 tcache 为什么在 2.27 上完全不做指针校验:从 tcache_perthread_struct结构、LIFO 单链表、_int_malloc 的取块源码,到五步投毒流程与一个可运行的C 例子。附 2.29/2.32 的防御机制与版本边界表。

2026-09-23 12:36:20 278

原创 04|Large Bin Attack:把一个堆地址写到任意位置

只讲一行代码:插入 large bin 时 glibc 执行 bk_nextsize->fd_nextsize = victim,于是改掉锚块的 bk_nextsize 就能把一个堆地址写到任意位置。讲清 -0x20 的由来、两个 guard 的作用、四个块的顺序,附可跑 demo 与 global_max_fast 打法。

2026-09-23 07:29:06 408

原创 03|Unsorted Bin Attack:改一个 bk,让 glibc 帮你写 libc 地址

从 magicheap 的复现过程出发,讲清 unsorted bin 摘链时那行 bck->fd 为什么能写到任意地址、bk 为什么要减 0x10,以及为什么它只能写一个 libc 地址而不是任意值。附可运行的 C demo、2.27 上的尺寸陷阱与 2.29 失效原因。

2026-09-22 09:48:06 287

原创 02|Fastbin Attack 理论:size 校验与错位 chunk 构造

讲清 fastbin 的单链表结构,以及 fasttop 检查为什么只防"连着两次":用 A-B-A 造环实现 double free,再改 fd 让 malloc 返回任意地址。同时说明 malloc 的 size 校验为什么必须错位伪造,以及 2.26+ 要先填满 tcache。附可运行 C 例子与 __malloc_hook 落点推导。

2026-09-22 09:47:45 265

原创 05|Use-After-Free:钥匙还在你手里,柜子已经不是你的了

UAF 的关键不是"用了已释放的内存",而是那块内存此刻被谁接手:进 tcache 读到堆地址,进 unsorted 读到 libc 地址。按这个思路讲三种成因、三种 bin 的元数据差异、三个利用方向,附一个改函数指针可跑的 demo 和修复方式。

2026-09-21 21:25:20 316

原创 08|Unsafe Unlink:为什么它要伪造一个指向自己的指针

unlink 写入的不是你给的值,而是 P 自己的 fd 和 bk——所以要绕过完整性检查,只能找一个本来就存着 P 的地址(比如全局 notes 数组)。讲清摘链两行、安全检查和 ptr-0x18的推导、从指针挪位到打 GOT 的完整链,附可跑的 C 与 exp。

2026-09-21 21:24:30 439

原创 06|Chunk Extend:改一个 size,造出两块重叠内存

ptmalloc 没有全局分配表,靠 chunk 头自己算位置:next_chunk 用 size、inuse 看下一块的标志位、prev_chunk 用 prev_size 倒推。所以改一个 size 就能造出两块重叠内存。讲清四步流程、五个变体、2.29 之后的检查与伪造方法,附可跑的 demo。

2026-09-14 17:25:01 412

原创 19|Off-by-one 实战:ASIS CTF 2016 b00ks 清低字节拿任意读写

author_name 塞满 32 字节,第 33 个 \0 落在 library[0] 的最低字节,指针从结构体跳到前面 0x30 的 desc;而 desc 里是伪造的结构体,于是 edit 变任意写、show 变任意读。讲清 208 这个尺寸怎么算、假结构体偏移、mmap 反推 libc 与两级跳改 __free_hook。

2026-09-13 00:34:00 387

原创 07|Off-by-one:一个字节能改出什么

一个字节写不了代码,只能改 size——但改完它,分配器找下一块的坐标系就歪了。讲清 0x00 为什么既能清 PREV_INUSE 又会让 size 缩水、缩水后为什么要伪造假头、2.29 那条 chunksize != prev_size 的检查怎么破,以及借 large bin 残留指针的路子。

2026-09-02 17:07:31 508

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除