본문 바로가기

fastbin attack시의 size check

@eouya22025. 9. 8. 16:21

 

문제 풀다가 알게된 거 정리

 

Partial RelRO에 PIE도 없는 아주 쉬운 문제로 보였다. 심지어 쉘함수도 존재했다.

 

처음에 tcache poisoning으로 got 주소를 target으로 잡고 할당받을 때 쉘함수 주소를 넣으면 될 것 같다고 생각했다.

그런데 poisoning은 잘 되었으나, 아래 사진과 같이 tcache chunk에서 반환을 안해주고 Top chunk가 반환해주는 상황이 나타났다. 이것은 calloc의 특성으로 calloc 함수로 청크 할당 요청을 할 경우 tcachebin에 해제된 청크가 있어도 다른 bin에서 가져오거나 새로운 청크를 할당받기 때문이었다.

 

그래서 fastbin dup을 시도를 했는데, 여기서도 새로 알게 된 지식이 있다.

fastbin dup 이후 fd 조작하여 두번 할당 요청 후의 반환 주소가 exit의 got로 향하도록 하였다.

그런데 heapinfo를 보면 size error라고 나오는데, exit got의 size 자리에 0x0이 들어있기 때문이다.

만약 저상태로 계속 진행해서 해당 주소를 할당받고자 하면, memory corruption 에러 문구와 함께 프로그램이 종료되게 된다.

저 에러가 안뜨게 하려면 할당 받고자 하는 주소의 size가 반환받고자 하는 fastbin 집단의 size와 같아야 한다. (align 기준으로 맞춰주므로 0x10미만의 차이는 통과한다.) 추가로 size는 size위치의 하위 4바이트에서만 읽기 때문에, 상위 4바이트는 아무 값이어도 상관 없다. 

eouya2
@eouya2 :: eouya2

개인공부 기록 / 틀린거 있으면 돌팔매질 부탁드립니다

목차