2381 分钟

# fgets # 空字符 遇到字符 '\0' 不会停止。 # 截止 任意空字符停止输入,否则等待直到有新字符。 其中会将该空字符输入。最后在其后添加字符 '\0' 。 # 上限 会预留一个字符给字符 '\0' ,若输入数超过上限,则直接结束输入,在最后添加字符 '\0' 。 同时会舍弃空字符前面的其他未输入字符。 即若允许输入 18 个字符,则最多输入 17 字符。若输入 20 个字符,截断至 17 个字符,然后舍弃最后 3 个,然后添加字符 '\0' 。
1.3k1 分钟

# libc 应用 # libc 修补 由于靶机运行环境与本地机器环境可能不同,会导致程序实现的方式有所差异。 尤其是对于堆题而言,不同版本有不同的检测机制以及 tcache 的有无和截然不同的安全检测。使得 libc 的修正变得十分重要。 目前主要有以下几种方法实现 libc 的修正。 使用 patchelf 修改 elf 文件的依赖 pwntools 中利用 process 指定 libc 版本。 在 docker 容器中运行和调试 # patchelf 修改 libc 该方式会修改文件本身,尽量先对文件进行备份。主要会修改文件内依赖的地址,可能造成文件内部分数据的地址出现偏移。
29k27 分钟

# [ZJCTF 2019]EasyHeap heap, unlink, overlap 用数组储存堆地址。利用 unlink 将地址指向数组,即可实现任意地址读写。 unlink 修改的堆地址应该为真实地址,而 malloc 返回的地址为用户地址。所以伪造的 fakechunk 要在当前块的头部紧接着的地方。例如: 数组储存的某个块的地址为 0x5010,则该处应为 chunk 的头,所以直接将 fakechunk 输入至 chunk 中。addr 为数组上储存 0x5010 处的地址。unlink 后 addr 指向 addr-0x18,即数组下标小 3 的位置。 地址 0x0 0x
2.1k2 分钟

# 端口扫描 # nmap nmap [scan type] [option] [target] 命令 描述 nmap IP 扫描 IP nmap -v IP 加强扫描 nmap IP1 IP2 … 扫描多 IP nmap a.b.c.* 扫描整个子网 nmap a.b.c.x,y,… 扫描多子网地址 nmap -iL xxx.txt 根据文件扫描多 IP nmap a.b.c.x-y 扫描子网 IP 范围 nmap a.b.c.* --exclude IP 排除指定 IP 扫描整个子网 nmap -A IP 扫描操作系统和路由跟踪 nmap -O IP 探测操作系统 nmap
1.3k1 分钟

# 下载安装 该软件是在安装 Node.js 后使用 npm install 安装的。 在官网下载 Node.js 后,新建文件夹,运行以下命令。 npm install hexo-clihexo init# Git 配置 git 由于之前配置过,所以维持原样。总归就是设置用户名和邮箱,添加登陆密钥。 而后需要将 _config.yml 文件中的配置改为如下。 deploy: type: git repository: git@github.com:WaltCSZ/waltcsz.github.io.git branch: master这样之后就可以用 hexo d 将网
6k5 分钟

# newstarctf2023 week5 # login brop 侧信道攻击 存在栈溢出,但是有 canary。 输入时可以用空格等空字符分隔输入,所以输入函数用的是 scanf,scanf 会在输入字符串后面自动添加 '\0' ,所以无法爆破 canary。于是也没办法用栈溢出了。 考虑过通过大量溢出覆盖栈高处的 TLS(Thread Local Storage)存储的 canary 值,但是好像先因为 scanf 输入字符过多崩溃了 经 Lxxxt 爷指点,发现这道题是 2023 年全国信息安全大赛原题改编。要用的是侧信道攻击法,利用程序判断密码(或 PIN 码)
14k13 分钟

# newstartctf2023_week4 pwn # Double 堆 heap, double_free, fastbin libc: 2.23 程序中功能选择只有创建 add() ,删除 del() 和检查 check() 。其中, check() 内存在后门函数,只要 0x602070 处的值为 1638,即可直接 getsshell。 其次, del() 中释放块后没有清除指针,可以进行 double free。因此只要在 0x602070 处伪造块,并设置值为 1638。 add() 中固定分配 0x28 大小的块,并且同时写入内容。释放后进入 fastbin。 实际
13k11 分钟

# puts or system? format_string 修改 got 存在 printf 格式化漏洞,并且有个 puts("/bin/sh"); 。只要把 puts 的 got 表值修改为 system 函数的真实值或者 plt 值,就可以 getshell。 经调试,printf 的第 9 个参数(%8p)为0x7fffffffdc90处的值。即输入的buf的内容。由此构造payload,在对应第10个参数处写入`__libc_start_main`的got地址,利用`%9s 泄露其真实地址。 随后拿到 system
9.8k9 分钟

# week1 # ret2text ret2text #!/usr/bin/python3from pwn import *context(log_level='debug')#e=ELF('./')#p=process('./ret2text')p=remote('node4.buuoj.cn',27637)#gdb.attach(p, 'b ')offset = 0x020+8target = 0x0
11k10 分钟

# bjdctf_2020_router 0x7ffd797d1e80 - 0x7ffd797d1fc0 = -320 tcache 中的地址为与堆基址异或后的地址 从 VNCTF2021-ff 浅析 libc2.32 下 ptmalloc 新增的防护之指针异或加密 - 知乎 (zhihu.com) # zjctf 2019 easyheap # PicoCTF_2018_buffer_overflow_1 setegid 送分 # black watch 入群题 # inndy_rop 学了个 ROPgadget 的妙招,–ropchain 参数可以自动生成 rop 链,代码都写