ipwn
[LOB(Lord Of Buffer overflow)] goblin -> orc 본문
이번 단계는 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를 넣어서 푸려고했는데 왜인지 안돼서 그냥 뒷 부분에 넣어서 풀어버렸다.
'Write up > LOB' 카테고리의 다른 글
[LOB(Lord Of Buffer overflow)] wolfman -> darkelf (0) | 2018.01.16 |
---|---|
[LOB(Lord Of Buffer overflow)] orc -> wolfman (0) | 2018.01.16 |
[LOB(Lord Of Buffer overflow)] cobolt -> goblin (0) | 2018.01.14 |
[LOB(Lord Of Buffer overflow)] gremlin -> cobolt (0) | 2018.01.14 |
[LOB(Lord Of Buffer overflow)] gate -> gremlin (0) | 2018.01.13 |