🍜FUSec - Brainf***
Explain:
Nhìn vào hàm brain_run có thể thấy 2 phần có chứa 1 lỗi overflow:

2 hàm case trên đều chứa lỗi không kiểm soát tốt buffer. Mà 2 con trỏ kia đều thuộc phân vùng heap.
Vậy nên ta có thể sử dụng 1 lỗi đó là Heap Overflow để khai thác.
Đây là phần tính size để overflow:

Nhưng làm thế nào để Overflow?
Thì do đây là phép nhân nên ta lấy 2 số đủ lớn thì allocated_block sẽ cực nhỏ (Unsigned Integer Overflow).
Sau đó chương trình còn malloc thêm cả đoạn code brainf*** nên ở đây mình cho size của nó cực lớn để nó sử dụng nmap thì sẽ không chèn vào giữa 2 chunk_pointer và object.
Attack:
Đầu tiên là in ra để leak
mmapvàheapđể khi overwrite sẽ không bị lỗiDựa vào đoạn code này thì overwrite
machine->data_pointerthànhelf.symbols['puts']Setup các got sao cho
malloc->systemvà gọi vềexit->mainKhi malloc dã thành
systemthì làm choallocated_sizetrỏ đến địa chỉ của/bin/shlà được. Ở đây mình set/bin/shở trên heap.
Sửa got
Get shell
Result:

Full Payload:
File:
Last updated