ipwn

[LOB(Lord Of Buffer overflow)] vampire -> skeleton 본문

Write up/LOB

[LOB(Lord Of Buffer overflow)] vampire -> skeleton

ipwn 2018. 1. 17. 22:29

이번 단계는 vampire단계이다.


copy file을 만들고 바로 파일을 살펴보겠다.



기본적으로 skeleton file과 skeleton.c 코드가 있다.


바로 코드를 읽어보도록 하겠다.




코드가 제한이 많아졌다.


다 비슷한 제약이지만 가장 큰 문제가 생겼다.


바로 argv가 모두 사라졌고 buffer의 앞 공간도 사라졌다.


즉 쓸 공간이 거의 모두 없어졌다...


이럴 경우에는 어떻게 해야할까?


일단 조건에 맞게 값을 넘겨주어 core dump를 한 번 보도록 하겠다.



이렇게 값을 넘겨주었다. 한 번 core dump를 gdb로 debugging 해보겠다.



사용 가능한 공간이 정말 하나도 없어보인다.


하지만 맨 밑 부분 환경변수가 존재할 부분을 보면 ./로 시작하는 문장이 보인다.


한번 string을 가져와보겠다.



값을 봤더니 파일명이 나왔다.


즉 파일명을 가르키고 있는 환경변수가 사라지지않았다.


이 말은 파일명을 가지고 shellcode를 실행시킬 수 있다는 말이다.


정말 될지 copy file의 이름을 바꾼 뒤에, 바로 값을 넣어주어 core dump를 가져와보겠다.



nop(\x90)*50 + shellcode + nop(\x90)*50의 값을 넣어줬다.


shellcode뒤에 nop을 더 넣어준 이유는 shellcode가 스택의 밑바닥 위치에 존재하면 shellcode가 


제대로 작동하지 않기 때문이다.


아무튼 이제 파일명을 바꾼 core dump를 gdb로 debugging해보겠다.



확실히 가장 밑부분 환경변수 부분의 file 이름은 바뀌지않고 그대로 남아있다.


nop의 주소를 구했으니 우리가 넘겨줄 payload는 dummy*44 + 0xbfffff80(임의의 nop의 주소)가 될 것이다.


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



역시 성공적으로 shell이 가져와졌다.


그럼 이제 copy file을 지워버리고 원본 파일을 똑같은 이름으로 symbolic link를 걸어보겠다.



성공적으로 같은 이름으로 symbolic link가 걸렸다.


이제 payload를 symbolic link 파일에 넘겨줘보겠다.



성공적으로 shell이 가져와졌다.


skeleton으로 가는 password는 shellcoder이다.




Comments