Auto post

背景

某个坑爹的小伙伴说只要我做出这玩意就请我吃3斤龙虾,于是我本着社会主义精神,昧着虾心,来写这篇文章。

主要用的知识点:

  1. python编程
  2. http协议包分析
  3. requests库文件的使用

[pwn] 关于栈的迁移

[pwn] 关于栈的迁移

在我们仅仅只能够控制ebp的情况下,我们怎么才能够控制eip去拿到我们的shell呢。

以下为科普

以32位程序举例,在使用call这个命令,进入一个函数的时候,程序会进行一系列栈操作:
push eip+4;push ebp;mov ebp,esp;来保护现场,避免执行完函数后堆栈不平衡以及找不到之前的入口地址。

执行完函数后会进行一系列操作来还原现场leave;ret;
这边的leave就相当于进入函数栈操作的逆过程。

1
2
leave == mov esp,ebp;pop ebp;
ret == pop eip #弹出栈顶数据给eip寄存器

这样如果能够控制栈空间到任意地址,那么我们就能利用ret来控制eip的数据了(栈顶数据)

mprotect 之痛

这道题目源自于 2016安云杯,题目原题可以在文章最后的附件里下载。

当时拿到这道题目以后,想法很简单。使用fmt将puts函数的got改掉换成程序自带的mprotect后门(如图)。先是用mprotect将栈空间段设置为可执行,然后利用gets函数将shellcode放入站上,由于最后没有将eax清空,eax寄存器仍然保存着栈地址,所以我们可以利用 jmp eax 或者 call eax 跳转到栈上执行。(一个简单的pwn案例)

,
隐藏