상세 컨텐츠

본문 제목

[LOB] level 16: assasin -> zombie_assassin

SYSTEM HACKING/LOB Redhat

by koharin 2019. 6. 26. 12:42

본문

728x90
반응형

 

 

strncpy(buffer, argv[1], 48): strncpyargv[1]을 딱 48byte만 복사한다. 다행인 것은 return address까지 복사하므로 return address에 원하는 주소를 넣을 수 있다.

 

Buffer 영역을 사용해보면 좋겠다고 생각했다.

일단 return address&RET을 넣어서 RET으로 이동한 후,

Buffer의 시작 주소를 RET의 이전 함수의 base pointer에 넣어서 buffer의 시작주소로 esp가 이동하면, buffer의 처음부터 &system + dummy 4byte + &“/bin/sh”payload를 주면 될 것 같다.

 

 

 

#RET의 주소

 

 

RETaddress: 0x80484e0

Little endian => “\xe0\x84\x04\x08”

 

#system의 주소

 

실행 후 systemaddress: 0x40058ae0

Little endian => “\xe0\x8a\x05\x40”

 

#“/bin/sh”의 주소

 

“/bin/sh”address: \x400fbff9

Little endian => “\xf9\xbf\x0f\x40”

 

Strncpyargv[1]48byte만 복사되지만 그 뒤로 NOP+shellcode를 줘도 해당 NOP의 주소로 이동하게 하면 상관없다.

따라서 FPO을 했을 때처럼 bufferNOP의 주소로 채우고 sfpbuffer의 시작주소를 주면, retleave의 주소를 넣었을 때 leave 수행 시 sfp로 이동해서 buffer의 시작주소로 esp가 가리키게 되고, 따라서 buffer에는 NOP의 주소로 채워져 있으므로 NOP이 위치한 곳으로 이동해서 shellcode를 실행할 수 있다.

 

 

 

Buffer의 시작주소: 0xbffffa70

 

 

 

 

Argv[1] 시작주소: 0xbffffbf9

Buffer에 넣을 주소(NOP의 주소): 0xbffffc31

 

 

NOP의 주소: 0xbffffc08

 

 

Buffer의 시작주소: 0xbffffa40

 

다시 buffer의 시작주소와 NOP의 주소를 제대로 구하니까 bash쉘이 떴다.

쉘코드를 사용하는 것이 편할 것 같아서 쉘코드를 사용했다.

 

원본파일에 해보자.

 

 

성공!

“no place to hide”

 

728x90
반응형

관련글 더보기