off-by-one 单字节缓冲区溢出 Maybe in: 使用循环语句向堆块中写入数据时,循环的次数设置错误 字符串操作不合适 off-by-one是可以基于各种缓冲区的,比如堆、栈、bss段等,在堆上比较常见 详见:堆中的 Off-By-One - CTF Wiki 利用手法: 控制溢出字节:修改大小造成块结构之间出现重叠,从而泄漏其它块数据,或是覆盖其它块数据 溢出NULL字节:使得pre_inuse 2025-03-27 pwn #堆利用
ida创建结构体 ida快照ctrl + shift + w : 唤起创建ida快照窗口ctrl + shift + t : 唤起ida历史快照窗口 0x01 在结构体(structures)窗口中定义(shift + F9)View -> Open Subview -> Structures(shift+ F9) 进入结构体窗口按insert新建结构体(delete键删除)在结构体的ends行,按d 2025-03-27 逆向
UAF use after free free()函数所做的是把指针指向的chunk释放了,使这个chunk不再是堆块了但是这个指针仍然指向这个chunk,这个指针的值以及这个chunk的内容都不会被改变 如果你重新申请了这块被释放的chunk,那么只要这个指针的值没有变,这个chunk就还能被这个指针使用 如果原来的指针->原来的chunk是有固定功能的,如果你申请内存时又成功分配到了这个chun 2025-03-26 pwn #堆利用
关于pwn题的环境 关于pwn题的环境目前我所已知的三种较为推荐的方式:将本地环境和远程环境相统一 patchelf + glibc-all-in-one更改pwn题libc 在脚本中打开本地进程这么写 1process(["ld路径“, "./题目"], env={"LD_PRELOAD":"libc路径"}) dock 2025-03-19
堆基础 brk 系统调用 将进程的堆结束地址(prgram break)设置为指定的值,从而控制堆内存的大小。可以扩展或收缩堆内存 12#include <unistd.h>int brk(void *addr); addr:指定新的堆结束地址 成功时,返回0失败时,返回-1,设置errno为以下之一: ENOMEN 内存不足,无法扩展到指定的地址 EINVAL 指定的地址无效 2025-03-19 pwn
危险函数与常用函数 危险函数gets(s)gets() 函数从标准输入读取一行字符,直到遇到换行符(\n)或文件结束符(EOF)。换行符不会被存储在目标字符串中,而是被替换为 null 终止符(\0)。puts(const char s)*持续输出s指向的字符 直到遇到终止符\0 1char *strncpy(char *dest, const char *src, size_t n); dest 目标字符串的指 2025-03-18 pwn
ios签名 ios app 开发门槛真是高 没有mac和xcode就算了 我用vscode + uniapp + hbuilder还不行(windows)结果真机调试运行还得注册开发者账号 + 获取ios签名这就是高贵的苹果✌吗 😭 在windows上开发调试ios app途径: 注册开发者账号 + 签名 官方正经 途径但是 $99/年的价格 + 注册流程困难还是算了 使用爱思助手进行自 2025-03-17 前后端 #ios
conda不完全指北 安装anaconda后,将anaconda适配到powershell 每次启动powershell都会默认激活虚拟环境base查看pip版本发现是anaconda中的pip查看python版本和安装位置发现也是anaconda中的 说明已经正确安装了conda并且激活了虚拟环境base 那么如何取消默认激活base环境? 查看本机conda默认配置 1conda config --show 2025-03-16 Environment
docker使用指南 使用Docker搭建CTF Pwn做题环境 为了保证利用脚本能够正常打通, 我们通常需要在本地准备相同的运行环境, 并且在远程利用之前先在本地进行测试 如果为每个不同的运行环境都单独准备一个Ubuntu虚拟机,则太不优雅了 Docker 操作系统层面上的虚拟化方案能够非常便捷地搭建不同pwn题所对应的原始环境 [!note] 对比虚拟机硬件层面的虚拟化方案 Docker使用Docker入 2025-03-16 Environment