国赛初赛是一个月前的事了,菜鸡的队伍被学校的学长们暴打,初赛pwn题的shellcode题就让我感觉到自己对于shellcode还是有点生疏——水平仅限于用pwntools自带的shellcode。之后的一个月因为要转专业忙于期末考试,也没能练习,这段时间打算集中精力找点shellcode题研究研究。
先来BUU上的这道题,题倒不算难......

checksec一下发现NX没开,估摸着是道shellcode题。扔进IDA里面发现不能F5,但是汇编较为简单。前面是一个欢迎语的write和一个0x3c的read。
话说这里不知道是什么情况并没有用到ebp,只用了esp,有大佬知道的话还请在评论区普及一下。

再往下就是退出函数了,没啥东西。
我们要注意0x08048060处的指令:将esp压入栈中,这使得我们可以通过泄露栈中数据来获得栈上数据地址。而图示汇编有输入和输出的功能,可以用于泄露。
我们注意到当程序执行完0x8084809c处的ret之后,此时栈顶就是我们之前压栈的esp值,而由于这里的read有一个栈溢出漏洞,我们可以控制程序返回执行0x08048087将此时栈顶内容打印出来,这样我们就知道了栈上数据的地址。再利用下面的输入功能把shellcode写进去即可得到shellcode。
常用的手法是把"/bin/sh"压进栈中,用xor置零把ecx和edx清零,然后将esp的值赋给ebx,在令eax为0xb,最后计算出来shellcode所在的地址,并将其填入函数返回地址。
需要注意的是pwntools自

博主国赛初赛失利,意识到自己对shellcode生疏,之后因转专业考试未练习,现打算集中研究。以BUU上的题为例,分析题目,利用栈溢出漏洞泄露栈上数据地址,将shellcode写入,强调需自己编写shellcode,最后拿到flag。
最低0.47元/天 解锁文章
1万+

被折叠的 条评论
为什么被折叠?



