NỘI DUNG
Trong nội dung Penetration Testing Step 3 – Password attack bắt đầu từ đâu?, tôi đã bàn về ý tưởng tấn công vào các lỗ hổng thuộc kiểu Password-based login của cơ chế xác thực với phương án Brute-force. Ngoài ra, tôi cũng đã đề cập đến việc mông má wordlist phục vụ password attack trong nội dung Penetration Testing Step 3 – Kỹ nghệ chế biến wordlist phục vụ Password Attack. Và để tiếp tục chương trình, hôm nay tôi sẽ bàn tiếp về Brute-force protection (giải pháp chống Brute-force) và các lỗ hổng có thể tận dụng để khai thác mục tiêu.
Như demo trong phần Brute-foce attack, bạn có thể gặp cơ chế bảo vệ khóa truy cập trong một khoảng thời gian khi đăng nhập sai quá nhiều lần. Ngoài kiểu này, bạn cũng có thể gặp tình huống bị khóa IP khi dội bom Brute-foce attack với mục tiêu với tốc độ quá nhanh. Về cơ bản, các giải pháp chống Brute-foce attack này sẽ có tác dụng khá đáng kể, đặc biệt là khả năng làm giảm tốc độ tấn công. Tuy nhiên, đôi khi vẫn có thể tồn tại một số lỗ hổng cho phép bạn thoát khỏi sự kiểm soát của hệ thống bảo vệ để tiếp tục sự nghiệp chọc ngoáy mục tiêu.
Lưu ý:
- Như mọi khi, tôi cũng sẽ tận dụng các bài Lab dựng sẵn của ông PortSwigger để tiết kiệm thời gian dàn cảnh. Và trong nội dung demo hôm nay, các wordlists chứa username và password cũng sẽ được cung cấp kèm theo bài Lab để đơn giản hóa quá trình tấn công;
- Thông tin liên quan đến Burp Suite bạn có thể xem nội dung Penetration Testing Step 3 – 6 điều bạn nên biết trước khi xài tool khủng Burp Suite;
- Chi tiết việc sử dụng Burp Suite Repeater bạn có thể xem trong nội dung Penetration Testing Step 3 – Thủ thuật chọc ngoáy HTTP/WebSockets message với Burp Suite Repeater;
- Chi tiết việc sử dụng Burp Suite Intruder bạn có thể xem trong nội dung Penetration Testing Step 3 – Chuẩn bị đổ mưa bom, bão đạn lên mục tiêu với Burp Suite Intruder;
#1. Triển khai password attack với chiêu reset counter của hệ thống Brute-force protection
Trong tình huống demo đầu tiên này, hệ thống Brute-force protection sẽ khóa truy cập dựa vào IP khi đăng nhập sai liên tục 3 lần. Vấn đề là cái counter (bộ đếm số lần đăng nhập sai) sẽ reset mỗi khi có một lần đăng nhập thành công. Do vậy tôi chỉ cần lấy một cái credential chuẩn đã đăng ký chèn vào giữa các lần thử nghiệm để bảo đảm không bao giờ vượt quá giới hạn đăng nhập quy định.
Rồi, với ý tưởng đó, tôi thẳng tiến đến trang login của mục tiêu và tung ra thử vài đòn đăng nhập thăm dò với credential dỏm và Burp Suite Repeater.
Và như có thể thấy ở trên, sau vài nháy thử nghiệm đăng nhập sai, tôi đã bị hệ thống khóa truy cập. Kế tiếp, tôi cần thử nghiệm với một cái credential chuẩn để xác nhận có thể reset được cái counter đếm số lần đăng nhập sai.
Một khi đã xác nhận việc reset diễn ra như mong đợi (tức là sau khi đăng nhập với credential chuẩn, tôi đã có thể tiếp tục quá trình Brute-force password) , tôi sẽ đẩy hàng qua cho Burp Suite Intruder để chuẩn bị cho bước tấn công tiếp theo.
Tại phần Positions, với Pitchfork attack type, tôi sẽ đặt Payload Marker tại vị trí username và password. Với thiết lập này, tôi sẽ cần đút vào Payload set 1 (tương ứng với username) và Payload set 2 (tương ứng với password) 2 wordlist tương ứng. Điểm cần lưu ý ở đây là tôi sẽ xen kẽ các payload thử nghiệm thăm dò password với cái credential chuẩn (wiener:peter như bên dưới) nhằm liên tục reset cái counter của hệ thống Brute-force protection.
Ngoài ra, để bảo đảm quá trình đăng nhập với payload theo đúng thứ tự, tôi cũng sẽ cần thiết lập lại với thông số Max concurrent requests tương ứng với 1.
Lưu ý: Username và password wordlist sử dụng ở trên tôi hốt từ bài Lab với mục tiêu demo cho nhanh gọn. Việc xây dựng đám wordlist thực tế bạn có thể xem thêm thông tin trong nội dung Penetration Testing Step 3 – Kỹ nghệ chế biến wordlist phục vụ Password Attack như tôi đề cập ở phần đầu.
Sau khi bày binh bố trận xong xuôi, tôi có thể bấm Start Attack và đi làm việc khác (vì thiết lập Max concurrent requests = 1 ở trên nên quá trình tấn công này sẽ mất kha khá thời gian).
Sau khi có hàng về, tôi sẽ cần lọc lại thông tin và đi tìm dòng có Status 302 tương ứng với Payload 1 là carlos và đọc giá trị password tương ứng (123456789 như bên dưới).
#2. Khai thác sự khác biệt trong response để thu gọn phạm vi tấn công
Chuyển sang tình huống kế tiếp khi mục tiêu triển khai account locking (khóa truy cập của tài khoản) khi đạt tới một giới hạn nhất định (ví dụ số lần login fail). Giải pháp này trông có vẻ hoàn hảo để chống brute-force attack tuy nhiên vẫn tồn tại một số vấn đề có thể khai thác kiểu như sau:
- Attacker triển khai tấn công dựa trên một danh sách các username tiềm năng. Với từng username, attacker thiết lập một số lượng password tiềm năng ít hơn số lượng có thể làm phát sinh tình huống account locking và tiến hành dò tìm;
- Attacker triển khai tấn công với một danh sách các cặp username:password (có thể hốt được từ các vụ rò rỉ dữ liệu). Với phương án này, chỉ cần một cụ nào đấy dại dột sử dụng cùng user:password cho nhiều hệ thống khác nhau (trong đó có mục tiêu đang bị tấn công) là attacker sẽ vớ bẫm. Và ở đây, account locking cũng sẽ không có tác dụng gì sất (vì attacker chỉ đăng nhập sai 1 lần thì locking thế méo nào được);
- Tồn tại logic flaw cho phép attacker tận dụng để đánh giá thông tin đút vào (ví dụ username) từ đó giảm tải khối lượng công việc cho đối tượng tấn công;
Rồi, giờ tôi thử nghiệm với tình huống đề cập cuối cùng. Tương tự như các lần trước đó, tôi cũng sẽ thử đăng nhập vào hệ thống với credential đểu để thăm dò sau đó đẩy hàng sang Burp Suite Intruder.
Tại tab con Positions, với Cluster bomb attack type, tôi cũng sẽ đánh Payload Marker vô chỗ username. Tuy nhiên, ở đây tôi sẽ không đánh Payload Marker cho phần password mà đánh dấu một cái blank payload position ngay sau đó.
Lưu ý: Bạn có thể xem thể thông tin về Intruder attack type trong nội dung Penetration Testing Step 3 – Chuẩn bị đổ mưa bom, bão đạn lên mục tiêu với Burp Suite Intruder.
Lúc này, cái Payload 1 sẽ vẫn là username wordlist như trước đó.
Nhưng với Payload 2, tôi sẽ chuyển sang sử dụng Null payloads (tương ứng với empty string – chuỗi rỗng) và chạy với tùy chọn để generate null payload này 5 lần. Với thiết lập này, tôi có thể chạy request với cùng một username 5 lần từ đó kích hoạch account locking để thăm dò các response trả về. Thiết lập mọi thứ xong xuôi rồi thì tôi xả đạn với Start attack.
Quan sát kết quả trả về, tôi có thể thấy có một số response dài bất thường so với đồng bọn (cái ứng với payload 1 “ak” bên dưới). Quan sát kỹ hơn cái response, tôi cũng có thể thấy cái thông báo “You have made too many incorrect login attempts…” thay vì cái câu trả lời quen thuộc “Incorrect username or password” khi bơm đều với cả username và password vớ vẩn.
Với thông tin ghi nhận được ở trên, tôi quay lại cập nhật thông tin payload cho vị trí username (với cái “ak” tìm được ở trên). Và lần này, tôi chuyển Payload Marker qua vị trí password đồng thời chuyển attack type thành Sniper luôn.
Và đến đây thì mọi chuyện cũng sẽ tương tự các lần trước đó, tôi sẽ dí cái password wordlist vào payload.
Đồng thời, để thuận tiện trong việc thu lượm kết quả, tôi sẽ thiết lập extraction rule chỗ thông báo lỗi như bên dưới và bóp cò nhả đạn.
Và khi hàng về, tôi sẽ soi kèo theo phần thông báo lỗi để xác định xem thằng nào có kết quả bất thường (không còn thông báo lỗi).
#3. Triển khai password attack trong 1 request để thoát giới hạn truy cập
Ngoài phương án Brute-force protection dựa trên kiểm soát số lần đăng nhập sai ở trên, bạn cũng có thể gặp tình huống hệ thống khóa IP khi nhận thấy có quá nhiều request phát sinh từ cùng một đối tượng trong thời gian ngắn. Để luồn lách thoát khỏi tình huống đánh chặn này, bạn có thể phải:
- Chờ một khoảng thời gian nhất định;
- Gọi điện thoại cho người thân (có quen với admin) để nhờ mở khóa;
- Thực hiện các bước xác thực bổ sung (ví dụ giải CAPTCHA để khẳng định bạn không phải robot).
Giải pháp này cũng có một số cải thiện nhất định nhưng vẫn có thể bị các đối tượng lươn lẹo đối phó. Ví dụ, nếu attacker có giải pháp mông má chỉnh sửa lại để đẩy vào một loạt password thử nghiệm trong 1 request như phần demo ngay sau đây thì phương án bảo vệ này cũng sẽ phá sản.
Như mọi khi, tôi truy cập vào trang login và đẩy request sang Burp Suite Repeater. Điểm khác biệt ở đây là cái login credential nằm ở dạng JSON hứa hẹn cho khả năng tuồn hàng loạt password vào để thử nghiệm trong 1 request.
Với ý tưởng trên, tôi sẽ cần chỉnh sửa lại thông tin chỗ password từ cái string đơn thuần (“test123”) thành string array chứa danh sách các ứng viên password tiềm năng như bên dưới.
Lưu ý: Với wordlist thử nghiệm đơn giản, bạn có thể gõ tay cái string array. Trong thực tế, với wordlist dài, bạn nên xem xét sử dụng các giải pháp như regular expression để hỗ trợ cho quá trình chuyển đổi từ wordlist sang định dạng phù hợp để đút vô string array. Nội dung này hơi ngoài lề nên tôi không đề cập kỹ ở đây. Nếu muốn, bạn có thể comment để tôi giới thiệu kỹ thêm.
Sau khi hàng họ đã sẵn sàng, tôi sẽ Send request và sau đó chọn Show response in browser từ menu chuột phải để lấy URL đẩy vào browser.
Và nếu mọi chuyện êm đẹp, khi kiểm tra My account tôi sẽ thấy kết quả đăng nhập thành công như sau.
Phù, đến đây coi như tôi đã giới thiệu xong các vấn đề thuộc dạng password-based login của authentication mechanisms rồi đấy. Trong các kỳ sắp tới, tôi sẽ tăng độ khó lên và chuyển sang các vấn đề với multi-factor authentication.
Mong a chỉ giáo, giúp đỡ
Em không thực hiện được 2 ý:
1. Không hiện Intruder Payloads 2, chỉ hiện 1 payload duy nhất để attack
2. Không tái hiện cách string array trong mục Repeat được, chỉ tính là 1 request duy nhất thôi.
Chào bạn. Tôi không có nhiều thông tin về vấn đề bạn đang gặp phải nên không chắc có thể trả lời chính xác không. Tuy nhiên, với thông tin hiện có, tôi đoán:
– #1: Có thể bạn đang thiết lập Attack type không phù hợp. Cần đối chiếu lại với thiết lập trong phần demo tương ứng. Bạn cũng có thể xem kỹ hơn vấn đề này trong nội dung https://dummytip.com/penetration-testing-step-3-chuan-bi-do-mua-bom-bao-dan-len-muc-tieu-voi-burp-suite-intruder/;
– #2: Phần string array có thể bị lỗi cú pháp. Bạn có thể xem xét sử dụng các editor bên ngoài hỗ trợ regular expression để thuận tiện hơn.
Hy vọng các thông tin trên có thể giúp ích cho bạn.