시스템 해킹 : 운영체제나 소프트ㅜ에어, 하드웨어에 내재된 보안 취약점을 해킹하는 것
포너블 : 공격으로 관리자 권한을 탈취해 쉘을 따내는 것
쉘 코드 : 작은 크기의 코드로 소프트웨어 취약점 이용을 위한 내용부에 사용됨
공격 과정
어셈블리어 = 기계어를 사람이 읽을 수 있는 형태로 바꿔주는 역할
취약점이 있는 공격 대상 파일을 리버싱을 통해 분석해 Machine Code를 의사코드 형태로 복원하고 메모리 레벨에서 이해시 필요
Buffer over flow에서 적절한 padding 사용과 return address의 정확한 위치를 찾기 위해 gdb 사용시 필요
스택
시스템 콜 : 유저 모드에서 커널 모드의 시스템 소프트웨어에게 동작 요청을 하기 위해 사용함
운영체제 : 컴퓨터 시스템에서 하드웨어와 응용 프로그램 사이의 인터페이스 역할을 하며, 컴퓨터 자원을 효율적으로 관리하는 시스템 소프트웨어
쉘 : 운영체제에서 사용자와 컴퓨터 하드웨어 사이를 중계해주는 인터페이스
→ 사용자가 입력한 명령어를 운영체제에서 이해할 수 있는 형식으로 변환하고, 컴퓨터 하드웨어를 이용해 명령을 실행시켜주는 역할
사용자와 운영체제 간 대화를 가능하게 함
터미널 창에서 실행, 사용자가 입력한 명령을 해석하고 결과를 출력 → 일반적으로 명령어 해석기와 함께 제공됨
커널 : 운영체제의 핵심 부분으로, 하드웨어와 소프트웨어 간의 인터페이스 역할을 수행
운영체제의 가장 중요한 부분, 다른 모든 시스템 소프트웨어는 커널과 상호작용해 동작
운영체제에 따라 필요한 기능과 특성을 반영해 다른 디자인과 구현을 갖는다.
쉘 코드 : 관리자 권한을 얻기 위해 필요한 함수들을 byte 코드로 옮긴 것
일반적으로 어셈블리어로 작성된 후 기계어로 변경됨

basic_exploitation_000.c 파일
main 함수를 보면 buf의 헥사값이 0x80이므로 buf의 크기는 128byte임
scanf 함수는 141 byte의 문자열을 받음
=> 버퍼 오버플로우가 발생함
objdump -d basic_exploitation_000으로 디어셈블을 함

printf로 출력되고, scanf로 입력받음을 알 수 있고, __x86.get_pc_thunk.bx라는 함수를 확인할 수 있음

__x86.get_pc_thunk.bx 함수의 내용임
basic_exploitation_000을 실행해봄

실행할 때마다 buf의 헥사 값이 바뀌는 것을 볼 수 있음
python으로 쉘코드를 작성함(블로그 참고)

실행해보니 pwn이 없다고 해서 pwntools를 설치함

터미널에서 python 코드를 실행해서 DH를 찾음

basic_exploitation_001.c 파일
read_flag() 함수를 실행하면 cat flag를 진행함
-> 버퍼 오버플로우로 read_flag() 함수를 실행시켜 flag를 얻어내야 함
gdb basic_exploitation_001을 실행함

info functions를 실행함

-> read_flag() 함수의 주소를 찾을 수 있음 (0x080485b9)
쉘코드를 작성함(블로그 참고)

터미널에서 python exploit.py를 실행하고 ls를 입력하면 flag를 얻을 수 있음
