분석을 한 이틀 정도한거 같은데 어디서 취약점이 나오는지 전혀 모르겠다.
일단 동작순서부터 설명하도록 하겠다.
LFH 클래스에서 Bucket 이 있는데 이건 같은 사이즈의 Chunk들을 가지고 있는 집합이다.
이 버킷이 꽉 차있을 때 next bucket으로 이동해서 청크사이즈를 확인 후 같은 사이즈면서 꽉 차있지 않다면 할당을 해준다.
또 Bucket과 chunk address, next 포인터를 가진 META 구조체가 있는데 그냥 wrapper니까 별 다른건 없다
Bucket 생성자에서는 Bucket이 가지는 기준 memory를 mmap(RW, 0x4000 bytes)을 통해 생성한다.
처음에는 이걸 가지고 힙스프레이로 이용할 수 있을까 싶었지만 아래에서 RW 속성도 없는 guard page가 생성된다.
실제 메모리 영역들을 살펴보게 되면 아래와 같다.
guard page |
standard memeory |
그리고 현재 사용중인 영역을 bitarray라는 변수(char *)를 total chunk만큼 할당해주고 Allocate할 때 bit연산으로 사용중임을 표시해준다.
여기까지가 분석인데, 별다른 건 없어보인다.
아마
while(p){
p2 = p->next;
p->fptr(p); // typical destructor for objects.
p = p2;
}
이 부분에서 p->fptr(p); 이걸로 트리거링을 해야할 것 같다만.. 어떻게 변경하냐는 거다.
소스코드 분석을 더해보면 content_len만큼 할당해주고 is_unicode 가 true일 때 2배로 입력 받는걸 알 수 있다.
여기서 뭔가 발생할 것 같다만.. 전혀 아닌 것 같다.
막상 힙에서 덮어씌워질 게 없으니까 막막함...
'Write up > Wargame' 카테고리의 다른 글
[PlayTheWeb] writeup (0) | 2019.09.16 |
---|---|
[Wargame.kr] vulnerability (0) | 2016.10.02 |
[Wargame.kr] Admin 계정 탈취 인증샷 (0) | 2016.10.02 |
[Wargame.kr] All Clear (0) | 2016.09.13 |
[Wargame.kr] zairo (0) | 2016.09.08 |