ipwn
[LOB(Lord Of Buffer overflow)] assassin -> zombie_assassin 본문
이번 단계는 assassin 단계이다.
바로 복사본을 만들고 파일들을 살펴보겠다.
기본적으로 zombie_assassin 파일과 zombie_assassin.c 코드가 있다.
코드를 읽어보도록 하겠다.
코드가 저번 코드랑 조금 비슷하다.
하지만 달라진 점이 있는데 바로 strncpy로 딱 48byte만 덮어준 것이다.
이번 단계에서 사용될 기법은 바로 FAKE ebp기법이다.
이전 단계에서 ret gadget을 가져와서 사용했다면, 이번 단계에서는 leave-ret gadget을 가져와서 사용할 것이다.
사실 이 기법은 예전에 사용했던 Frame Pointer Overwrite와 굉장히 닮아있다.
일단 우리가 넘겨줄 payload는 dummy*40 + &shellcode -4 + leave-ret gadget가 될 것이다.
일단 이렇게 payload를 넘겨줬다고 가정한 뒤 leave leave ret이 된다고 생각하면 된다.
메모리가 어떻게 움직이는지 보겠다. 여기서 ret은 leave-ret gadget으로, sfp는 &shellcode-4로 덮였다고 가정한다.
위 사진이 기본적으로 leave를 한 상황이다. 이제 overflow를 일으킨 ret 부분의 leave-ret이 실행될 것이다.
leave-ret gadget 덕분에 esp가 shellcode의 위치에 있게 되고 이제 ret 즉
pop eip
jmp eip
를 실행시키면 shellcode가 실행될 것이다.
이제 우리는 leave-ret gadget의 주소를 구해와야한다.
복사본을 디버깅해서 leave-ret의 주소를 구해오겠다.
leave-ret gadget의 주소는 0x80484df이다.
이제 복사본에 dummy*44 + 0x80484df를 넘겨주어 core dump를 가져오겠다.
성공적으로 core dump를 가져왔다.
이제 core dump로 메모리값을 읽어와보겠다.
&buffer -4의 주소는 0xbffffa8c이다.
이제 payload는 shellcode(34byte) + dummy*6 + 0xbffffa8c + 0x80484df가 될 것이다.
한 번 복사본에 payload를 넘겨줘보겠다.
흠 왜인지 segmentation fault가 발생했다.
core dump를 열어서 어디 부분으로 jmp했는지 확인해보자.
\x31\xc0\x50\xbe\x2e\x2e\x72\x67\x81\xc6\x01\x01\x01\x01\x56\xbf\x2e\x62\x69\x6e\x47\x57\x89\xe3\x50\x89\xe2\x53\x89\xe1\xb0\x0b\xcd\x80
내가 사용하는 shellcode인데 저번과 같이 shellcode를 또 주소로 인식해서 그 곳으로 뛴 듯 하다.
다시 payload를 구성하면 0xbffffa94 + shellcode(34byte) + dummy*2 + 0xbffffa8c + 0x80484df가 될 것이다.
payload를 넘겨줘보겠다.
성공적으로 shell을 가져왔다.
이제 원본 file에도 payload를 넘겨 권한이 상승된 shell을 가져오겠다.
성공적으로 shell을 가져왔다.
zombie_assassin으로 넘어가는 password는 no place to hide이다.
흠 사실 sfp의 값에 &buffer -8의 값을 넘겨주니 굳이 buffer의 시작 부분에 &buffer +4의 값을
넘겨주지 않아도 shell이 가져와졌다.
아마 ret부분 중 pop eip부분에서 또 pop이 일어나서 그런 것 같다.
'Write up > LOB' 카테고리의 다른 글
[LOB(Lord Of Buffer overflow)] succubus -> nightmare (0) | 2018.01.21 |
---|---|
[LOB(Lord Of Buffer overflow)] zombie_assassin -> succubus (0) | 2018.01.21 |
[LOB(Lord Of Buffer overflow)] giant -> assassin (0) | 2018.01.20 |
[LOB(Lord Of Buffer overflow)] bugbear -> giant (0) | 2018.01.19 |
[LOB(Lord Of Buffer overflow)] darkknight -> bugbear (0) | 2018.01.19 |