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

Báo cáo đề tài bảo mật web website chia sẻ thông tin dành cho it

65 0 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

Tiêu đề Website Chia Sẻ Thông Tin Dành Cho IT
Tác giả Trần Ngọc Minh Thiện, Nguyễn Thị Minh Hoàng, Nguyễn Huỳnh Minh Tiến, Lê Thị Ngọc Yến
Người hướng dẫn Lê Thị Minh Châu
Trường học Trường Đại Học Sư Phạm Kỹ Thuật Tphcm
Chuyên ngành Bảo Mật Web
Thể loại báo cáo đề tài
Năm xuất bản 2020-2021
Thành phố Tphcm
Định dạng
Số trang 65
Dung lượng 2,63 MB

Cấu trúc

  • PHẦN 1. GIỚI THIỆU ĐỀ TÀI (8)
    • 1. Sơ lược về đề tài (8)
      • 1.1. Giới thiệu (8)
      • 1.2. Các chức năng chính (8)
    • 2. Lược đồ usecase (9)
    • 3. Lược đồ quan hệ (ERD) (10)
    • 4. Hướng dẫn cài đặt và chạy (11)
      • 4.1. Sơ lược về project (11)
      • 4.2 Hướng dẫn cài đặt (11)
      • 4.3 Tiến hành chạy (16)
  • PHẦN 2. BẢO MẬT WEBSITE (18)
    • 1. Các lỗi OWASP ZAP quét (18)
      • 1.1 Cookie No HttpOnly Flag (18)
        • 1.1.1 Httponly flag là gì ? (18)
        • 1.1.2 Xử lý (19)
      • 1.2 Cookie without SameSite Attribute (21)
        • 1.2.1 SameSite Cookie (21)
        • 1.2.2 Xử lý (21)
      • 1.3 X-Frame-Options Header Not Set (23)
        • 1.3.1 Tấn công Clickjacking (23)
        • 1.3.2 X-Frame-Opions Header (24)
        • 1.4.1 Khái niệm (25)
        • 1.4.2 Xử lý (26)
      • 1.5. Incomplete or No Cache-control Header Set (27)
        • 1.5.1 Cache-Control là gì ? (27)
        • 1.5.2 Incomplete or No Cache-control Header nguy hiểm như thế nào ? (27)
        • 1.5.3 Xử lý (28)
    • 2. Cross-Site Scripting (29)
      • 2.1 Khái niệm (29)
      • 2.2 Các loại tấn công XSS (29)
      • 2.3 Giải pháp ngăn chặn (30)
      • 2.4 Tấn công project với XSS (31)
        • 2.4.1 Tấn công (31)
        • 2.4.2 Giải pháp (32)
    • 3. Tấn công Brute Force (34)
      • 3.1 Password attack (34)
      • 3.2 Brute Force - Tấn công dò mật khẩu (35)
      • 3.3 Xử lý (35)
    • 4. NoSQL injection (38)
      • 4.1 Quét bằng OWASP ZAP (38)
      • 4.2 Quét bằng Arachni (38)
      • 4.3 NoSQL Injection wordlists (44)
      • 4.4 Lý giải nguyên do không có lỗ hổng MongoDB NoSQL Injection trong ứng dụng (52)
    • 5. Buffer overflow (57)
      • 5.1 Khái niệm (57)
      • 5.2 Các biện pháp chống tràn bộ nhớ đệm (57)
      • 5.3 Tấn công project với Buffer overflow (58)
    • 6. Lỗi quét được bằng Synk.io (59)
  • TÀI LIỆU THAM KHẢO (64)

Nội dung

Những người dùng khác có thể xem và bình luận dưới những bài viết sau khi đã đăng nhập.Gồm có 3 đối tượng chính sử dụng website là: Admin : người có toàn quyền quản lí website, cấp quyền

GIỚI THIỆU ĐỀ TÀI

Sơ lược về đề tài

Website 4XFIT là một Website lưu trữ những bài viết thảo luận, những câu hỏi hay những câu trả lời được cộng đồng sinh viên giải đáp nhằm tạo ra một cộng động để chia sẻ kinh nghiệm lập trình, nhất là cho sinh viên chuyên ngành công nghệ thông tin hoặc cho các sinh viên có đam mê và tìm hiểu công nghệ thông tin Người dùng có thể đăng những bài viết của mình sau khi đã tạo tài khoản và đăng nhập thành công, những người dùng này sẽ chịu sự kiểm soát của admin hệ thống Những người dùng khác có thể xem và bình luận dưới những bài viết sau khi đã đăng nhập.

Gồm có 3 đối tượng chính sử dụng website là:

Admin : người có toàn quyền quản lí website, cấp quyền cho người dùng hệ thống (Editor) và quản lý người dùng thường.

Guest : người dùng chỉ ghé thăm website mà không đăng kí hoặc đăng nhập, người dùng này không có quyền tương tác với website, chỉ có quyền xem.

User thường: người dùng đã đăng kí và đăng nhập vào website, có quyền tương tác với website.

User hệ thống (Mod/Editor): người quản lý bài viết và chủ đề, phê duyệt bài viết.

Tạo tài khoản Đăng nhập Đăng nhập Đăng xuất Đăng xuất Quản lý bài viết

Xem bài viết Quản lý người dùng

Tạo bài viết Duyệt bài viết

Chỉnh sửa bài viết Duyệt người dùng

Bình luận bài viết Xem báo cáo

Hướng dẫn cài đặt và chạy

- Link project: https://github.com/4fit/x4fit

- Ngôn ngữ lập trình: Java

- Cơ sở dữ liệu: MongoDB Atlas (Cloud DBaaS for MongoDB)

- Server: Apache Tomcat server (version 9.0)

- Webapp được deploy lên Heroku

Bước 1: Import project vào workspace Eclipse chọn File > Import > ExistingMaven Projects > Browse để tìm đường và chọn folder muốn import > Finish

Có thể có lỗi xuất hiện như hình bên dưới

Cài đặt thêm thư viện vào thư mục Libraries

Các thư viện - có trong link drive: https://drive.google.com/drive/folders/1MFfMBLlX7gfIDbAO4IVMa3PcJxaBqxuu?usp=sharing

Tiếp đến, kiểm tra xem đã có JRE chưa, nếu chưa có thì thêm vào

Nhấn chuột phải vào project chọn Build Path > Configure Build Path > Add Library > JRE System Library > Next > Workspace default JRE > Finish > Apply and Close

Thêm Tomcat server vào Eclipse, chọn Window > Preferences > Server > Runtime Environments > Add > Apache > Apache Tomcat v9.0 (có thể chọn Apache Tomcat v8.0)

> Next > Browse để tìm đường dẫn và chọn folder Tomcat > Finish > Apply and Close

Nhấn chuột phải vào project chọn Run As > Run on Server > Tomcat v9.0 Server > Next > Chọn project muốn chạy (chọnx4Fit) > Finish

Server đã được cài đặt

Mở trình duyệt và nhập: http://localhost:8080/x4fit/

Sẽ vào trang home của trang web

Chọn button login vào trang login

BẢO MẬT WEBSITE

Các lỗi OWASP ZAP quét

1.1.1 Httponly flag là gì ? Để tránh trường hợp một số kẻ tấn công chèn mã độc khi click vào một đường dẫn và lấy cắp thông tin cookie xác thực đăng nhập mà không được bảo vệ bởi HttpOnly nên dẫn tới việc mất thông tin.

Khi Httponly không được set hoặc set bằng false thì chỉ cần thực hiện bằng một đoạn lên javascript đơn giản là đã có thông tin cookie. document.cookie = "authKey cookie c a XXX";ủ

Trang web của nhóm khi chưa set cờ true cho Httponly

alert(document.cookie)

Toàn bộ những thuộc tính của cookie không được set cờ Httponly đều hiện lên. Mục đích của thuộc tính Httponly là bảo vệ cookie tránh việc truy cập trái phép từ brower Chỉ lưu và gửi kèm cookie phản hồi từ client đến server Nếu cookie được set cờ Httponly nó không thể bị truy cập bởi client thông qua Javascript Điều đó có nghĩa hacker không thể đọc giá trị hoặc thậm chí không biết cookie có tồn tại hay không.

Code xử lý thêm các dòng hightlight vào để bật cờ true cho HttpOnly if ( account_id != null ) {

String hashedValidator = DigestUtils sha256Hex( rawValidator );

Authentication auth = new Authentication( account_id selector , , hashedValidator); auth.Update();

Cookie cookieSelector = new Cookie( "selector" , selector); cookieSelector.setHttpOnly( true ); cookieSelector.setMaxAge(604800);

Cookie cookieValidator = new Cookie( "validator" , hashedValidator); cookieValidator.setHttpOnly( true ); cookieValidator.setMaxAge(604800);

Cookie cookieIsLogged = new Cookie( "is_logged" "true"); , cookieIsLogged.setHttpOnly( true ); cookieValidator.setMaxAge(604800); response addCookie( cookieSelector ); response addCookie( cookieValidator ); response addCookie( cookieIsLogged );

Và thêm vào file web.xml

true

SameSite Cookie là thuộc tính thêm vào trong cookie để yêu cầu chủ sở hữu trang web ghi rõ ràng nhãn cookie của Web khác, nhờ đó chỉ có thể chia sẻ Cookie với các trang web này Như vậy một website lừa đảo không thể giả mạo người dùng vì không thể lấy được Cookie.

Lợi ích của SameSite giúp cho việc chống tấn công CSFR dễ dàng và hiệu quả hơn. Người làm hệ thống sẽ giảm chi phí do không cần bổ sung tính năng tạo và tương tác thông qua token ở client và server Hiệu năng của hệ thống được nâng cao khi không phải sinh và đối chiếu token

SameSite là một thuộc tính của Set-Cookie trong Http response header Có 3 giá trị:

Giá trị của Strict phòng ngừa các web giả mạo mạnh mẽ Trình duyệt sẽ ngăn cản dữ liệu cookie chuyển giữa các tên miền chéo khác trong mọi trường hợp Cookie sẽ không được gửi cùng với các request được bắt đầu với các trang web thứ 3 Đặt cookie là Strict có thể ảnh hưởng tiêu cực đến trải nghiệm duyệt web Ví dụ: nếu bạn nhấp vào 1 liên kết dẫn đến trang profile của Facebook, và Facebook.com đặt cookie của nó là SameSite=Strict thì bạn không thể tiếp tục redirect trên Facebook trừ khi bạn đăng nhập lại vào Facebook Lý do là vì Cookie của Facebook không được gửi kèm với request này.

Trình duyệt cho phép chia sẻ cookie giữa các trang web có cùng miền, cookie sẽ được gửi cùng với GET request được tạo bởi bên thứ 3.

Phần này tạo thêm 1 class HttpService public class HttpService { private static final FastDateFormat expiresDateFormat =

FastDateFormat getInstance ( "EEE, dd MMM yyyy HH:mm:ss zzz",

TimeZone getTimeZone ( "GMT" )); public static void addCookie(HttpServletResponse response , Cookie cookie ,

StringBuilder = c new StringBuilder(64+ cookie.getValue().length()); c append( cookie getName()); c.append( ); '=' c append( cookie getValue()); append2cookie( , c "domain" , cookie.getDomain()); append2cookie( , c "path" , cookie.getPath()); append2cookie( , c "SameSite" , sameSite);

( if cookie getSecure()) { c.append("; secure");

( if cookie isHttpOnly()) { c.append("; HttpOnly");

( if cookie getMaxAge()>=0) { append2cookie( , c "Expires" , getExpires( cookie getMaxAge()));

} response.addHeader("Set-Cookie" , c.toString());

} private static String getExpires( int maxAge ) {

Calendar expireDate = Calendar getInstance(); expireDate.setTime(new Date()); expireDate add(Calendar SECOND , maxAge ); return expiresDateFormat.format( expireDate );

} private static void append2cookie(StringBuilder cookie , String key , String value) {

( if key==null || value==null || key.trim().equals("" )

|| value.trim().equals("" )) { return ; cookie.append("; "); cookie append( key ); cookie.append( ); '=' cookie append( value );

Mục đích của class này là tạo chuỗi path thêm vào cookie, thay vì những cách khác là set thẳng từng giá trị vào response thì class HttpService giúp thêm giá trị của SameSite vào một đối tượng cookie đã được tạo Vì lý do phần code nhóm em set cookie từ một đối tượng cookie.

HttpService addCookie ( response, cookieSelector, "Strict" );

HttpService addCookie ( response, cookieValidator, "Strict" );

HttpService addCookie ( response, cookieIsLogged, "Strict" );

Phần code này chưa set cho đối tượng JSESSIONID.

1.3 X-Frame-Options Header Not Set

Clickjacking là hình thức tấn công đánh lừa người dùng nhấn chuột vô ý vào một đối tượng trên website Một khi nhấn chuột vào một đối tượng trên màn hình, người dùng click vào đối tượng nhưng thực chất đang bị lừa đến một đối tượng khác đã bị ấn hoặc làm mờ đi Mục đích đánh cắp tài khoản, click vào quảng cáo tăng lượt truy cập để kiếm tiền,…

Rủi ro mà kỹ thuật này gây nên:

- Lấy cắp thông tin thông qua một form fake.

- Lừa người dùng mở webcam hoặc microphone.

- Phán tán Worms trên các mạng xã hội.

- Phán tán malware bằng cách chuyển hướng người dùng tới link download chương trình độc hại.

Vào các trường hợp hacker cố gắng chèn , X-Frame-Opions Header giúp ngăn chặn website tránh các tình trạng bị chèn vào các trang website khác X-Frame- Opions Header dùng để ngăn chặn tấn công của Clickjacking.

X-Frame-Opions Header có 3 giá trị:

- X-Frame-Options: DENY - Không cho phép bất kì trang nào chèn trang bằng thẻ

, kể cả trang nằm cùng domain.

- X-Frame-Options: SAMEORIGIN - Không cho phép bất kì trang nào chèn trang bằng thẻ ngoài trang nằm cùng domain.

- X-Frame-Options: ALLOW-FROM https://another-domain.com - Không cho phép bất kì trang nào chèn trang bằng thẻ ngoài trang another.

Lưu ý, với giá trị allow-from, bạn chỉ có thể chỉ định duy nhất một và chỉ một tên miền thôi, khác với CSP có thể nhận nhiều tên miền hơn.

Tạo packeage package filter và class XframeOptionsFilter

Implement Filter cho class này

@WebFilter("/*") public class XFrameOptionsFilter implements Filter{

@Override public void doFilter(ServletRequest servletRequest , ServletResponse servletResponse , FilterChain filterChain )

// TODO Auto-generated method stub

HttpServletResponse response = (HttpServletResponse) servletResponse; response.addHeader("X-Frame-Options" "DENY"); ,

// response.addHeader("X-Frame-Options", "SAMEORIGIN");

// response.addHeader("X-Frame-Options", "ALLOW-FROM http://localhost:8080"); filterChain doFilter( servletRequest , response);

@Override public void init(FilterConfig filterConfig ) {

@WebFilter("/*") Để áp dụng cho tất cả các trang. response.addHeader("X-Frame-Options", "DENY"); Để chống tấn công – chống set X- Frame-Options cho response

1.4 The Cross-Domain JavaScript Source File Inclusion

- The Cross-Domain JavaScript Source File Inclusion là cảnh báo bảo mật có thể xảy ra khi trang web bao gồm và có khả năng chạy một hoặc nhiều tệp Javascript từ miền của bên thứ ba

- Nếu tập lệnh không do bạn sở hữu và quản lý, thì có nguy cơ tệp JavaScript được chèn vào của bạn có thể bị thay thế bằng nội dung độc hại, ví dụ: bao gồm mã nguy hiểm hoặc đánh cắp thông tin / tài nguyên nhạy cảm từ người dùng ứng dụng của bạn

- Trong một số trường hợp, kẻ tấn công có thể áp đặt mã hóa UTF-16 mặc dù bộ ký tự của thẻ đã được đặt Điều này giúp kẻ tấn công làm rò rỉ dữ liệu ở các định dạng khác nhau như JSON, XML, v.v Khi người dùng gửi yêu cầu, tập lệnh sẽ được cập nhật cùng với thông báo phản hồi Nếu phản hồi được lưu trữ trong các biến toàn cục, mọi người đều có thể đọc được Nếu thông tin nhạy cảm được bao gồm trong phản hồi JSONP, thì hàm được thực thi có thể bị ghi đè để lấy thông tin nhạy cảm Thủ thuật này cũng có thể được sử dụng cho các chức năng toàn cục Thay vì ghi đè các hàm đã thực thi, chúng có thể sử dụng các hàm gọi lại được mã hóa tùy chỉnh cho các hàm toàn cục.

- Khi một số tệp JavaScript ứng dụng của bạn nằm trên miền của bên thứ ba và không do bạn quản lý, kẻ tấn công có thể cố chiếm đoạt miền đó hoặc truy cập vào máy chủ của bên thứ ba đó để sửa đổi các tệp này và các tệp này có thể thực thi người dùng truy cập vào trang web Điều này có thể được thực hiện mà không cần truy cập các máy chủ vật lý.

- Tác động của cảnh báo này bao gồm:

+ Có thể thực thi javascript độc hại

+ Thao tác và rò rỉ dữ liệu người dùng có thể xảy ra

+ Chức năng có thể thay đổi và chuyển hướng dữ liệu

+ Nhiễm phần mềm độc hại

- Cụ thể, trong web của nhóm của sự dụng một số từ googleapis, cloudflare bootstrapcdn, và fontawesome

- Nguyên tắc chung để tránh khỏi tấn công từ lỗ hỏng này là luôn lưu trữ tất cả các tệp ứng dụng trên các máy chủ thuộc quyền quản lý hoặc dịch vụ bên thứ ba được công nhận và đáng tin cậy, công khai Những script mà nhóm sử dụng đều từ nguồn được công nhận nên có thể yên tâm.

- Tránh đặt thông tin nhạy cảm bên trong các các tệp javascript hoặc JSONP

1.5 Incomplete or No Cache-control Header Set

Cross-Site Scripting

Cross-site scripting là một lỗ hổng phổ biến trong ứng dụng web Để khai thác một lỗ hổng XSS, hacker sẽ chèn mã độc thông qua các đoạn script để thực thi chúng ở phía client Có 3 loại Reflected XSS, Stored XSS và DOM-based XSS Tấn công Cross Site Scripting nghĩa là gửi và chèn lệnh và script độc hại, những mã độc này thường được viết với ngôn ngữ lập trình phía client như Javascript, HTML, VBScript, Flash… Tuy nhiên, cách tấn công này thông thường sử dụng Javascript và HTML

Nguyên nhân chính của loại tấn công này là xác thực đầu vào dữ liệu người dùng không phù hợp, dữ liệu độc hại từ đầu vào có thể xâm nhập vào dữ liệu đầu ra Mã độc có thể nhập một script và được chèn vào mã nguồn của website Khi đó trình duyệt không thể biết mã thực thi có phải độc hại hay không Do đó mã độc hại có thể đang được thực thi trên trình duyệt của nạn nhận hoặc bất kỳ hình thức giả nào đang được hiển thị cho người sử dụng.

2.2 Các loại tấn công XSS

Có 3 loại tấn công XSS chính như sau:

- Reflect XSS : gọi là reflected(phản xạ) bởi vì trong kịch bản khai thác loại này, hacker phải gửi cho nạn nhân một URL có chứa đoạn mã nguy hiểm(thường là javascript) Nạn nhân chỉ cần request đến URL này thì ngay lập tức hacker sẽ nhận được respond chứa kết quả mong muốn(tính phản xạ thể hiện ở đây).

-Stored XSS: khác với Reflected tấn công trực tiếp vào một số nạn nhân mà hacker nhắm đến, Stored XSS hướng đến nhiều nạn nhân hơn Lỗi này xảy ra khi ứng dụng web không kiểm tra kỹ các dữ liệu đầu vào trước khi lưu vào cơ sở dữ liệu Ví dụ như các form góp ý, các comment … trên các trang web Với kỹ thuật Stored XSS , hacker không khai thác trực tiếp mà phải thực hiện tối thiểu qua 2 bước.

- DOM Based XSS là kỹ thuật khai thác XSS dựa trên việc thay đổi cấu trúc DOM của tài liệu, cụ thể là HTML.Trong DOM-based XSS attack, chuỗi độc hại không thực sự được xử lý bởi trình duyệt nạn nhân cho đến khi JavaScript hợp pháp của website được thực thi

Các phương pháp phòng ngừa chính được sử dụng phổ biến bao gồm: data validation, filtering, escaping Bước đầu tiên trong công tác phòng chống tấn công này là xác thực đầu vào Mọi thứ, được nhập bởi người dùng phải được xác thực chính xác Xác thực dữ liệu có thể được đặt tên làm cơ sở để đảm bảo tính bảo mật của hệ thống, nhưng có thể không đủ để ngăn chặn lỗ hổng XSS có thể xảy ra.

Một phương pháp ngăn chặn tốt khác là lọc đầu vào của người dùng Ý tưởng lọc là tìm kiếm các từ khóa nguy hiểm trong mục nhập của người dùng và xóa chúng hoặc thay thế chúng bằng các chuỗi trống Những từ khóa đó có thể là: thẻ ,lệnh Javascript , đánh dấu HTML.

- Giảm thiểu DOM-Based XSS

Sử dụng JavaScript Framework: các Frameworks như Ember, AngularJS và React sử dụng các template đã kiểm tra các cuộc tấn công XSS có thể xảy ra và làm sạch input của người dùng.

Audit Code cẩn thận: nếu bạn đang sử dụng native DOM APIs, hãy tránh sử dụng các thuộc tính và chức năng sau: InnerHTML, outerHTML, document.write Thay vào đó, hãy đặt nội dung văn bản trong các tag bất cứ nơi nào có thể: InnerText, textContent Client-Side

Giảm thiểu Client side DOM-based XSS chỉ có thể thông qua việc cập nhật trình duyệt hỗ trợ hạn chế chính sách CORS và CSP mới nhất, ngăn người dùng nhấp vào các liên kết đáng ngờ.

2.4 Tấn công project với XSS

Chèn các đoạn script vào những nơi có nhập input người dùng như comment bài viết, thanh tìm kiếm, tạo bài viết, hệ thống web đều thực thi những đoạn lệnh này do chưa có kiểm tra lọc đầu vào hợp lệ Như vậy hệ thống bị tấn công dạng Store XSS , những đoạn mã bị lưu dưới database khi nhập vào comment, và mỗi khi người dùng load một bài viết nào có comment như vậy đều sẽ bị tấn công Như hình dưới đây:

Nhấn nút bình luận, ta sẽ thấy xuất hiện alert thông tin lưu trong cookie của người dùng Và mỗi khi bất kì người dùng nào click vào chi tiết bài viết này, những bình luận sẽ được load lên và kể cả comment chưa đoạn script này Vì nó đã được lưu trữ dưới database.

Hay chèn một form lên thanh tìm kiếm :

Phía server : sử dụng StringEscapeUtils từ Apache Commons Lang, với hàm escapeHtml4(String) sẽ lọc những kí tự < , > , “ , ”, ‘ ,’,… và thay thế bằng các kí tự khác như < , " ,…

Thêm escapeHtml() khi lấy parameter nội dung comment từ phía client trong class commentController

Tương tự trong class createController, cũng thêm hàm escapeHtml4().

Và bình luận sẽ được lưu vào database như hình ( tương tự cho các dữ liệu khác).

Hoặc ở phía client, dùng thẻ của thư viện JSTL bật thuộc tính escapseXml“true”, các nội dung được lưu trữ dưới database sẽ tự động được mã hóa, nên các script độc hại không thể thực thi.

Thêm thẻ vào các thẻ hiển thị dữ liệu trong các lớp jsp như index2.jsp, post.jsp.

Tấn công Brute Force

Cơ chế được sử dụng rộng rãi nhất để xác thực người dùng là mật khẩu Do đó, password attack là một cuộc tấn công phổ biến và hiệu quả.

Phần lớn các vụ đánh cắp thông tin liên quan đến quyền truy cập tài khoản Ngay cả thông tin xác thực của người dùng bình thường rơi vào tay kẻ xấu cũng có thể biến thành vũ khí tàn phá toàn bộ hệ thống.

Một số hình thức phổ biến để tấn công mật khẩu: Dictionary, Hybrid, Brute Force.

3.2 Brute Force - Tấn công dò mật khẩu

Brute force là một trong những hình thức phổ biến nhất của password attack và dễ dàng nhất để thực hiện Brute force thường là biện pháp cuối cùng của hacker nếu các kỹ thuật trước đó thất bại đơn giản vì đây là công cụ tốn nhiều thời gian nhất Sử dụng các chương trình máy tính để đăng nhập vào tài khoản người dùng dò tìm username và password.

Một website sử dụng mật khẩu đơn giản với giới hạn 5 ký tự Sử dụng Crunch (một công cụ tạo pass list) để tạo danh sách mật khẩu chỉ với chữ cái, có 12.356.630 giá trị được tạo ra và mất 70 MB để lưu trữ Nếu thêm các ký tự đặc biệt và chữ số vào hỗn hợp và nó đã tăng kích thước của danh sách từ lên 62 GB.

Với mật khẩu từ 8 đến 12 ký tự, danh sách này có 99.246.106.575.066.880 giá trị, gấp khoảng 8 tỷ lần số so với danh sách trước; mất 1.169.818 TB để lưu trữ Thêm các chữ số và ký tự đặc biệt vào hỗn hợp, kích thước danh sách tăng khoảng 10 lần. 3.3 Xử lý

Ban đầu website của nhóm chỉ ràng thuộc có độ dài từ 6 đến 10 ký tự và ít nhất một ký tự đặc biệt Bây giờ thêm những ràng buộc sau đây:

- Có ít nhất một chữ cái, chữ số và có ít nhất một chữ cái viết hoa.

- Có ít nhất là một ký tự đặc biệt.

- Có độ dài từ 8 – 15 ký tự.

< script > document.getElementById('password').onkeyup= function (){ var format = /[!@#$%^&*()_+\-=\[\]{}:\\|,.\/?]+/; var formatAlphabetCap = /[ABCDEFGHIJKLMNOPQRSTUVWXYZ]+/; var formatAlphabet = /[abcdefghijklmnopqrstuvwxyz]+/; var formatNumber = /[1234567890]+/; var pw = document.getElementById( "password" ).value;

(pw == ) { if "" document.getElementById( "message" ).innerHTML = "**Không đ tr ng !" ể ố ; document.getElementById( "btnSignup" ).disabled = true ;

(pw.length < 8) { if document.getElementById( "message" ).innerHTML = ậ "**M t kh u t i thi u 8 ẩ ố ể kí t " ự ; document.getElementById( "btnSignup" ).disabled = true ;

(formatNumber.test(pw) == if false){ document.getElementById( "message" ).innerHTML = ầ "**C n có ít nh t m t ch ấ ộ ữ s " ố ; document.getElementById( "btnSignup" ).disabled = true ;

} else if (pw.length > 15) { document.getElementById( "message" ).innerHTML = ộ "**Đ dài m t kh u t i ậ ẩ ố đa là 15 ký t " ự ; document.getElementById( "btnSignup" ).disabled = true ;

(formatAlphabet.test(pw) == if false){ document.getElementById( "message" ).innerHTML = "**C n có ít nh t ầ ấ m t ch cái " ộ ữ ; document.getElementById( "btnSignup" ).disabled = true ;

} else if (pw.length > 15) { document.getElementById( "message" ).innerHTML = "**Đ dài m t kh u ộ ậ ẩ t i đa là 15 ký t " ố ự ; document.getElementById( "btnSignup" ).disabled = true ;

} else document.getElementById( "message" ).innerHTML = ầ "**C n có ít nh t m t ch ấ ộ ữ cái in hoa "; document.getElementById( "btnSignup" ).disabled = true ;

} else if (pw.length > 15) { document.getElementById( "message" ).innerHTML = ộ "**Đ dài m t kh u t i ậ ẩ ố đa là 15 ký t " ự ; document.getElementById( "btnSignup" ).disabled = true ;

(format.test(pw) == if false){ document.getElementById( "message" ).innerHTML = "**C n có m t ký t ầ ộ ự đ c bi t " ặ ệ ; document.getElementById( "btnSignup" ).disabled = true ;

//maximum length of password validation else if (pw.length > 15) { document.getElementById( "message" ).innerHTML = ộ "**Đ dài m t kh u t i ậ ẩ ố đa là 15 ký t " ự ; document.getElementById( "btnSignup" ).disabled = true ;

{ document.getElementById( "message" ).innerHTML = "**Password syntax correct"; document.getElementById( "btnSignup" ).disabled = false ;

NoSQL injection

Kết quả: Không phát hiển lỗ hổng NoSQL Injection.

Quét lỗ hổng NoSQL Injection và Blind NoSQL Inject bằng Arachni v1.5.1 - WebUI v0.5.12

- Link download: https://www.arachni-scanner.com/download/

- Tải và giải nén ứng dụng Để chạy ứng dụng:

Chuyển vào thư mục: \arachni-1.5.1-0.5.12-windows-x86_64

Mở CMD, gõ lệnh: bin\arachni_web

Mở trình duyệt, truy cập: localhost:9292 Đăng nhập vào hệ thống với

Tạo mới scan profile với các thông số:

Lưu lại profile dưới tên NoSQLi Tạo tiến trình scan mới (Lưu ý, chọn profileNoSQLi đã tạo ở trên, thay vì Default):

Kết luận: Không tìm thấy lỗ hổng NoSQL injection và Blind NoSQL injection bằng phần mềm Arachni.

Link: https://github.com/cr0hn/nosqlinjection_wordlists

Repo chứa danh sách các payload dùng để test NoSQL (MongoDB) Injection Đây là wordlists đầy đủ và đa dạng nhất về các payload phục vụ MongoDB NoSQL Injection hiện nay, với khoảng 282 stars và 63 forks trên GitHub Danh sách các payloads: true, $where: '1 == '1

' } ], $comment:'successful MongoDB injection' db.injection.insert({success: });1 db.injection.insert({success:1});return 1;db.stores.mapReduce(function() { { emit(1,1

';it=new% Date();do{20 pt=new%20Date();}while(pt-it

Ngày đăng: 15/04/2024, 19:01

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

TÀI LIỆU LIÊN QUAN

w