dreamhack - baby-bof writeup
[dreamhack] baby-bof writeup
1. 문제

baby-bof
Simple pwnable 101 challenge
Q. What is Return Address?
Q. Explain that why BOF is dangerous.
2. 풀이
win
함수를 실행시키면 flag
를 열어서 출력해줄 것이다.
다만, main
에서는 win
함수를 실행하지않는데, 대신에 win
함수의 주소를 준다.
name
을 먼저 입력 받고, 그뒤에 hex value
를 입력 받아서 integer count
를 입력한 만큼 스택에 해당 hex value
를 채우게되는데, 스택에는 항상 리턴주소가 존재하기 때문에 해당 값을 win
함수의 주소로 덮어주면 flag
를 얻을 수 있을 것이다.
gdb
로 main
에 breakpoint를 걸고 실행시킨 후 backtrace
를 보면 0x7ffff7c2a1ca
에 __libc_start_call_main+122
, 즉 main
함수가 종료되면 리턴되는 주소가 담겨있다.
따라서 이 주소가 있는 부분을 win
함수의 주소로 덮으면 main
함수 이후에 실행될 것이다.
출력을 보면 상위주소는 다르지만 0xa1ca
가 있는 주소가 4번째 위치에 존재하고, 이 위치까지 덮으면 win
함수가 실행된다.
여기서는 로컬에서 했기 때문에 DH{sample_flag}
가 실행되고, 실제 VM을 dreamhack에서 실행하면 실제 flag
가 보인다.
사실 나는 대충 이것저것 입력해보다가 입력한 hex value로 주소가 덮이는걸 보고 때려맞췄다. 이렇게 기록하면서 제대로 공부하는 느낌…