스택 버퍼 오버플로우(Stack Buffer Overflow) 세계 최초의 웜이라고 불리는 모리스 윔도 이 공격을 통해 전파됨 보안 공부를 모르는 개발자도 알만큼 유명하고 역사가 오래된 취약점입니다. 이렇게 오랜 역사를 자랑하는 이 취약점은 아직도 많은 SW에서 발견됩니다. CVE details에 따르면 스택 버퍼 오버플로우를 포함한 오버플로우 취약점은 많이 높아요(4위) 그럼 스택 버퍼 오버플로우가 발생하는 원인이 무엇인지, 그리고 이 취약점이 어떤 문제로 이어질지 공부 ㄱ BOF에 필요한 용어 간단 정리 버퍼는 데이터가 저장되는 공간 sfp는 스택 베이스 값을 의미 - sfp는 스택 주소값을 계산할 때 현재 스택값의 기준 필요한 프레임 포인터 값 지정(4 or 8byte) rbp(or ebp)는 한 ..
함수 호출 규약🤙 함수의 호출 및 반환의 약속 한 함수에서 다른 함수를 호출 시, 프로그램의 실행 흐름은 다른 함수로 이동합니다. 그리고 호출된 함수가 반환되면 다시 원래의 함수로 돌아와 기존의 실행 흐름을 이어가죠. 함수 호출 시 반환된 이후를 위해 호출자(Caller)의 상태(Stack frame) 및 반환 주소(Return Address)를 저장해야 함! 또한, 호출자는 피호출자(Callee)가 요구한 인자를 전달하며, 피호출자의 실행이 종료 시 반환 값을 전달 받아야함 함수 호출 규약 적용은 일반적으론 컴파일의 몫이며, 프로그래밍 언어에 맞게 호출 규약을 알맞게 적용에 컴파일합니다. 호출 규약은 여러가지가 있으며, 코드에 명시가 안되어 있다면 컴파일에서 지원하는 호출 규약 중 CUP의 아키텍처에 ..
shell_basic 여러가지의 문제풀이..? 1. skeleton_code 활용 매우 정석적인 방법이고 커리큘럼이 의도한 내용입니다. 이전에 사용했던 orw를 활용해볼까요? 이전 스켈레톤 코드와 적용할려던 예시인데요 밑에 링크들은 참고 자료ㅠ FreeBSD/x86 - execve /tmp/sh - 34 bytes shell-storm.org Exploit Tech: Shellcode 익스플로잇(Exploit) 해킹 분야에서 상대 시스템을 공격하는 것으로 침투하여 시스템을 악용하는 해킹과 맥락이 같음 첫 번째 공격기법인 셸코드이며, 지금까지 배운 지식을 점검하고 gdb 사용에 dystopia050119.tistory.com 자 그럼 시작해볼까요 C언어 형식의 의사코드로 만들면 이전에 배운것처럼 위 코드를..
익스플로잇(Exploit) 해킹 분야에서 상대 시스템을 공격하는 것으로 침투하여 시스템을 악용하는 해킹과 맥락이 같음 첫 번째 공격기법인 셸코드이며, 지금까지 배운 지식을 점검하고 gdb 사용에 익숙해지는 시간이 되어봐요 셸코드 익스플로잇을 위해 제작된 어셈블리 코드 조각 일반적으로 셸을 획득하기 위한 목적으로 셸코드를 사용해, 특별히 "셸"이라는 접두사 붙음 셸을 획득하는 것은 매우 중요해요, 그 이유는 뒤에 나와요 만약 해커가 rip를 자신이 작성한 셸코드로 옮길 수 있으면 익스플로잇이 되요! 셸코드는 어셈블리어로 구성되므로 공격을 수행할 대상 아키텍처와 OS에 따라, 그리고 셸코드의 목적에 따라 다르게 작성됩니다 또한 밑 링크는 아키텍처 별 범용적 셸코드! shell-storm | Shellcode..
CPU 레지스터 (Register) 💡 CPU내에 위치한 기억장치로 많은 수의 레지스터를 CPU내에 포함시키는 것은 어렵기 때문에 특수 목적용 레지스터들과 몇몇 일반 목적용 레지스터만 존재한다. 대표적인 레지스터 PC (Program Counter) 다음 인출(Fetch) 될 명령어의 주소를 가지고 있는 레지스터 AC (Accumulator) 연산 결과 데이터를 일시적으로 저장하는 레지스터 IR (Instruction Register) 가장 최근에 인출된 명령어(현재 실행 중인 명령어)가 저장되어 있는 레지스터 SR (Status Register) 현재 CPU 의 상태를 가지고 있는 레지스터 MAR (Memory Address Register) PC에 저장된 명령어 주소가 사용되기 전에 일시적으로 저장되..
Program 연산장치가 수행하는 동작을 정의한 일종의 문서! 연산 장치에 전달하면, CPU는 적혀있는 명령들을 처리하여 프로그래머가 의도한 동작 수행 사용자가 정의한 프로그램을 해석하여 명령어를 처리할 수 있는 연산 장치(programmable) 현대 PC는 대표적 programmable 연산장치, 일반계산기는 대표적인 non-programmable 운영체제 발전과정 운영체제의 기술 발전 과정 일괄처리/ 다중 프로그래밍/ 시분활/ 다중 처리/ 분산 처리 운영체제의 발전 과정 1세대 일괄처리 2세대 시분활 다중 프로그래밍/ 처리 실시간 3세대 다중 모드 4세대 dystopia050119.tistory.com 자세한 역사는 위 링크를 보시면 되요, 다 설명하기 힘드니까 ㅠ 또한 많은 프로그래머들은 프로그램..
운영체제의 기술 발전 과정 일괄처리/ 다중 프로그래밍/ 시분활/ 다중 처리/ 분산 처리 운영체제의 발전 과정 1세대 일괄처리 2세대 시분활 다중 프로그래밍/ 처리 실시간 3세대 다중 모드 4세대 분산처리(p2p, 클라이언트, 클라우드 1. 일괄처리 시스템 초기의 컴퓨터 시스템에서 사용된 형태 일정량 또는 일정 기간동안 데이터를 모아 한꺼번에 처리하는 방식 - 일괄 처리를 위해 적절한 작업 제어 언어(JCL)를 제공해야함 - 컴퓨터 시스템을 효율적으로 사용 가능 - 반환 시간(Turn Around Time)이 늦지만 하나의 작업이 모든 자원 독점이니, CPU 유휴 시간 ↓ 유후 시간 : 어떠한 프로그램에 의해서도 사용되지 않는 상태! 일괄처리의 장점 많은 사용자와 프로그램이 컴퓨터 자원 공유 수동으로 개입..
운영체제(OS; Operating System)의 목적 HW관리 뿐만 아닌 App(응용 프로그램) 사이에서 관리하는 것! PC의 HW를 관리하는 것이 목적이며, 사용자의 편의를 맞추는 서비스인 목적! User에게 PC의 App를 쉽고 효율적으로 실행할 환경 제공 컴퓨터 시스템 HW 및 SW 자원을 여러 사용자 간에 효율적 할당, 관리, 보호 OS는 제어 프로그램 = 사용자 프로그램의 오류나 잘못된 자원 사용을 감시하는 것과 입출력 장치 등의 자원에 대한 연산과 제어를 관리한다. OS는 컴퓨터 성능을 높히고, 사용자에게 편의성 제공을 목적하는 HW를 관리! 또한 폰 노이만 구조(ISA까지만 읽으세요)를 따르는 체계로써 자세한 내용은 링크로 Computer Architecture 1. 컴퓨터 구조(Compu..
2단계 : command-injection-1 Code! 자 코드 확인까지 했죠 빨간색으로 표시한 부분이 핵심이죠 cmd = f부분에서 바로 문자열 타입으로 받아드려 cmd를 실행하는 cmd injection 공격하라는 거죠 역시 규약이 어느정도 정해진 모습이예요 맞게 해야겠죠 아까 문자열로 받는다고 했으니까저 패턴만 분석하면 쉽게 딸 수 있겠죠 [A-Za-z0-9.]{5,20} 정규식 분석 💡"[A-Za-z0-9.]{5,20}"은 간단하게 해석하자면 소문자부터 대문자까지 전부 허용, 공백 X, 숫자는 0부터 9까지 허용, .문자도 허용(ping하는 웹 사이트니까..) 마지막인 문자열 5-20까지 정규식 표현 방식을 더 자세히 알려줄께요 나중에.. 더 자세히 정리해서 올리겠습니다 ㅠ 밑에 사이트는 정규식..
Level4 문제 풀이 Keyword : xinetd backdoor exploit 문제 파악 리눅스 서비스(telnet, ssh, finger 등) 시스템의 구성 및 설정에 대한 확인 문제네요 /etc는 설정파일이기에 매우 위험한 상태!! 바로 확인 해볼까요 아 당연히 파일 위치는 cd /etc/xinetd.d 로 이동하고 확인하겠죠 /etc/xinetd(실행 데몬)의 백도어 확인 💡finger은 접속자 상태 확인(local or remote user)이므로 확인하면 user(level5)가 server(/home/level4/tmp/backdoor)서버 파일을 실행함 즉, level4인 사용자가 level5의 실행파일을 실행하는 거니까 SetUID인 파일!! 그럼 해당 경로로 이동해 확인을 해볼까요 ..