Bài tập lớn môn an toàn mạng (85)

30 9 0
Bài tập lớn môn an toàn mạng (85)

Đ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

HỌC VIỆN CƠNG NGHỆ BƯU CHÍNH VIỄN THƠNG KHOA CƠNG NGHỆ THÔNG TIN _ Học phần: An toàn mạng Bài báo cáo: Tìm hiểu tool JSFuck Kali Giảng viên hướng dẫn : TS.Đặng Minh Tuấn Sinh viên : Trần Minh Quang Mã sinh viên : B18DCAT191 Lớp : D18CQAT03-B Nhóm mơn học : 02 Số điện thoại : 0966170663 HÀ NỘI - NĂM 2021 Mục lục LỜI CẢM ƠN ii DANH MỤC TỪ VIẾT TẮT iii DANH MỤC HÌNH ẢNH iv Mở đầu Chương - Giới thiệu 1.1 Tổng quan JSFuck 1.2 Lịch sử hình thành Chương - Hướng dẫn sử dụng 3.1 Cài đặt JSFuck Kali 3.2 Cài đặt JSFuck Window 10 Chương - JSF hoạt động 11 3.1 Một số định nghĩa Javascript 11 3.1.1 Ép kiểu 11 3.1.2 Giá trị truthy/falsy 12 3.1.3 Ký hiệu ngoặc vuông 13 3.1.4 Thứ tự ưu tiên chiều thực 14 3.1.5 Function constructor 14 3.2 JSFuck hoạt động 15 3.2.1 Cặp ngoặc vuông [ ] 15 3.2.2 Dấu cộng + .16 3.2.3 Toán tử NOT ‘!’ .20 3.2.4 Cặp ngoặc tròn ( ) .20 3.2.5 Một số giải pháp thay 21 3.2.6 Thực thi hàm .23 3.2.7 Một số ký tự điển hình mã hóa 26 Tài liệu tham khảo 29 LỜI CẢM ƠN Để hoàn thành báo cáo này, em xin gửi lời cảm ơn chân thành đến Học viện Cơng nghệ Bưu Viễn thơng đưa mơn An Tồn Mạng vào chương trình đào tạo Và đặc biệt, em xin gửi lời cảm ơn sâu sắc đến giảng viên môn học – thầy TS Đặng Minh Tuấn dạy dỗ, giảng dạy tận tình, chi tiết, truyền đạt cho em kiến thức quý báu suốt thời gian học tập vừa qua để em có đủ kiến thức vận dụng chúng vào báo cáo Tuy nhiên, thời gian học tập lớp không nhiều, nên hiểu biết kỹ em môn học chắn cịn nhiều hạn chế Vì vậy, báo cáo kết thúc học phần em khó tránh khỏi thiếu sót chỗ chưa chuẩn xác chưa có nhiều kinh nghiệm làm để tài hạn chế kiến thức Em mong nhận nhận xét, ý kiến đóng góp từ phía thầy để em hồn thiện tốt báo cáo Lời cuối cùng, em xin kính chúc thầy nhiều sức khỏe, thành công hạnh phúc Em xin chân thành cảm ơn! Hà Nội, ngày 24 tháng 12 năm 2021 Sinh viên Quang Trần Minh Quang DANH MỤC TỪ VIẾT TẮT Từ viết tắt Viết đầy đủ Giải nghĩa JS Javascript ngơn ngữ lập trình JSF JSFuck Một kiểu làm khó hiểu javascript DANH MỤC HÌNH ẢNH Hình Terminal cài đặt run JSF kali Hình Giao diện hiển thị JSF run thành công .10 Hình Giải nén file zip tải 10 Hình Ví dụ đoạn mã JSF 11 Hình Ví dụ ép kiểu 12 Hình Ví dụ ép kiểu ngầm 12 Hình Ví dụ truthy/falsy 13 Hình Ví dụ công dụng ngoặc vuông 13 Hình Ví dụ thứ tự thực toán tử 14 Hình 10 Ví dụ Function constructor .15 Hình 11 Ví dụ mảng JSF 15 Hình 12 Ví dụ cách truy cập mảng JSF 16 Hình 13 Ví dụ gói mảng JSF 16 Hình 14 Ví dụ ép kiểu 17 Hình 15 Ví dụ tăng số 17 Hình 16 Ví dụ lấy giá trị undefined 17 Hình 17 Ví dụ lấy giá trị NaN 18 Hình 18 Ví dụ cộng số 18 Hình 19 Ví dụ sử dụng ++ .18 Hình 20 Ví dụ ép kiểu thành chuỗi 19 Hình 21 Ví dụ lấy giá trị kí tự đơn 19 Hình 22 Ví dụ kết hợp kí tự đơn 19 Hình 23 Ví dụ ép kiểu boolean .20 Hình 24 Ví dụ lấy chuỗi ‘true’ / ‘false’ .20 Hình 25 Ví dụ ngoặc trịn .20 Hình 26 Ví dụ lowercase 21 Hình 27 Biểu thức quy 21 Hình 28 Dùng concat để nối chuỗi 22 Hình 29 Ví dụ tốn tử ‘=’ .22 Hình 30 Ví dụ toán tử ‘>’ .22 Hình 31 Ví dụ lấy kí tự ‘f’ với []>+ 23 Hình 32 Dùng dịch bit tạo số 23 Hình 33 Dùng dấu ` để thực thi hàm 24 Hình 34 Thực thi hàm cách gán kiện 24 Hình 35 Chuyển đổi loại ánh xạ 25 Hình 36 Thực thi hàm sử dụng biểu tượng .25 Hình 37 Ví dụ functional constructor 27 Hình 38 Ví dụ luyện tập 27 Mở đầu Javascript ngơn ngữ lập trình kịch phía client, mà code chạy thông qua file scripts (plaintext binary) chạy hoàn toàn máy client Điều tiềm ẩn rủi ro APIs resources bạn hồn tồn bị đánh cắp Đáng buồn khơng thể che giấu code mà thể làm cho khó đọc (obfuscate code) JSFuck phương pháp đời để thực nhiệm vụ Chương - Giới thiệu 1.1 Tổng quan JSFuck JSFuck style lập trình khó hiểu dựa thành phần cốt lõi javascript Nó sử dụng ký tự để viết chạy code: []+()! Nguồn gốc tên lấy từ BrainFuck (một ngơn ngữ lập trình bí truyền sử dụng kí tự tối giản có dấu +, -, , [, ] Khơng giống BrainFuck, cần phải có trình biên dịch riêng nó, JSFuck đoạn code JS có giá trị Có nghĩa chương trình JSF chạy trình duyệt khác JSF tái tạo tất chức JS mà dùng kí JS loại ngơn ngữ lập trình yếu(weekly typed) Có nghĩa biên dịch, khơng bắt lỗi chặt chẽ ngoại lệ xảy Do JS cho phép đánh giá biểu thức dạng 1.2 Lịch sử hình thành Vào tháng năm 2009, Yosuke Hasegawa tạo ứng dụng web có tên jjencode mã hóa JavaScript tùy ý thành dạng phức tạp sử dụng 18 ký hiệu [] ()! +, \ "$.:; _ {} ~ = Vào tháng năm 2010, thi khơng thức tổ chức diễn đàn "Obfuscation" trang web bảo mật ứng dụng web sla.ckers.org(Trang web khơng cịn hoạt động tìm viết trang web.archive.org) để tìm cách đạt số lượng ký tự tối thiểu yêu cầu xuống tám: [] ( )! +, / Những người đóng góp vào chuỗi quản lý để loại bỏ cần thiết ký tự , / Kể từ tháng năm 2010, mã hóa trực tuyến có tên JS-NoAlnum có sẵn sử dụng cuối gồm sáu ký tự Vào cuối năm 2010, Hasegawa tạo mã hóa có tên JSF * ck sử dụng sáu ký tự Năm 2012, Martin Kleppe tạo dự án "jsfuck" GitHub, trang web JSFuck.com với ứng dụng web sử dụng việc triển khai mã hóa JSFuck sử dụng để bỏ qua việc phát mã độc hại gửi trang web, ví dụ: cơng tập lệnh xun trang (XSS) Một cách sử dụng phổ biến JSFuck tính Obfuscation (kiểu mã hóa làm cho code khó đọc hơn) Một phiên tối ưu hóa JSFuck sử dụng để mã hóa jQuery, thư viện JavaScript, thành phiên đầy đủ chức viết với sáu ký tự Chương - Hướng dẫn sử dụng 3.1 Cài đặt JSFuck Kali • Bước 1: Clone repository JSFuck github → Mở terminal lên nhập: git clone http://github.com/aemkei/jsfuck • Bước 2: Di chuyển vào thư mục vừa clone → cd jsfuck • Bước 3: Start project cổng 8181 → php –S 127.0.0.1:8181 Hình Terminal cài đặt run JSF kali Sau start server thành cơng, mở trình duyệt truy cập vào đường dẫn http://127.0.0.1:8181 http://localhost:8181 hiển thị giao diện sau: 15 Hình 10 Ví dụ Function constructor 3.2 JSFuck hoạt động 3.2.1 Cặp ngoặc vuông [ ] Chúng ta bắt đầu với cặp ngoặc vng đóng mở xem chúng làm Chúng có tác dụng lớn JSF coi yếu tố cốt lõi chúng cung cấp phương thức để: • Xử lý mảng • Truy cập đến thuộc tính phương thức Dưới vài ví dụ cách dùng cặp ngoặc vng a) Khi tạo mảng Hình 11 Ví dụ mảng JSF b) Truy cập mảng/object 16 Hình 12 Ví dụ cách truy cập mảng JSF c) Thủ thuật gói mảng Bằng cách gói biểu thức mảng sau nhận phần tử số 0, áp dụng số toán tử biểu thức Điều có nghĩa dấu ngoặc [] thay dấu ngoặc () để tách biệt biểu thức: Hình 13 Ví dụ gói mảng JSF 3.2.2 Dấu cộng + Toán tử hữu dụng với cơng dụng như: • Tạo số • Cộng số với • Nối chuỗi với • Tạo chuỗi a) Ép kiểu sang số 17 Hình 14 Ví dụ ép kiểu b) Tăng số Sử dụng thủ thuật gói mảng đề cập bên trên: Hình 15 Ví dụ tăng số c) Lấy giá trị undefined Lấy phần tử số mảng rỗng trả undefined Hình 16 Ví dụ lấy giá trị undefined d) Lấy giá trị NaN Ép kiểu undefined sang Number cho kết NaN 18 Hình 17 Ví dụ lấy giá trị NaN e) Cộng số Hình 18 Ví dụ cộng số Một cách khác sử dụng ++: Hình 19 Ví dụ sử dụng ++ Bằng cách này, truy cập đến tất số: 0,1,2,3,4,5,6,7,8,9 f) Ép kiểu thành chuỗi Sử dụng dấu cộng cặp ngoặc vuông +[ ] trả giá trị chuỗi 19 Hình 20 Ví dụ ép kiểu thành chuỗi g) Lấy giá trị kí tự đơn Khi có chuỗi, lấy ký tự đơn lẻ, trường hợp bên dưới, ta lấy ký tự ‘u’ Hình 21 Ví dụ lấy giá trị kí tự đơn Theo có ‘NaN’ ‘undefined’, lấy ký tự đơn sau: N, a, d, e, f, i, n, u h) Kết hợp kí tự đơn Chúng ta nối ký tự lại với cách sử dụng dấu ‘+’ Hình 22 Ví dụ kết hợp kí tự đơn 20 3.2.3 Tốn tử NOT ‘!’ Đây ký tự thứ tư JSFuck ban đầu sử dụng để tạo boolean a) Ép kiểu sang boolean Tốn tử logic "Not" sử dụng để tạo boolean false true: Hình 23 Ví dụ ép kiểu boolean b) Lấy chuỗi “true” “false” Hình 24 Ví dụ lấy chuỗi ‘true’ / ‘false’ Điều giúp truy cập đến nhiều kí tự hơn: a, e, f, l, r, s, t, u 3.2.4 Cặp ngoặc tròn ( ) a) Gọi phương thức Hình 25 Ví dụ ngoặc trịn Từ ta truy cập kí tự sau: j, , =, “, / 21 b) Gọi phương thức với nhiều tham số Việc gọi phương thức có nhiều đối số khơng dễ - để thực hiện, sử dụng kỹ thuật sau (được phát trincot) - ví dụ: - Gọi string method "truefalse".replace("true","1") viết thành: → ["true", "1"].reduce("".replace.bind("truefalse")) → ["true"]["concat"]("1")["reduce"](""["replace"]["bind"]("truefalse")) c) Lấy chữ thường Phương thức toString Number có đối số tùy chọn định sở để sử dụng (từ đến 36) Với số 36, lấy chữ thường nào: Hình 26 Ví dụ lowercase d) Tạo đối tượng biểu thức quy Bạn tạo biểu thức quy, ví dụ: / pattern /g sau: Hình 27 Biểu thức quy 3.2.5 Một số giải pháp thay a) Nối chuỗi Thay dùng tốn tử ‘+’ ta sử dụng ‘.concat’ để nối chuỗi: 22 Hình 28 Dùng concat để nối chuỗi Trước cần nối "c", "o", "n", "c", "a" "t" để có “concat” b) Boolean Tốn tử “!” cần phải thay với kí tự mạnh sử dụng theo nhiều cách “=” - boolean + gán giá trị Hình 29 Ví dụ toán tử ‘=’ “>” - boolean + tạo số Hình 30 Ví dụ tốn tử ‘>’ Một ví dụ phức tạp lấy ký tự “f” với []>+ 23 Hình 31 Ví dụ lấy kí tự ‘f’ với []>+ c) Numbers Thay ‘+’ dùng booleans dịch bit để tạo số: Hình 32 Dùng dịch bit tạo số 3.2.6 Thực thi hàm Các cách thực thi hàm mà không sử dụng (): a) Sử dụng dấu nháy ` Thay sử dụng dấu ngoặc đơn mở đóng, sử dụng dấu nháy ` để thực thi hàm Trong ES6, chúng sử dụng để nội suy chuỗi cung cấp biểu thức cho ký tự mẫu gắn thẻ 24 Hình 33 Dùng dấu ` để thực thi hàm Điều cung cấp cho ta ký tự từ "Đối tượng" quyền truy cập vào phương thức Thật khơng may, chuyển chuỗi (từ bảng chữ chúng ta, ví dụ: []! +) Làm tham số Khơng thể gọi phương thức có nhiều đối số chuỗi biên dịch trước Để làm điều đó, phải sử dụng phép nội suy biểu thức cách sử dụng $ {} để giới thiệu ký tự b) Xử lý kiện Hàm phương thức thực thi cách gán chúng cho trình xử lý kiện Có số cách để làm điều đó: Hình 34 Thực thi hàm cách gán kiện Lưu ý: cần “=” để định hàm xử lý Tuy nhiên truy cập tới window hay DOM để bắt trình xử lý kiện 25 c) Chuyển đổi loại ánh xạ Một cách tiếp cận khác để thực thi hàm khơng có dấu ngoặc đơn ánh xạ phương thức toString valueOf gọi chúng cách ngầm định Hình 35 Chuyển đổi loại ánh xạ Lưu ý: Khơng có cách để truyền vào tham số yêu cầu phải ‘=’ có bảng chữ Và hoạt động phương thức trả kiểu Cho đến nay, trường hợp sử dụng nối toSource Firefox để lấy ký tự đặc biệt dấu gạch chéo ngược ‘\’ d) Kí tự đặc biệt Kí tự đặc biệt kiểu liệu bất biến sử dụng làm định danh cho thuộc tính đối tượng Điều sử dụng để gọi ngầm hàm Hình 36 Thực thi hàm sử dụng biểu tượng Lưu ý: cần ‘=’ để định hàm 26 3.2.7 Một số ký tự điển hình mã hóa False ![ ] True !![ ] NaN +[![ ]] +[ ] +!+[ ] !+[]+!+[] 10 [+!+[]]+[+[]] Array [] Number +[ ] String [ ]+[ ] Boolean ![ ] Function [ ]["filter"] Eval []["filter"]["constructor"] (CODE)() List đầy đủ Dựa vào kiến thức phần 3.2, ta giải thích basics bảng bên - false => ![] Array mảng JS array đối tượng đối tượng ln ln truthy Do mà !truthy = false 27 - undefined => [][[]] Mỗi array có thuộc tính built-in Ví dụ length thuộc tính hợp lệ array Do mà []["length"] trả Nhưng [] hay "" khơng phải thuộc tính hợp lệ nên [][""] trả undefined - NaN => +[![]] ![] = false, [false].toString() = "false" (ép kiểu ngầm) +[![]] = NaN - Function => []["filter"] [] array nên phép gọi đến phương thức Array.prototype Do mà gọi tới Array.prototype.filter (một function) - Eval => []["filter"]["constructor"] (CODE)() []["filter"] function Trong javascript, function thể (instance) Function gọi đến thuộc tính Function.prototype Function.prototype.constructor thuộc tính Thuộc tính constructor trả tham chiếu đến hàm mà tạo thể Do đó, []["filter"]["constructor"] tương đương với Function() trả phương thức Chúng ta làm phép tính cộng đơn giản sau: Hình 37 Ví dụ functional constructor Ví dụ: Dựa vào toàn kiến thức bên trên, giải mã đoạn code sau: Hình 38 Ví dụ luyện tập Chúng ta phân tích tách thành nhiều mảnh nhỏ sau: (!![]+[]) => (true+[]) => ("true") => "true" 28 [!+[]+!+[]+!+[]] => [!0+!0+!0] => [true+true+true] => [1+1+1] => [3] + ([][[]]+[]) => (undefined+[]) => ("undefined"+"") => "undefined" [+!+[]] => [+!0] => [+true] => [1] + ([][[]]+[]) => (undefined+[]) => ("undefined"+"") => "undefined" [!+[]+!+[]] => [!0+!0] => [true+true] => [1+1] => [2] = "true"[3]+"undefined"[1]+"undefined"[2] = "e"+"n"+"d" = "end" 29 Tài liệu tham khảo [1] khanhnb, “JSFuck: code javascript với ký tự,” 2018 [Trực tuyến] Available: https://github.com/khanhnb/jsfuck [2] Wikipedia, “JSFuck,” 2021 [Trực tuyến] Available: https://en.wikipedia.org/wiki/JSFuck [3] friends, aemkei and, “JSFuck,” 2012 [Trực tuyến] Available: https://github.com/aemkei/jsfuck ... ‘!’ Đây ký tự thứ tư JSFuck ban đầu sử dụng để tạo boolean a) Ép kiểu sang boolean Toán tử logic "Not" sử dụng để tạo boolean false true: Hình 23 Ví dụ ép kiểu boolean b) Lấy chuỗi “true” “false”... năm 2021 Sinh viên Quang Trần Minh Quang DANH MỤC TỪ VIẾT TẮT Từ viết tắt Viết đầy đủ Giải nghĩa JS Javascript ngơn ngữ lập trình JSF JSFuck Một kiểu làm khó hiểu javascript DANH MỤC HÌNH ẢNH Hình... "jsfuck" GitHub, trang web JSFuck.com với ứng dụng web sử dụng việc triển khai mã hóa JSFuck sử dụng để bỏ qua việc phát mã độc hại gửi trang web, ví dụ: cơng tập lệnh xuyên trang (XSS) Một cách

Ngày đăng: 08/01/2022, 11:02

Hình ảnh liên quan

Hình 1 Terminal cài đặt và run JSF trên kali - Bài tập lớn môn an toàn mạng (85)

Hình 1.

Terminal cài đặt và run JSF trên kali Xem tại trang 10 của tài liệu.
Hình 3 Giải nén file zip tải về - Bài tập lớn môn an toàn mạng (85)

Hình 3.

Giải nén file zip tải về Xem tại trang 11 của tài liệu.
Hình 2 Giao diện hiển thị của JSF khi run thành công - Bài tập lớn môn an toàn mạng (85)

Hình 2.

Giao diện hiển thị của JSF khi run thành công Xem tại trang 11 của tài liệu.
Hình 4 Ví dụ một đoạn mã JSF - Bài tập lớn môn an toàn mạng (85)

Hình 4.

Ví dụ một đoạn mã JSF Xem tại trang 12 của tài liệu.
Hình 6 Ví dụ về ép kiểu ngầm - Bài tập lớn môn an toàn mạng (85)

Hình 6.

Ví dụ về ép kiểu ngầm Xem tại trang 13 của tài liệu.
Hình 5 Ví dụ về ép kiểu - Bài tập lớn môn an toàn mạng (85)

Hình 5.

Ví dụ về ép kiểu Xem tại trang 13 của tài liệu.
Hình 8 Ví dụ về công dụng của ngoặc vuông - Bài tập lớn môn an toàn mạng (85)

Hình 8.

Ví dụ về công dụng của ngoặc vuông Xem tại trang 14 của tài liệu.
Hình 7 Ví dụ về truthy/falsy - Bài tập lớn môn an toàn mạng (85)

Hình 7.

Ví dụ về truthy/falsy Xem tại trang 14 của tài liệu.
Hình 9 Ví dụ về thứ tự thực hiện các toán tử - Bài tập lớn môn an toàn mạng (85)

Hình 9.

Ví dụ về thứ tự thực hiện các toán tử Xem tại trang 15 của tài liệu.
Hình 10 Ví dụ về Function constructor - Bài tập lớn môn an toàn mạng (85)

Hình 10.

Ví dụ về Function constructor Xem tại trang 16 của tài liệu.
Hình 12 Ví dụ về cách truy cập mảng trong JSF - Bài tập lớn môn an toàn mạng (85)

Hình 12.

Ví dụ về cách truy cập mảng trong JSF Xem tại trang 17 của tài liệu.
Hình 14 Ví dụ về ép kiểu - Bài tập lớn môn an toàn mạng (85)

Hình 14.

Ví dụ về ép kiểu Xem tại trang 18 của tài liệu.
Hình 17 Ví dụ lấy giá trị NaN - Bài tập lớn môn an toàn mạng (85)

Hình 17.

Ví dụ lấy giá trị NaN Xem tại trang 19 của tài liệu.
Hình 20 Ví dụ ép kiểu thành chuỗi - Bài tập lớn môn an toàn mạng (85)

Hình 20.

Ví dụ ép kiểu thành chuỗi Xem tại trang 20 của tài liệu.
Hình 21 Ví dụ lấy giá trị của 1 kí tự đơn - Bài tập lớn môn an toàn mạng (85)

Hình 21.

Ví dụ lấy giá trị của 1 kí tự đơn Xem tại trang 20 của tài liệu.
Hình 26 Ví dụ về lowercase - Bài tập lớn môn an toàn mạng (85)

Hình 26.

Ví dụ về lowercase Xem tại trang 22 của tài liệu.
Hình 29 Ví dụ về toán tử ‘=’ - Bài tập lớn môn an toàn mạng (85)

Hình 29.

Ví dụ về toán tử ‘=’ Xem tại trang 23 của tài liệu.
Hình 31 Ví dụ lấy kí tự ‘f’ với []>+ - Bài tập lớn môn an toàn mạng (85)

Hình 31.

Ví dụ lấy kí tự ‘f’ với []>+ Xem tại trang 24 của tài liệu.
Hình 33 Dùng dấu ` để thực thi hàm - Bài tập lớn môn an toàn mạng (85)

Hình 33.

Dùng dấu ` để thực thi hàm Xem tại trang 25 của tài liệu.
Hình 35 Chuyển đổi loại ánh xạ - Bài tập lớn môn an toàn mạng (85)

Hình 35.

Chuyển đổi loại ánh xạ Xem tại trang 26 của tài liệu.
3.2.7. Một số ký tự điển hình được mã hóa - Bài tập lớn môn an toàn mạng (85)

3.2.7..

Một số ký tự điển hình được mã hóa Xem tại trang 27 của tài liệu.
Dựa vào những kiến thức của phần 3.2, ta sẽ đi giải thích những basics trong bảng bên trên  - Bài tập lớn môn an toàn mạng (85)

a.

vào những kiến thức của phần 3.2, ta sẽ đi giải thích những basics trong bảng bên trên Xem tại trang 27 của tài liệu.

Tài liệu cùng người dùng

  • Đang cập nhật ...

Tài liệu liên quan