티스토리 뷰

알고있던 내용들이 정의로 깔끔하게 정리되어있어 문서를 좀 번역해보았습니다. 


취약점을 익스플로잇 하고 코드 인젝션을 하기 위해서 다음 것들을 해야합니다.


1. 익스플로잇에 필요한 메모리를 해커가 덮어쓸 수 있어야합니다.

2. 익스플로잇에 필요한 메모리 주소를 찾습니다.

3. 코드를 프로그램의 메모리에 카피 시킬 수 있습니다.

4. 인젝션한 코드를 실행하기 위해서 취약점을 사용합니다. 


관심있는 메모리 


코드가 저장된 주소 : 만약 이 부분을 수정할 수 있다면 프로그램이 실행될 때 원하는 코드를 실행하게 할 수 있습니다.


종류 

- 리턴 주소 : 대표적인 코드가 들어있는 주소입니다.

- GOT : 리눅스에서 동적으로 로딩되는 함수의 코드가 들어있는 주소입니다. 

- Virtual function table : 실행할 메소드의 주소들를 알기 위해서 사용됩니다.        

- Dtors functions : 프로그램이 종료될 때 실행됩니다.               


버퍼오버플로우의 정의

    

- 배열의 경계선을 넘어서 써서 이전의 정보를 덮어쓰는 것이다. 

- 인덱스로 배열에 접근하거나 포인터로 접근하는 것 둘다 버퍼오버플로우의 원인이 될 수 있습니다. 

- 자바의 경우 포인터가 없고 바운드 체크 또한 없기 때문에 취약점이 없습니다. 


버퍼오버플로우가 일어나는 유형 


- strcpy 같은 취약한 함수를 사용했을 때 

- 인덱스를 배열의 범위에 벗어나게 사용한 경우 

- 정수 오버플로우 


 Indirect Pointer Overwriting 


포인터를 덮어씌우는 방식입니다. 공격자는 자신이 원하는 데이터를 가지고 있는 포인터를 하나 만든다면에 그 것을 덮어씌웁니다 . 

포인터가 쓰기를 위해서 역참조되었을 때 덮어씌우기 됩니다. 즉 데이터를 조작하는 기법.

역참조 : 포인터에서 *기능을 생각하시면됨 





                                                                                                                                                                                     

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
글 보관함