Báo cáo cuối kỳ môn An toàn mạng đề tài số 7 "Nghiên cứu và khai thác các challenge trên ROOTME"
Báo cáo cuối kỳ môn An toàn mạng đề tài số 7 "Nghiên cứu và khai thác các challenge trên ROOTME" của Học viện Công nghệ Bưu chính Viễn thông với những kiến thức và thông tin bổ ích giúp sinh viên tham khảo, ôn luyện và phục vụ nhu cầu học tập của mình cụ thể là có định hướng ôn tập, nắm vững kiến thức môn học và làm bài tốt trong những bài kiểm tra, bài tiểu luận, bài tập kết thúc học phần, từ đó học tập tốt và có kết quả cao cũng như có thể vận dụng tốt những kiến thức mình đã học vào thực tiễn cuộc sống. Mời bạn đọc đón xem!
Môn: An toàn mạng (AT19)
Trường: Học viện Công Nghệ Bưu Chính Viễn Thông
Thông tin:
Tác giả:
Preview text:
lOMoARcPSD| 37054152 Contents I, Cơ ở s lí
thuyếết...................................................................................................................................3
1 Buffer overflow..............................................................................................................................3
Nguyến nhân gây ra lỗỗi..................................................................................................................3
Cách khai thác...............................................................................................................................3
Cách khai thác...............................................................................................................................3
2, heap overflow...............................................................................................................................4 Nguyến nhân gây ra
lỗỗi.....................................................................................................................4
Cách khai thác...................................................................................................................................5
II Thực nghiệm các challenge trến rootme..........................................................................................5
Twitter authentication......................................................................................................................5
ELF x86 - Stack buffer overflow basic 1.............................................................................................8
ELF x86 - Stack buffer overflow basic 2...........................................................................................10
ELF x64 - Basic heap overflow.........................................................................................................12
III Challenge bến ngoài........................................................................................................................14
Stack1..............................................................................................................................................14
Stack2..............................................................................................................................................17
TÀI LI U THAM KHỆ ẢO........................................................................................................................21
I, Cơ sở lí thuyết 1 Buffer overflow
Trong lĩnh vực an ninh máy tính và lập trình, lỗi Buffer overflow hay tiếng Việt
gọi là lỗi tràn bộ nhớ đệm/lỗi tràn bộ đệm là khi mà bộ nhớ b 椃⌀ ghi đ 攃
nhi u l n trên ngăn xếp. Lỗi này thường xuyên xảy ra do người d 甃 ng gửi một
lượng lớn dữ liệu tới server ứng dụng, đi u này làm cho dữ liệu b 椃⌀ bắt phải
đ 攃 lên các v 椃⌀ trí bộ nhớ li n k đó. Đây là một lỗi lập trình có thể gây ra
một ngoại lệ truy nhập bộ nhớ máy tính và chương trình b 椃⌀ kết thúc, hoặc
khi người d 甃 ng cố tình phá hoại, có thể lợi dụng lỗi này để phá vỡ an ninh hệ thống.[1]
Nguyên nhân gây ra lỗi
Không thực hiện đ y đủ, hoặc không kiểm tra độ dài của dữ liệu nhập vào.
Các ngôn ngữ lập trình như C, bản thân nó đ 愃̀ luôn có những ti m ऀn các
lỗ hổng mà hacker dễ dàng có thể tấn công vào. Trong ngôn ngữ lập trình C c
漃 n tồn tại các hàm không kiểm tra những buffer được cấp phát trên stack có
kích thước lớn hơn dữ liệu được copy và bộ đệm hay không.[1] lOMoARcPSD| 37054152 Cách khai thác
Để gây ra tình trạng lỗi tràn bộ đệm, hacker có thể ghi đ 攃 một biến đ 椃⌀a
phương nằm g n bộ đệm trong stack, biến này làm thay đổi hành vi của hệ
thống để tạo đi u kiện tấn công cho kẻ xấu.
Ghi đ 攃 lên đ 椃⌀a ch 椃ऀ trả v trong khung stack. Khi hàm trả v , thực thi s
攃̀ vẫn tiếp tục tại đ 椃⌀a ch 椃ऀ mà hacker đ 愃̀ ch 椃ऀ đ 椃⌀nh, thông
thường đ 椃⌀a ch 椃ऀ này thuộc khu vực bộ đệm chứa dữ liệu người d 甃 ng.[1] Cách khai thác 2, heap overflow
Hiện tượng lỗi tràn bộ đệm xảy ra tại khu vực dữ liệu Heap hay cũng chính là
hiện tượng tràn Heap, hacker có thể khai thác lỗ hổng này bằng các kỹ thuật
(khác với các lỗi tràn stack).
Bộ nhớ heap là bộ phận thường để chứa dữ liệu của chương trình, nó được
cấp phát tự động bởi các ứng dụng thời gian chạy.
Hacker thực hiện tấn công bằng cách phá những dữ liệu này để làm ứng dụng
ghi đ 攃 lên các dữ liệu của nội bộ (ví dụ như các con trỏ của danh sách liên kết). lOMoARcPSD| 37054152
Nguyên nhân gây ra lỗi
Nguyên nhân cũng giống như lỗi buffer overflow. Heap overflow xảy ra khi
Không thực hiện đ y đủ, hoặc không kiểm tra độ dài của dữ liệu nhập vào.
Các ngôn ngữ lập trình như C, bản thân nó đ 愃̀ luôn có những ti m ऀn các
lỗ hổng mà hacker dễ dàng có thể tấn công vào. Trong ngôn ngữ lập trình C c
漃 n tồn tại các hàm không kiểm tra những buffer được cấp phát trên stack có
kích thước lớn hơn dữ liệu được copy và bộ đệm hay không.[2] Cách khai thác
Sau khi ghi tràn dữ liệu trong heap thì ta tiến hành ghi đ 攃 các dữ liệu ngoài
của con trỏ. Đi u khiển nó để thực hiện kiểm soát luồng ứng dụng. Có thể ghi đ
攃 shellcode hoặc trỏ đến hàm m 愃̀ độc.
II Thực nghiệm các challenge trên rootme Twitter authentication lOMoARcPSD| 37054152
Sau khi tải challenge v thì ta nhận được một file pcap. Ta s 攃̀ d 甃 ng wireshark để mở nó.
Ta ch 椃ऀ thấy duy nhất có một d 漃 ng http được bắt bởi wireshark.
Bay giờ ta s 攃̀ tìm kiếm password.
Sau khi nhấn vào thì ta thấy rằng ngoài thông tin v cookie ra thì c 漃 n một
thông tin nữa đó là authorization. Ta s 攃̀ tiến hành decode thử đoạn m 愃̀
đó. Đoạn m 愃̀ có dấu hiẹu của base64
Ta vào trang web base64decode.org để tiến hành decode lOMoARcPSD| 37054152
Vậy là ta đ 愃̀ có user và password. Password là “password” Thành công
ELF x86 - Stack buffer overflow basic 1
Ta nhìn thử các biện pháp bảo vệ. ch 椃ऀ có SRC được bật. Ta s 攃̀ xem source code. lOMoARcPSD| 37054152
Theo như đoạn code được chương trình cung cấp thì ch 椃ऀ có thể khai thác
bằng 1 cách duy nhất. Đó là ghi đ 攃 biến check = 0xdeadbeef. Ngoài ra chúng
ta không c 漃 n cách nào khác. Chương trình ch 椃ऀ cho phép chúng ta ghi đ
攃 được đến biến check mà thôi. Ta s 攃̀ sử dụng đoạn payload này để exploit nó.
Sau khi chạy chương trình thì ta đ 愃̀ kết nối được server là lên shell
Ta s 攃̀ đi đọc password lOMoARcPSD| 37054152
Pass là “1w4ntm0r3pr0np1s” Thành công
ELF x86 - Stack buffer overflow basic 2
Các cơ chế bảo vệ đ 愃̀ tắt ch 椃ऀ có NX được bật. Do đó khong thể sử dụng ret2shellcode được lOMoARcPSD| 37054152
Bài này ch 椃ऀ c n ta ghi đ 攃 lên hàm func trỏ tới hàm shell thì ta s 攃̀ lên được shell
Ta s 攃̀ sử dụng payload này để exploit chúng lOMoARcPSD| 37054152
Chúng ta đ 愃̀ lên được shell.
Ta đ 愃̀ lấy được password
Thành công. Password là “B33r1sSoG0oD4y0urBr4iN”
ELF x64 - Basic heap overflow
Bài này khá nhi u cơ chế bảo vệ được bật
Ta h 愃̀ y c 甃 ng xem code của chương trình nhé lOMoARcPSD| 37054152
Sau khi xem qua code thì chương trình s 攃̀ copy “/bin/ls -l” vào biến cmd.
Sau đó s 攃̀ gộp chung với kí tự ta nhập bằng hàm strcat. Sau đó thực thi bằng hàm system.
checkArg ch 椃ऀ không cho chúngta nhập các kí tự đặc biệt. Ta s 攃̀ debug chúng lOMoARcPSD| 37054152
Ta nhập các kí tự của mình vào
Em vừa nhập /bin.sh vào. Chúng ta thấy rằng nó ở trước c 甃 ng nhớ của
chương trình. Bây giờ ta s 攃̀ ghi đ 攃 /bin/ls -l của chương trình bằng các kí
tự ‘/.00’. Khi đó chương trình s 攃̀ nh m lẫn rằng biến đó không có gì. Và s
攃̀ thực thi /bin/sh ta nhập vào. Ta s 攃̀ lên được shell.
Đây là payload để chúng ta exploit. Chuỗi đ u là /bin/sh\x00. \x0 này để đánh
dấu là kết thúc. Chương trình s 攃̀ nghĩ ta ch 椃ऀ nhập /bin/sh mà thôi. 48
byte \x00 để ghi đ 攃 vào chuỗi mặc đ 椃⌀nh của chương trình lOMoARcPSD| 37054152 Ta đ 愃̀ lên shell Đây là passwd.
III Challenge bên ngoài Stack1
ở bài này ta s 攃̀ thực hành hai phương pháp khai thác đó là ret2shell và overwrite bss.
Source của bài này đơn giản là cho chúng ta ghi đ 攃 vào biến buf có độ dài 64
kí tự và kết thúc. Nhưng ta h 愃̀ y nhìn xem. Đó là hàm gets. Hàm này s 攃̀
gây lỗi vì không kiểm tra đ u vào. Ta s 攃̀ khai thác bằng hai kĩ thuật Ret2shellcode lOMoARcPSD| 37054152
Với kĩ thuật này, ta s 攃̀ ghi shellcode vào một v 甃 ng nhớ có đ y đủ quy n
đọc, ghi và thực thi. Sau đó ta s 攃̀ ghi đ 攃 return add bằng đ 椃⌀a ch 椃ऀ
của shellcode đó. Và chúng ta s 攃̀ lên được shell
V 甃 ng chúng ta chọn ghi vào là stack. Tại vì v 甃 ng này có đ y đủ các quy n mà chúng ta c n
Bây giừo ta s 攃̀ chạy đoạn payload trên
Chúng ta đ 愃̀ lên được shell Overwrite bss lOMoARcPSD| 37054152
Với kĩ thuật này ta s 攃̀ tìm kiếm các v 甃 ng nhớ của file thực thi. Nếu phân v
甃 ng nào đủ các quy n m,à ta c n. ta s 攃̀ ghi đ 攃 vào đó. Sau đó ra s 攃̀
ghi đ 攃 return add bằng đ 椃⌀a ch 椃ऀ của phân v 甃 ng đó.
Cách gọi hàm của 32 bit có hơi khác so với 64 bit. Trong payload này hàm ta s
攃̀ gọi là gets_plt tham số của nó là đ 椃⌀a ch 椃ऀ của bss. Sau khi ghi
shellcode vào bss xong thì ta s 攃̀ nhảy vào bss vào thực thi shellcode luôn.
Và ta đ 愃̀ lên được shell lOMoARcPSD| 37054152 Stack2
Với bài này thì có biến buf chứa 64 kí tự. Tuy nhiên có them một đi u kiện
check. Nếu return là đ 椃⌀ac h 椃ऀ trên stack thì s 攃̀ thoát chương trình. Bai
fnayf ta s 攃̀ sử dụng 2 kĩ thuật để exploit nó Overwrite bss
Cũng như bài trước, Ta s 攃̀ ghi đ 攃 shellcode lên v 甃 ng bss và ghi đ 攃
return add bằng đ 椃⌀a ch 椃ऀ của v 甃 ng bss lOMoARcPSD| 37054152
Padding l n này là 80 kí tự. Sau đó ta s 攃̀ gọi hàm gets_plt với tham số là đ
椃⌀a ch 椃ऀ của v 甃 ng bss. Sau khi ghi xong thì ta s 攃̀ quay lại bss để thực thi Thực thi thành công Ret2libc
Với kĩ thuật này ta s 攃̀ tìm kiếm đ 椃⌀a ch 椃ऀ của hàm system, Tham số là
/bin/sh và chúng ta s 攃̀ lên được shell.
Ta s 攃̀ vào gdb và tìm thấy đ 椃⌀a ch 椃ऀ của system
Đại ch 椃ऀ của chuỗi /bin/sh
Và đại ch 椃ऀ hàm main
Payload của ta s 攃̀ nhau sau:
Padding + system + main + bin/sh lOMoARcPSD| 37054152
/bin/sh s 攃̀ la ftham số của system. Sau khi thực hiện xong thì quay v hàm main
Đây là payload của chúng ta
Vì các chế độ bảo mật đ 愃̀ tắt. Nên ta không c n phải đi leak đ 椃⌀a ch 椃ऀ
mà làm trực tiếp trên máy
Ta đ 愃̀ lên được shell.
TÀI LIỆU THAM KHẢO
1.buffer-overflow-la-gi – Truy cập 8-11-2023 Link
[https://bkhost.vn/blog/buffer-overflow-la-gi/] lOMoARcPSD| 37054152
2.What is Buffer Overflow? — TryHackMe: Buffer
Overflow Prep Walkthrough – Truy cập [8-11-2023] Link
[https://ahoner.medium.com/what-is-bufferoverflow-tryhackme-
buffer-overflow-prepwalkthrough-9e2629a6b5b9]