0x00 tiny_easy
这个文件用sftp传下来看了一下,文件很小只有4k,代码也很少,直接执行则会报错。
0x01 思路
直接入口点下断,看为何出现段错误。
|
可以看出代码很简单,EDX
为/home/user/pwn/pwnkr/tiny_easy/tiny_easy
,然后mov edx,DWORD PTR [edx]
把EDX
的内容重新赋值给EDX
。最后call edx
完成调用。
其实说白了就是只要能控制argv[0]
就可以控制EIP
,因为环境变量也放在栈上,所以我们可以将shellcode放在栈上。但是现在有两个难点:
- 是否有DEP(是否可以执行shellcode)
- 是否有ASLR(如何将
EIP
指向shellcode)
|
悲剧的是,既有ASLR
也有DEP
。但是突然发现这个DEP
确没啥效果,栈上还是有执行权限的。
|
所以现在首要目标就是突破ASLR
,能使得EIP
可以指向我们的shellcode。
0x02 Solution
突破ASLR
,想到了之前的堆喷射(Heap Spray),用大量的滑行区来填充shellcode的前部。只要EIP
能落在滑行区就可以执行shellcode。只要部署大量的带有滑行区的shellcode,多次尝试,肯定会有EIP
落入滑行区的时候,所以最终的Eploit如下:
|