Video hướng dẫn khai thác trên Linux: bypass NX (part 1)
Tiếp nối chuỗi bài hướng dẫn khai thác trên Linux, hôm nay mình hướng dẫn các bạn cách thức bypass NX. Các kiến thức liên quan:
Bypass NX bằng return-to-libc
Trong bộ nhớ, ngoài module chính, còn có các thư viện như ld-linux.so.2, libc.so.6,... Các thư viện này giống như các dll trên Windows, có chứa các hàm mà module chính gọi tới. Vd, trong libc.so có printf, strcpy, exit, system...
=> Thay vì nhảy tới shellcode, vd, ta có thể nhảy tới hàm system với tham số “sh”, để bật shell lên.
Nhảy tới shellcode: khi thanh ghi chỉ lệnh eip trỏ tới lệnh ret, esp đang trỏ tới địa chỉ của shellcode (0xbffff790). Lệnh ret tương đương pop eip, nên sau khi lệnh ret được thực hiện, eip trỏ tới địa chỉ của shellcode (hình dưới).
Nhảy tới hàm exit: đặt địa chỉ hàm exit vào địa chỉ trả về của main, và cho tham số 3 như hình dưới (cách địa chỉ hàm exit 4Byte). Sau khi lệnh ret thực hiện, eip trỏ tới đầu hàm exit, còn esp+4 có giá trị 3. Tại đây, 3 được coi là tham số đầu tiên của hàm exit => tương đương với việc gọi exit(3).
Vậy tương tự exit, nếu ta thay exit(3) bằng system(“sh”) thì ta sẽ mở được shell!
Và đây là video khai thác cho các bạn
Các file liên quan các bạn tải về trong phần đính kèm.
- NX, xem tại https://whitehat.vn/threads/gioi-thieu-nx-va-aslr.8446/
- Shellcode, xem tại https://whitehat.vn/threads/huong-dan-viet-shellcode.8472/
Bypass NX bằng return-to-libc
Trong bộ nhớ, ngoài module chính, còn có các thư viện như ld-linux.so.2, libc.so.6,... Các thư viện này giống như các dll trên Windows, có chứa các hàm mà module chính gọi tới. Vd, trong libc.so có printf, strcpy, exit, system...
=> Thay vì nhảy tới shellcode, vd, ta có thể nhảy tới hàm system với tham số “sh”, để bật shell lên.
Nhảy tới shellcode: khi thanh ghi chỉ lệnh eip trỏ tới lệnh ret, esp đang trỏ tới địa chỉ của shellcode (0xbffff790). Lệnh ret tương đương pop eip, nên sau khi lệnh ret được thực hiện, eip trỏ tới địa chỉ của shellcode (hình dưới).
Nhảy tới hàm exit: đặt địa chỉ hàm exit vào địa chỉ trả về của main, và cho tham số 3 như hình dưới (cách địa chỉ hàm exit 4Byte). Sau khi lệnh ret thực hiện, eip trỏ tới đầu hàm exit, còn esp+4 có giá trị 3. Tại đây, 3 được coi là tham số đầu tiên của hàm exit => tương đương với việc gọi exit(3).
Vậy tương tự exit, nếu ta thay exit(3) bằng system(“sh”) thì ta sẽ mở được shell!
Và đây là video khai thác cho các bạn
Các file liên quan các bạn tải về trong phần đính kèm.
Chỉnh sửa lần cuối bởi người điều hành: