khanhhoangbkdn
VIP Members
-
07/10/2016
-
34
-
65 bài viết
Khai thác lỗi Buffer Overflow trên stack phần 1
Trong bài này mình sẽ sử dụng 1 chương trình Over.exe bị lỗi buffer overflows và dùng Imunity debugger để khai thác.
Kết quả :
- Vậy file Over đọc dữ liệu trong file bof.txt và hiển thi ra .Mà file bof.txt không giới hạn kích thước nên ta có thể nhập vào nội dung tùy ý ,Ta thử nhập thêm 1 số kí tự 'a' nữa xem sao:
- Chương trình sẽ bị dừng lại và báo lỗi Access violation when executing [61616161] đọc trên cửa sổ stack ta thấy chương trình dùng lại tại địa chỉ 0x0012F668 đây là địa chỉ trả về của chương trình ,vậy ta thử tính buf của chương trình là bao nhiêu bằng cách lấy địa chỉ trả về trừ đi địa chỉ bắt đầu ghi kí tự 'a' và trừ đi 4 byte chứa địa chỉ trả về = 0x0012F668 - 0x0012F600 - 4 byte = 100 .Vậy để khai thác lỗi trên chương trình này ta sẽ chèn 100 kí tự bất kì vào file bof.txt + 4 byte địa chỉ trả về + shellcode để khai thác chương trình.
Nhưng trước khi khai thác chương trình thì chúng ta có thể tìm cách để thay đổi luồng thực thi của chương trình theo ý của mình rồi chúng ta mới hiểu cách khai thác 1 chương trình.
- Lấy 1 địa chỉ bất kì trong buf trên stack để đặt breakpoint hardware on access , cứ khi nào mà truy cập vào giá trị trong địa chỉ đó thì chương trình sẽ dừng lại . ở đây mình lấy địa chỉ 0x0012F61C
- Ta ctrl +f2 để reset là chương trình và chạy chương trình lên đến chỗ "Browse.. " file thì dừng lại và tiến hành đặt breakpoint hardware ,on access Work tại giá trị đó.
- Load file bof.txt vào chương trình và tiếp tục F9 để chạy chương trình đến khi hex dump chỉ vào vùng nhớ chứa dữ liệu file bof.txt đến đây ta đặt 1 bp tại 0x00401710 để tiện cho các lần sau debug đây là đoạn code ghi giá trị của tệp bof.txt vào vùng nhớ chương trình.
- Tìm đến địa chỉ 0x0012F664 đây là địa chỉ trở về của chương trình >>> ta thay đổi luồng thực thi của chương trình bằng cách modify value tại địa chỉ này và ta có thể cho chương trình chạy về bất cứ chỗ nào mà chúng ta muốn .làm đi làm lại vài lần các bạn sẽ hiểu cách vận hành của chương trình.
- Mình thử thay đổi chương trình về lại lại giá trị 0x004016FC chưa câu lệnh PUSH EAX
- F8 để chạy từng lậy ta thấy sau lệnh RETN chương trình trở về địa chỉ 0x003016FC
- Vậy ta đã biết thay đổi luồng thực thi của chương trình và hiểu được cách thay đổi địa chỉ trả về của chương trình theo đúng ý của mình
- Phần sau mình sẽ nói cách khai thác chương trình trên bằng cách chèn vào 1 file chứa shellcode để gọi Calc, shell hoặc bất cứ chương trình gì trên windows.
- File Over sẽ đọc 1 tệp tin và in ra cửa sổ chương trình .
- Imunity debugger
- Arwin
- windows xp sp2 32bit
Kết quả :
- Vậy file Over đọc dữ liệu trong file bof.txt và hiển thi ra .Mà file bof.txt không giới hạn kích thước nên ta có thể nhập vào nội dung tùy ý ,Ta thử nhập thêm 1 số kí tự 'a' nữa xem sao:
- Chương trình sẽ bị dừng lại và báo lỗi Access violation when executing [61616161] đọc trên cửa sổ stack ta thấy chương trình dùng lại tại địa chỉ 0x0012F668 đây là địa chỉ trả về của chương trình ,vậy ta thử tính buf của chương trình là bao nhiêu bằng cách lấy địa chỉ trả về trừ đi địa chỉ bắt đầu ghi kí tự 'a' và trừ đi 4 byte chứa địa chỉ trả về = 0x0012F668 - 0x0012F600 - 4 byte = 100 .Vậy để khai thác lỗi trên chương trình này ta sẽ chèn 100 kí tự bất kì vào file bof.txt + 4 byte địa chỉ trả về + shellcode để khai thác chương trình.
Nhưng trước khi khai thác chương trình thì chúng ta có thể tìm cách để thay đổi luồng thực thi của chương trình theo ý của mình rồi chúng ta mới hiểu cách khai thác 1 chương trình.
- Lấy 1 địa chỉ bất kì trong buf trên stack để đặt breakpoint hardware on access , cứ khi nào mà truy cập vào giá trị trong địa chỉ đó thì chương trình sẽ dừng lại . ở đây mình lấy địa chỉ 0x0012F61C
- Ta ctrl +f2 để reset là chương trình và chạy chương trình lên đến chỗ "Browse.. " file thì dừng lại và tiến hành đặt breakpoint hardware ,on access Work tại giá trị đó.
- Load file bof.txt vào chương trình và tiếp tục F9 để chạy chương trình đến khi hex dump chỉ vào vùng nhớ chứa dữ liệu file bof.txt đến đây ta đặt 1 bp tại 0x00401710 để tiện cho các lần sau debug đây là đoạn code ghi giá trị của tệp bof.txt vào vùng nhớ chương trình.
- Tìm đến địa chỉ 0x0012F664 đây là địa chỉ trở về của chương trình >>> ta thay đổi luồng thực thi của chương trình bằng cách modify value tại địa chỉ này và ta có thể cho chương trình chạy về bất cứ chỗ nào mà chúng ta muốn .làm đi làm lại vài lần các bạn sẽ hiểu cách vận hành của chương trình.
- F8 để chạy từng lậy ta thấy sau lệnh RETN chương trình trở về địa chỉ 0x003016FC
- Vậy ta đã biết thay đổi luồng thực thi của chương trình và hiểu được cách thay đổi địa chỉ trả về của chương trình theo đúng ý của mình
- Phần sau mình sẽ nói cách khai thác chương trình trên bằng cách chèn vào 1 file chứa shellcode để gọi Calc, shell hoặc bất cứ chương trình gì trên windows.
Chỉnh sửa lần cuối bởi người điều hành: