## https://sploitus.com/exploit?id=ED4A4484-06CF-50FD-9EA1-88E35B272802
# CVE-2014-0160
# Lab dựng lab sử dụng Heartbleed để leak memory của webapps
Repo này tập trung vào xây dựng 1 container nhằm tạo môi trường dễ có thể khai thác nginx sử dụng kỹ thuật Heartbleed tập trung vào:
- Dựng môi trường sử dụng Docker
- Sơ đồ của setup server
- Các bước demo
# Sơ đồ server

Vấn đề **CVE-2014-0160** xuất hiện khi thư viện OpenSSL cung cấp TLS chức năng heartbeat có buffer size 64kb gây dư thừa gây leak thông tin nhạy cảm của server memory
# Luồng tấn công
## Sử dụng payload **heartbleed.py**
Webapp đang xử lý các thông điệp nhạy cảm được nginx cache lại trong memory
Chúng ta khai thác bằng cách xem môi trường có hỗ trợ TLS heartbeat không
openssl s_client -connect : -tlsdebug
> Lưu ý các bản OpenSSL hiện đại có thể không còn hỗ trợ giao thức TLS heartbeat vui lòng sử dụng phiên bản có hỗ trợ
Heartbleed là lỗi đọc tràn bộ nhớ (out-of-bounds read) mang tính ngẫu nhiên.
Server sẽ trả về 64KB bộ nhớ liền kề
Header của 1 heartbeat (*RFC6520*) ``18 03 02 00``
# Demo
Sử dụng docker build để build lab heartbleed
``docker build -t heartbleed-lab .``
``docker run heartbleed-lab -p port:8443``
> Port default của webapps được serve ở 8443
Sử dụng payload [heartbleed.py](https://gist.github.com/akshatmittal/10279360) để kiểm thử
Ta có thể quan sát thấy payload cho ta kếp quả trả về dưới dạng hexdump
ở example dump ta có thể thấy được request vừa gửi và các ô memory chủ yếu là 0x00 do payload có tính ngẫu nhiên nên ta phải chạy một số lần để có thể leak được kếp quả mong muốn
Ta có thể chạy thử memory.py để request đến nginx lưu vào memory
và sau đó có được kếp quả leak được như ta thấy được ở result.txt
# Rules
Do ta biết được kẻ tấn công sẽ sử dụng heartbeat request để leak được thông điệp
``alert tcp any any -> any 443 (msg:"Heartbeat request"; content:"|18 03 02 00|"; rawbytes;sid:100000)``
Sử dụng snort ids phát hiện xâm nhập