[System Hacking][DreamHack][Stage4] Exploit Tech: Shellcode

marceline·2023년 5월 19일
0

[System Hacking]

목록 보기
13/16

1. Introduction

Exploit

"부당하게 이용하다"

상대 시스템에 침투하여 시스템을 악용하는 해킹

Shellcode

exploit 을 위해 제작된 어셈블리 코드 조각
일반적으로 셸을 획득하기 위한 목적으로 셸코드를 사용해서, 특별히 "셸" 이 접두사로 붙었다.

만약 해커가 tip 를 자신이 작성한 셸코드로 옮길 수 있으면 해커는 원하는 어셈블리 코드가 실행 되게 할 수 있다.

어셈블리어는 기계어와 거의 일대일 대응 되므로 사실상 원하는 모든 명령을 CPU 에 내릴 수 있다.

셸코드는 어셈블리어로 구성되므로 공격을 수행할 대상 아키텍처와 운영체제에 따라, 그리고 셸코드의 목적에 따라 다르게 작성된다.
공유되는 셸코드는 범용적으로 작성된 것
따라서 실행될 때의 메모리 상태 같은 시스템 환경을 완전히 반영하지는 못한다.

최적의 셸코드는 일반적으로 직접 작성해야 하며, 상황에 따라 반드시 그래야만 할 수도 있다.

셸코드를 공유하는 서비스가 있다는 사실은 알되, 언제든 스스로 작성할 수 있어야 한다.
셸코드 공유 사이트

2. orw Shellcode

orw 셸코드 작성

파일을 열고, 읽은 뒤 출력해주는 셸코드!

/tmp/flag 를 읽는 셸코드

구현하려는 셸코드의 동작을 C 언어 형식의 의사코드로 표현시

char buf[0x30];

int fd = open("/tmp/flag", RD_ONLY< NULL);
read(fd, buf, 0x30);
write(1, buf, 0x30);

orw 셸코드 작성을 위한 syscall

syscall
시스템 호출 또는 시스템 콜(system call), 간단히 시스콜(syscall)은 운영 체제의 커널이 제공하는 서비스에 대해, 응용 프로그램의 요청에 따라 커널에 접근하기 위한 인터페이스이다.


register 명칭 정리

  • rax : Accumulator register

  • rbx : base register

  • rcx : counter register

  • rdx : data register

  • rsp : stack pointer register

  • rsp : base pointer register

  • rsi : source index register

  • rdi : Destination index register

의사코드의 각 줄을 어셈블리로 구현한다면! (아래)

1. int fd = open("/tmp/flag", )_RDONLY, NULL);

0개의 댓글