个人向 exp, 因为是暑假打的,后面复现的比较烦躁,所以不算 wp 大多都是只有 exp。
# 签到:
nc 链接
cat flag
# 只有 echo
1 | echo "$( <flag)"#可以把flag文件打出来 |
# ret2text
1 | from pwn import * |
# 失去她了
ret2system
1 | from pwn import * |
# 彻底失去她
1 | io=remote("gz.imxbt.cn",20308) |
# fmt 格式化字符串
任意地址写
1 | from pwn import * |
# shellcode-v0
没有想到,直接 0x 后面两位也可以跳转。相对栈上的跳转
1 | from pwn import * |
# shellcode-v1
1 | from pwn import * |
# format_string_level1
1 | from pwn import * |
# gift
1 | ROPgadget --binary pwn --ropchain |
一把梭
1 | from pwn import * |
# 为什么不让我栈溢出
canary 保护
1 | from pwn import * |
# stack in stack
1 | from pwn import * |
# fmt-2
# 代码解释
# 1. 泄露 printf
地址
通过格式化字符串漏洞 %7$s
,泄露 printf
的 GOT 表地址。接收返回值后,对齐到 8 字节并转换为整数,计算 libc 基址。
# 2. 计算 system
的地址
利用泄露的 libc
基址和 libc.sym['system']
偏移,计算出 system
的实际地址。
# 3. 构造格式化字符串覆盖 GOT 表
- 分别覆盖
printf
的 GOT 表的低字节、中字节、高字节。 - 使用
%hhn
来逐字节写入。 - 为了对齐
printf_got
的地址,填充 payload 到合适的长度。
# 4. 执行 system("/bin/sh")
覆盖 printf
的 GOT 表后,程序调用 printf
时实际上会执行 system
,传入参数为 /bin/sh
,从而得到一个交互式 shell。
1 | from pwn import * |
# pie
1 | from pwn import * |
# 五子棋
ida 先看看文件,一大段没什么意思,我们找找有趣的,给了 shell 可以找找 shell 函数的获取方式。
在主函数下的一个函数中,一个变量 key<=2 就可以 getshell,接着可以查看 key 的交叉引用看看怎么和作者玩游戏。
关键位置就是在两次之内给他 win 了,下方有个 ++key
接下来就是通过计算达成 break 跳出游戏循环,getshell 了
exp 如下:
1 | from pwn import * |
# ezstack:
ret2csu 经典
1 | from pwn import* |
# fmt-level3:
1 | from pwn import* |