System Hacking(Pawnabld) 정리

Tamszero·2024년 11월 21일

이비전

목록 보기
10/12

포너블이란?

: 시스템 해킹으로 /bin/sh (shell) 을 탈취하여 작업을 수행하는 것

SHELL 획득이 중요한 이유?
: 쉘은 사용자와 커널간의 인터페이스 역할을 하여
다양한 명령어를 통해 커널과 대화를 할 수 있게 도와준다(명령어 해석기)
이때 쉘을 통해 /etc/passwd 파일이나 /etc/shadow(사용자 pw 해시값이 저장된 파일)을 가져올 수 있다

Linux memory layout


리눅스의 메모리 구조에는 아래의 5가지 세그먼트가 존재한다.

1. code 세그먼트

  • text 세그먼트라고도 불리며 프로그램에서 실행 가능한 코드가 위치한다.

2. data 세그먼트

  • data와 rodata 로 나뉘어 지는데 컴파일 할 때 코드에서 초기화된 전역변수 또는 전역상수를 저장한다

3. BSS 세그먼트

  • 초기화되지 않은 변수를 저장한다. 프로그램 시작 시에는 모두 메모리에서 값이 0으로 초기화 되어서 들어간다

4. Heap 세그먼트

  • malloc(), calloc()과 같은 함수를 통해 프로그램 실행중 동적으로 할당받는 메모리가 위치한다.

5. Stack 세그먼트

  • 지역변수, 레지스터, 환경변수 정보 등을 저장한다. 메모리의 끝에 위치해 높은 주소에서 낮은 주소 방향으로 가변적으로 확장된다

calling Convention

Stack Frame이란?

: 함수가 호출될 때, 그 함수만의 스택 공간을 구분하기 위해서 생기는 공간

Cdel

: x86(32bit Architecture)에서 사용하는 함수 호출 규약

void caller(){
	callee(1,2); //callee의 인자로 1,2가 전달됨 -> 2부터 push!
}

Cdel함수 호출 처리 순서
1. Caller가 전달할 argument를 stack에 push
2. calle prolog
3. callee epilog
4. caller가 call과정에서 사용한 stack정리 (callee가 아닌 caller가 인자를 정리한다)
5. 함수 반환 값은 eax로 전달

sysv

: x64(64bit Architecture)에서 사용하는 함수 호출 규약

  1. 6개의 인자를 RDI, RSI, RDX, RCX, R8, R9에 순서대로 저장하여 전달
  2. callee prolog
  3. callee epilog
  4. caller에서 인자 전달에 사용된 스택을 정리
  5. 함수의 반환 값은 RAX로 전달

0개의 댓글