#define _GNU_SOURCE #include #include #include #include #include void hackit() { char *q = getenv("QUERY_STRING"); int fd = open("hacklog.txt", O_WRONLY|O_APPEND); printf("You got it!\n"); q = strchr(q, '.'); if (!q) exit(0); printf("Writing to hacklog.txt:\n%s\n", q); write(fd, q, strlen(q)); write(fd, "\n", 2); exit(0); } void readit(char * r) { char *q = getenv("QUERY_STRING"); int i; if (!q) q=""; for (i=0; q[0] && q[1]; i++, q+=2) { char tmp[3] = { q[0], q[1], 0 }; r[i] = strtol(tmp, NULL, 16); } r[i] = 0; } int main() { char result[16]; if ( chroot(".") ) return 1; if ( setresgid(65534, 65534, 65534) ) return 1; if ( setresuid(65534, 65534, 65534) ) return 1; readit(result); printf("Content-type: text/plain\n\n"); printf("%p\n", hackit); fflush(stdout); return 0; }