ipwn

[LOB(Lord Of Buffer overflow)] goblin -> orc 본문

Write up/LOB

[LOB(Lord Of Buffer overflow)] goblin -> orc

ipwn 2018. 1. 14. 22:22

이번 단계는 goblin 단계이다. 


바로 접속해서 copy file을 만들고 bash2를 실행시켜주겠다.


기본적으로 goblin 파일과 goblin.c 코드가 있다.


코드를 살펴보겠다.



코드를 보니 일단 이전과는 다르게 좀 길어진 것 같다.


하지만 걱정할 필요 없다. 크게 달라진 내용이 없기 때문이다. 일단 argc는 2보다 작아서는 안되며, 


입력은 argv로 넘겨받고, 환경변수를 사용할 수 없다. 그리고 argv[1][47] 즉 return address의 맨 앞부분이 


\xbf로 시작해야 한다. 설명이 어려워보일 수 있지만 것도 이전과 같이 매우 간단히 exploit할 수 있다.


일단 \xbf조건을 맞추는 것은 크게 신경쓸 필요 없이 성립 될 것이다. 그리고 argv[1]을 사용한다면 


argc는 무조건 2 이상이므로 이것도 성립한다. 즉 거의 신경쓸 조건이 없다는 것이다.


일단 우리가 넘겨줘야 할 값은 dummy*44 + shellcode address + shelcode가 될 것이다.


한 번 복사파일을 segmentation fault를 일으켜서 core dump를 가져와보겠다.



검사를 통과하기 위해 return address부분을 \xbf로 다 덮었다. 이제 core dump를 한 번 확인해보자.



shellcode의 시작 주소를 찾았다. 0xbffffac0이 shellcode의 주소이다.


이제 dummy*44 + 0xbffffac0 + shellcode를 payload로 넘겨주면 shell이 가져와질 것이다.


한 번 copy file에 payload를 넘겨줘 보겠다.



성공적으로 shell이 가져와졌다. 이제 원본 file에 똑같은 payload를 넘겨주어 권한이 상승된 shell을 가져와보겠다.



성공적으로 shell이 가져와졌다. orc로 향하는 password는 cantata였다.


사실 이 문제는 원래 buffer공간에 shellcode를 넣어서 푸려고했는데 왜인지 안돼서 그냥 뒷 부분에 넣어서 풀어버렸다.

Comments