start
漏洞
栈溢出。
思路
这个程序用了两个系统调用,系统调用号分别是04和03,write和read。
这个栈的结构比较简单,没有ebp,retn对应的是exit,设retn对应栈+4的位置为A,A里面的内容是这个位置的栈地址。
这里需要注意的是,虽然这个程序没有开PIE,但是ASLR是启动了的。也就是堆栈地址随机化。 先用栈溢出到开始代码段构造
write的地方,这个时候的esp刚好指向A,于是就可以打印出栈地址。
然后只要把shellcode放到栈上就好了。
第一次打印地址的时候注意不要用sendline,会覆盖掉地址内容。
exp
1 | |