pwn笔记
零碎
和小数进行判断情况
https://cloud.tencent.com/developer/article/1473836
汇编代码确定小数位置
write函数泄露地址模板
1 | payload='''padding'''+p32(write_plt)+p32('''return_addr''')+p32(1)+p32(write_got)+p32(4) |
system执行
1 | payload='padding'+p32(system)+p32(0)+p32(binsh) |
注意:p32(0)相当于’\x00\x00\x00\x00’,strcpy(dest, src);
相当于直接截断, sh 字符串肯定读不进去啊
p32(1)也可能因为大小端问题截断,deadbeaf挺好用
puts函数泄露地址模板
1 | payload = 'padding'+p32(puts_plt)+p32(return_addr)+p32(puts_got) |
printf函数泄露地址模板
1 | payload = 'padding' + p32(printf_plt)+p32(main_addr)+p32(format_str)+p32(printf_got) |
循环判断
不同数据类型进行比较,有着不一样的作用。
1 | 接受a2个长度的字符串并放到vuln函数的缓冲区内部,但是a2传入的值类型是unsigned int,而前面判断长度的类型是int,可以规避长度限制。 |
scanf跳过
可以通过输入-跳过scanf读数据,从而泄漏栈中的canary。
只输入’+’ 或者’-‘的话,是不会修改地址上储存的值的,
栈迁移
ROPgadget使用
可以直接查找sh配合system
GCC参数
NX:-z execstack / -z noexecstack (关闭 / 开启) 不让执行栈上的数据,于是JMP ESP就不能用了
Canary:-fno-stack-protector /-fstack-protector / -fstack-protector-all (关闭 / 开启 / 全开启) 栈里插入cookie信息
PIE:-no-pie / -pie (关闭 / 开启) 地址随机化,另外打开后会有get_pc_thunk
RELRO:-z norelro / -z lazy / -z now (关闭 / 部分开启 / 完全开启) 对GOT表具有写权限
原文链接:https://blog.csdn.net/lonyliu/article/details/90341012
tcache版本house of sprite
1.给出一个指针
2.把指针替换为栈上的变量
3.伪造栈为堆块
4.将栈上的fake_chuck给free掉
5.再次申请相同大小的堆块
OFF BY ONE的各种利用姿势
1.泄露地址
2.进行堆块拓展等
All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.