off-by-one
realloc fake size
realloc fake size
2017.11.04```cint main(){ char *a = malloc(0x8); char *b = malloc(0x8); char *c = malloc(0x40); char *topguard = malloc(0x8); // modify b.size *(b-0x4) = 0x59; realloc(b, 0x8); return 0;}``` trigger & overlapchunk `` a``에서 off-by-one overflow가 발생해 `` b.size``를 수정할 수 있는 상황이라면 이를 이용해 chunk overlap할 수 있으며, 이는 `` b`` chunk의 overflow, libc_base leak으로 연계할 수 있다.```bashgdb-peda$ x/32wx 0x565580000x56558000: 0x00..
The House of Einherjar
The House of Einherjar
2017.08.16The House of Einherjarhttps://github.com/umbum/pwn/blob/master/how2heap/house_of_einherjar.c off-by-one(null) + Force 응용( huge consolidate ) + unlink check 회피.fake chunk까지 consolidate 하고 다시 ``c malloc()``하면 fake chunk가 반환되는 식. off-by-one(null)```cvictim->size's LSB = 0x00```Poison null byte와 같은 off-by-one overflow를 이용해 size LSB를 ``c 0x00``으로 만들지만, 차이가 있다.Poision null byte``c free(victim)`` 이후 of..
Poison null byte
Poison null byte
2017.08.15https://github.com/umbum/pwn/blob/master/how2heap/poison_null_byte.c malloc'ed region에 off-by-one error가 발생할 때, next chunk size의 LSB를 `` 0``으로 만들어 size를 속이는 방법.결과적으로 d chunk 내부에 b2 chunk가 위치하게 되므로 d chunk에 접근해 b2 chunk를 변경할 수 있다. null byte off-by-one error는 종종 발생하기 때문에 많은 경우에 사용할 수 있는 테크닉이라는 점은 장점. b2 chunk는 heap에만 존재할 수 있기 때문에 b2 chunk가 function pointer 등 유용한 데이터를 저장하고 있을 경우나, overlap을 이용한 leak..