목록전체 글 (63)
ZZoMb1E_PWN
※ 잘못된 부분이 있으면 알려주세요. 확인 후 수정하도록 하겠습니다. ※ 저번 게시글에서 Buffer OverFlow에 대해 간략하게 다뤘다. 이번에는 Stack을 변조하는 것인 Stack Frame에 위치하는 ret 부분을 공격하는 기법에 대해 다루겠다. Stack Frame은 기본적으로 위와 같은 구조를 가지고 있다. 만약, buf에 데이터 입력하는데 buf보다 더 큰 크기의 데이터를 입력하면 어떻게 될까?? 별다른 검증이 없는 프로그램인 이상 sfp와 ret 영역까지 침범하여 입력이 가능해진다. 이런 흐름으로 이뤄지는 공격이 Return Address Overwrite이다. 간단한 예제를 하나 생성하여 실습해보겠다. #include void getshell(){ execve("/bin/sh",0,0..
※ 잘못된 부분이 있으면 알려주세요. 확인 후 수정하도록 하겠습니다. ※ Buffer OverFlow는 발생하는 영역에 따라서 Stack Buffer OverFlow와 Heap Buffer OverFlow로 나뉜다.Heap에 대해서는 다음에 다룰 예정이기 때문에 Stack Buffer OverFlow만 작성하도록 하겠다. 먼저 Buffer라는 개념을 알아야 한다.Buffer는 컴퓨터가 데이터를 처리하기 위해 사용하는 것으로 단순하게 생각하면 데이터의 임시 저장소이다. 예를 들면 12345라는 데이터를 송수신하는 것이 있다. 수신 측에서는 데이터를 받자마자 처리를 하게 되는데 임시 저장소가 없다면 처리하는 동안 수신받는 데이터들은 유실되게 될 것이다. 즉 12345라는 데이터가 아닌 123의 데이터만 ..
※ 잘못된 부분이 있으면 알려주세요. 확인 후 수정하도록 하겠습니다. ※ 리눅스의 메모리 구조는 [CODE 세그먼트], [DATA 세그먼트], [BSS 세그먼트], [HEAP 세그먼트], [STACK 세그먼트]로 구성되어 있다. CODE 세그먼트 유저가 작성한 코드가 저장되는 영역으로 실행할 프로그램의 코드가 저장되어 있다. CPU에서 이 코드를 읽고 실행을 시켜야 하기 때문에 읽기 권한과 실행 권한을 가지고 있다. void func1(){ ... } void func2(){ ... } int main(){ ... } DATA 세그먼트 초기화된 전역 변수 혹은 정 변수가 저장되는 영역으로 프로그램 시작과 함께 할당되며 종료시 같이 소멸된다. 읽고 쓰기까지 가능한 data와 읽기만 가능한 rodata(Re..