Username Enumeration
Chúng ta có thể tận dụng chức năng báo trùng username khi đăng ký tài khoản để tìm ra danh sách username của người dùng.
Tool sử dụng là Ffuf, cách dùng như sau:
ffuf -w /path/to/usernames/names.txt -X POST -d "username=FUZZ&password=x" -H "Content-Type: application/x-www-form-urlencoded" -u <URL> -mr "username already exists" > usernames.txt
Với:
-X
là để khai báo phương thức HTTP. Trong câu lệnh trên thì phương thức cần phải làPOST
vì ta đang đăng ký tài khoản.-d
là để khai báo payload cho request, thường có dạng query string. ChuỗiFUZZ
đóng vai trò như là placeholder cho các từ ở trong wordlist.-H
ở trong câu lệnh trên giúp thiết lập định dạng payload làwww-form-urlencoded
.-mr
là viết tắt của cụm từ match regex, giúp match chuỗiusername already exists
có trong response trả về từ server (response trả về là một trang web).
Chúng ta xuất danh sách các usernames tìm được ra file usernames.txt
.
Password Brute Forcing
Sau khi có danh sách các username thì ta có thể tiến hành brute force password bằng cách sử dụng thêm một wordlist có chứa các passwords phổ biến như sau:
ffuf -w usernames.txt:W1,/path/to/passwords/common-passwords.txt:W2 -X POST -d "username=W1&password=W2" -H "Content-Type: application/x-www-form-urlencoded" -u <URL> -mc 200
Do sử dụng hai wordlists, ta sẽ tự định nghĩa hai placeholder khác là W1
và W2
ở trong payload. Với W1
tương ứng với usernames.txt
và W2
tương ứng với common-passwords.txt
.
Ngoài ra, ta còn sử dụng thêm option -mc
giúp lọc ra các responses và chỉ giữ lại response nào có status code là 200
.
Logic Flaw
Gửi request đến website thông qua chương trình curl
:
curl 'http://domain.com' -H 'Content-Type: application/x-www-form-urlencoded' -d 'parameter=value'
Với:
-H
là dùng để thêm/chỉnh sửa header trong gói tin HTTP truyền đi.-d
là để liệt kê các query parameters.
Cookie Tampering
Plain Text
Nội dung của cookie có thể có dạng plain text.
Ví dụ, hai dòng dưới đây là cookie sau khi đăng nhập thành công.
Set-Cookie: logged_in=true; Max-Age=3600; Path=/
Set-Cookie: admin=false; Max-Age=3600; Path=/
Dễ thấy, để có thể có các đặc quyền cao hơn, ta có thể sửa trường admin
trong cookie thành true
và gửi đến server thông qua một HTTP request như sau:
curl http://domain.com/cookie-test -H "Cookie: logged_in=true; admin=true"
Hashing
Có thể sử dụng hàm hash lên cookie để biến đổi giá trị thành một dạng mã không thể đọc được và irreversible.
Các thuật toán thường dùng là MD5, SHA1, SHA256 hoặc SHA512.
Tuy nhiên, hash là hàm tất định. Với một đầu vào thì sẽ luôn cho ra một đầu ra. Do đó mà ta có thể sử dụng các cơ sở dữ liệu hashes, chẳng hạn như CrackStation, có chứa các hashes phổ biến để tìm plaintext.
Encoding
Tương tự như hashing nhưng có thể dịch ngược lại thành plaintext. Việc encoding chỉ đơn thuần là chuyển đổi dạng biểu diễn của dữ liệu. Có thể là từ nhị phân sang dạng human-readable chẳng hạn như hệ cơ số 32 (bao gồm các ký tự A-Z
, 2-7
) hoặc hệ cơ số 64 (bao gồm các ký tự a-Z
, 0-9
, /
, +
).
Cookie có thể được encoded trước khi được gửi đi cho server.