个人向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* |