Protostar Heap3
Wargame/Protostar2018. 1. 2. 21:53
코드를 보자
32만 할당하니까 우선 fastbin이라는 것을 알 수 있다. fast는 다른 bin 과 free될 때 다른 bin들과 다르다.
그리고 strcpy를 이용하여 fd와 bk를 마음대로 조작할 수 있다.
fake chunk 생성이 가능하다는 것이다. 첫번 째 청크를 조작하여 2번 째 청크의 prev_size와 size fd bk를 조작하여
b청크가 free 될 때 unlink가 되게하여 printf(실제로는 puts함수가 쓰인다.)에 winner의 주소가 들어가게 할 것이다.
처음에 문제 풀 때 내 우분투 환경에서 풀려고 했으나 이상하게 안되서 시간을 엄청 낭비하고 결국 포기하고 protostar iso를 다운받아서 풀었다...
쉘코드식으로 넣어줘야 풀리기 때문에 push하고 ret를 찾아서 winner함수에 붙였다.
Unlink 가 될 때 현재 청크의 fd+12에 bk 주소를 넣기 때문에 puts_got - 12를 해줘야 한다.
그래서 나중에 unlink가 될 때 puts_got - 12 + 12 == puts_got가 돼서 puts_got에 winner가 들어갈 수 있는 것이다.
이렇게 넣어주면
성공하게 된다. 아까운 내 시간....깝치지 말고 걍 할걸..
'Wargame > Protostar' 카테고리의 다른 글
Protostar Heap2 (0) | 2018.01.01 |
---|---|
Protostar Heap1 (0) | 2017.12.31 |
Protostar Heap0 (0) | 2017.12.31 |
Protostar Stack7 (0) | 2017.04.06 |
Protostar Stack6 (0) | 2017.04.05 |