pwnable之unlink
来源:互联网 发布:exe反编译成源码 编辑:程序博客网 时间:2024/05/18 01:38
这个题模仿了堆区分配给用户时候卸下块的方法,存在堆区溢出,输出A的字符溢出覆盖下一个区域B中的内存更改指针。
这题做的时候卡住了,不知道应该多长的字符串合适
然后一开始准备直接让ret时候跳转到system后来发现会覆盖住跳转后的函数所以程序崩溃,于是不知道怎么弄了
http://blog.csdn.net/z231288/article/details/64481130
参考了这个文章发现可以用利用主函数中leave命令,
mov -0x4(%ebp) %ecx
leave
lea -0x4(%ecx) %esp
ret
ecx等于ebp-4
esp等于ecx-4
通过这个改变esp从而改变ret时候取eip的位置
也就是说我们将地址写入ebp-4就可以更改esp
由于给了&a的地址所以可以推断出ebp位置是(&a+0x14)那么接下来要写入多少地址那?
a的值指向用户使用的堆的起始地址,所以a的地址加8为shellcode也就是最后esp要在的位置
所以shellcode的地址+4就是要写入的地址,这样和之前崩掉的差别是覆盖的时候后指针变成前指针的时候是将ebp-4写入了shellcode+4避免了覆盖
然后shelcode为需要的地址就好
阅读全文
0 0
- pwnable之unlink
- pwnable之unlink
- pwnable.kr writeup之unlink
- 全面剖析Pwnable.kr unlink
- pwnable之coin1
- pwnable之blackjack
- pwnable.kr 之fd
- pwnable.kr之bof
- pwnable.kr之flag
- pwnable.kr之passcode
- pwnable.kr之random
- pwnable.kr之shellshock
- pwnable.kr之mistake
- pwnable.kr之input
- pwnable.kr之lotto
- pwnable.kr之cmd1
- pwnable.kr之blackjack
- pwnable.kr之uaf
- ANR产生的原因
- 理解springMVC的原理
- 用实例说明为什么udp包头部的包长是冗余的
- [emerg] open() "/var/run/nginx/nginx.pid" failed (2: No such file or directory)
- 模糊控制算法的C++实现
- pwnable之unlink
- POJ 2536 D
- 常用<meta>整理
- java中一维数组的使用(初级)
- C语言 指针 详解 三 C语言数组指针(指向数组的指针)
- Numpy-创建数组
- Leetcode--189. Rotate Array
- Educational Codeforces Round 24A Diplomas and Certificates
- Log4j配置详解