완료됨
large bin attack 질문입니다 ^^

large bin attack (3/5)를 보면,30 line을 통과하기 위해서 0x10만큼 큰 값을 넣어준다고 되어있는데, 요부분이 잘 이해가 안되서 그런데 어떤 조건을 말하는건가요?

#시스템해킹
작성자 정보
더 깊이 있는 답변이 필요할 때
드림핵 팀과 멘토에게 직접 문의해 보세요!
답변 1
Karatus
워게임: 50

이제서야 답변 드리기는 좀 늦은 감이 없잖아 있지만 그래도 답변 남겨봅니다.

large bin은 다른 bin들과는 달리 fd, bk 이외에 fd_nextsize, bk_nextsize 포인터도 이용합니다.
여기서 중요한 점은 large bin이 어떤 식으로 연결이 되냐는 겁니다.

large chunk size를 가지는 chunk가 free 되었고, 재할당 시 적절한 크기가 아니라 large bin으로 이동하는 상황임을 가정해봅시다.
그렇다면 해당 chunk는 맞는 size의 large bin에 FIFO 방식으로 들어가게 됩니다.
중요한 점은 large bin은 재할당의 효율을 위해 bin 내에서 size 별로 내림차순 정렬을 고수한다는 것입니다.

위의 특징을 바탕으로 free 이후의 값 세팅을 살펴보면,

  1. fd, bk 값을 설정
  2. 현재 free되는 size와 해당 bin 내부의 다른 chunk size와 비교했을 때 작은 크기의 chunk 시작주소를 fd_nextsize에, 더 큰 크기의 chunk 시작주소를 bk_nextsize로 설정 (만약 없다면 그냥 fd=fd_nextsize, bk=bk_nextsize)

large bin attack (3/5)의 30 line, 즉 소스코드를 해석해보면 위의 설명과 같습니다.
그래서 만약 예제에서 나타난 연속된 large size의 chunk가 같은 size를 가진다면 bk와 bk_nextsize를 이용해 attack을 하려는 의도를 이용하지 못하게 됩니다.
결국 앞의 chunk와 size를 달리 설정하기 위해 +0x10만큼 더 준 것입니다.

2021.02.21. 23:32