시스템 해킹/DreamHack으로 해커를 꿈꾸며

[DreamHack] Return Address Overwrite

0x6b6569 2023. 2. 20. 20:56

1번 문제 입니다ㅏㅏㅏ

처음에 엄청 헤멨던 기억이...

 

문제 이름에서 추측이 가능하듯이 리턴 주소에 get_shell의 주소를 덮어주면 되는 문제이다.

 

c코드에서 추측해보길 scanf에 BOF 가능성이 있으므로 buf에 return address 전까지 더미 문자열을 넣는다.

하지만 문자열의 길이는 얼만큼 넣어야 할까?

buf의 사이즈인 0x28 만큼?? 이건 gdb를 돌려서 확인해본다.

 

 

<+4>에 rsp를 0x30만큼 빼는걸 확인하면 스택이 0x30만큼 빠지니까 0x30 + rbp 만큼 dummy 문자열을 만든다.

그다음 바로 get_shell 함수 주소를 return 주소에 넣어서 쉘을 획득한다.

 

get_shell 함수의 주소는 disas or print 둘 중에 더 편한걸로 알아내면 된다.

 

이제 exploit code를 작성해보자

 

매우 간단하다 0x30은 10진수로 48이고 마지막 rbp를 또 피해야 하므로 8byte를 더해주면 총 56바이트 만큼 더미 문자열을 넣으면 된다.  

정답을 블로그 주인이 필사적으로 가렸다.

여러분들이 직접 시도해서 풀어보시길,,,!!