본문 바로가기

[Wargame Write-up]/Lord of Buffer Overflow

[LoB RedHat 6.2] LEVEL 12: golem -> darkknight

LEVEL 12: sfp

 

FPO(Frame Pointer Overwrite) 기법을 이용해 공격하라는 힌트가 있다.

 

buffer보다 1바이트 더 strncpy 함수의 영향을 받기 때문에, buffer 뒤에 나오는 sfp의 마지막 바이트가 변조될 수 있다.

 

이것과 leave, ret을 이용해 eip를 조작할 것이다.

 

argc의 제한이 없기 때문에 argv[2]까지 이용한다.

 

 

 

argv[2]에 NOP 100개와 25바이트 쉘코드를 넣기 위해, B 125개를 임시로 두고 주소를 확인하기로 한다.

 

 

 

problem_child의 leave에 breakpoint를 걸고, 실행한다.

 

esp는 buffer를, ebp는 sfp를 가리킨다.

 

sfp의 주소가 0xbffffa??이므로, buffer 내의 주소로 변조해주면 된다.

 

buffer 40바이트는 argv[2]의 주소 10개로 채우면 문제 없다.

 

(※ leave는 mov esp, ebp; pop ebp와, ret는 pop eip; jmp eip와 동일하다.)

 

 

 

argv[2]의 주소를 확인해보면 0xbffffbe3임을 알 수 ㅇ

 

 

 

41번째 바이트는 buffer의 첫 바이트 주소로 하고, 위에서 언급한 대로 payload를 구성했다.