반응형

버퍼가 heap에 있어야함. => malloc, calloc

heap에는 ret이 없어서 흐름 조작하기 어려움.

 

chunk에는 함수에 대한 포인터 변수 process가 있음

malloc으로 64+4 = 68바이트를 할당함.( 함수 포인터 4byte)

 

showlen을 process로 넘기고 gets를 이용하여 인자를 받음

 

밑의 b코드를 부면 shell code를 넣기 위해 nop를 채우고 쉘코드를 넣는다 (64byte만큼) inp가 64이므로

그리고 64byte 다음에 주소를 넣는다. 이값은 gets를 통해서 전달이 된다.

(리턴 주소는 못 덮어주므로 함수에 대한 포인터 변수를 덮어씀)

 

attack2 | buffer5를 하면  |는 파이프로 프로세스간 통신이 가능하게 해준다.

떠라서 attack2의 값이 넘어간다.

64byte를 넘어 주소값이 포인터 변수를 덮어 쓰게 된다. 주소값은 inp[0] ~[17]사이의 아무 주소이다.

nop을 실행하게 한다.

 

 

 

 

*방어법

 

 

함수 포인터 위치를 inp위로 =>inp가 넘쳐도 함수 포인터는 영향이 없다

또는 힙에서 명령어가 실행되지 않게 한다.

 

 

 

 

 

 

***전역변수 공격

 

heap과 동일한 방법임

 

728x90
반응형

'공부 > 보안' 카테고리의 다른 글

Return-Oriented Progamming  (0) 2020.11.03
Return-tol-libc Attacks  (0) 2020.10.17
Buffer Over flow 2  (0) 2020.10.16
Buffer Overflow Attacks 1  (0) 2020.10.16
set-UID Privileged programs  (0) 2020.10.15
블로그 이미지

아상관없어

,