파라미터 1 - rdi

파라미터 2 - rsi

파라미터 3 - rdx

파라미터 4 - rcx

파라미터 5 - r8

파라미터 6 - r9

파라미터 7 - (%rsp)

파라미터 8 - 0x8(%rsp)

system call - %rax


Kali linux에서 msfconsole을 입력하여 메타스플로잇을 실행한다.




msf >  가 뜨면 정상적으로 실행이 된 것이다.





show payloads 명령어를 통해 사용가능한 페이로드 목록을 볼 수 있다.

이 중에서 필요한 페이로드를 사용하면 된다.





여기서는 x86 linux용 리버스 쉘코드를 만들어보기로 하자.

use 를 사용하여 해당 페이로드를 선택해준다.





show options 를 통해 필요한 페이로드 옵션을 볼 수 있다.





필요에 맞게 페이로드 옵션을 설정해준다. 

(아래와 같이 설정하게 되면 192.168.63.213:7777로 연결될 것이다.)





모든 설정이 끝난 후에 generate 를 입력하여 실행시켜주면 쉘코드가 짠!하고 나오게 된다.





RELRO(Relocation Read Only)

- GOT Overwrite와 같은 메모리 변경 공격으로부터 바이너리, 데이터 섹션을 보호하는 기술.

- Partial RELRO, FULL RELRO 두 가지로 나눠진다.


Partial RELRO

- 컴파일 옵션 : gcc -Wl,-z,relro

- GOT Writable

- ELF 데이터 섹션들(.got, .dtors 등)이 프로그램의 데이터 섹션들(.data, .bss)앞으로 오도록 재구성한다.


Full RELRO

- 컴파일 옵션 : gcc -Wl,-z,relro,-z,now

- GOT Read Only



- 최근 리눅스는 기본적으로 Partial RELRO로 컴파일되기 때문에 아무런 옵션 없이 컴파일 하는거랑 동일하다.

- Full RELRO의 경우 프로세스가 시작될 때 링커에 의해 모든 메모리의 재배치 작업이 일어나 느려지기 때문에 Partial RELRO를 더 많이 사용한다.

cat /proc/self/maps 명령으로 스택, 힙, 라이브러리 등의 주소가 랜덤하게 바뀌는지 확인 가능



ASLR 해제

echo 0 > /proc/sys/kernel/randomize_va_space


randomize_va_space=0 : ASLR 해제

randomize_va_space=1 : 랜덤 스택 & 랜덤 라이브러리 설정

randomize_va_space=2 : 랜덤 스택 & 랜덤 라이브러리 & 랜덤 힙 설정



0 : Std In

1 : Std Out

2 : Std Error

3 : Listenfd

4 : Clientfd




+ Recent posts