Wi-FiルーターでのWPA2パスワード(事前共有キー)の自動変更

挑戦する



-8桁の番号の生成と、Wi-FiルーターへのWPA2パスワードとしての週1回の自動インストール

-電子メールで新しいパスワードを送信する

-パスワードでhtmlページを作成



利用可能です



-WebサーバーがインストールされたLinux(Webサーバーはこのページ/opt/company/wifi-guest/index.htmlを返します)およびプロキシ(プロキシアドレスproxy.company.lan:3128)を介したWi-Fiポイントへのアクセス

-Wi-FiルーターTP-LINK WR1043ND(アクセスポイントアドレスggw.company.lan

-smtpサーバー(サーバーアドレス10.10.10.10、発信アドレス-notificaions@company.com、受信者アドレスadmins@company.com)



かかります



-HttpFoxプラグインを備えたFirefox

-カール

-bashスクリプト



解決策



1. HttpFoxプラグインを使用して、パスワードを変更して再起動するためにブラウザーによって実行されるPOSTまたはGETリクエストを取得します。 ルーターの場合、これらは次の形式のGET要求になります。
  「http://$http_url/userRpm/WlanSecurityRpm.htm?wepSecOpt = 3&wpaSecOpt = 3&wpaCipher = 1&intervalWpa = 0&secType = 3&pskSecOpt = 3&pskCipher = 1&interval = 0&Save = Save&pskecret」 
そして
  「http://$http_url/userRpm/SysRebootRpm.htm?Reboot = Reboot」 


2. curlと上記のGETリクエストを使用して、コマンドが成功した場合にルーターが返すHTMLページを取得します。 これらのページから、コマンドの成功を判断するために一意と見なす行を取得します。 たとえば、パスワードを設定するには:
  "location.href =" / userRpm / WlanSecurityRpm.htm ";" 
-再起動の場合:
  "<TD class = h2 id =" t_restart ">再起動しています... </ TD>" 


3. bashスクリプトでこれらの値を置き換え、cronにスクリプトを含めて、週に1回実行します。

4.スクリプトの起動を手動でテストします。

5.完了!



#!/bin/bash -e # Description: script is purposed for automatic changing WPA2 key on TP-LINK WR1043ND (Wi-Fi router) using curl # Common variables proxy_url=proxy.company.lan:3128 proxy_username=proxy-user proxy_password=proxy-pass http_url=ggw.company.lan http_username=http-user http_password=http-pass # Define email message title smtp_title="Guest Wi-Fi password has been changed" # Define smtp server and email addresses smtp_server=10.10.10.10 smtp_send_from=notificaions@company.com smtp_send_to=admins@company.com smtp_links="Password link: http://wifi-guest.company.lan\nAdmin link: http://$http_url" webpage_path=/opt/company/wifi-guest/index.html # Special variables set_password_successfuly='location.href="/userRpm/WlanSecurityRpm.htm";' perform_reboot_successfuly='<TD class=h2 id="t_restart">Restarting...</TD>' stat_begin='^var hostList = new Array\($' stat_end='.*\);' # Core variables CURL="curl --silent --proxy $proxy_url --proxy-user $proxy_username:$proxy_password --user $http_username:$http_password" # Generate 8-digit password (from 00000000 to 99999999) NEW_WPA_PASSWORD=$( printf "%04d%04d" $(($RANDOM%10000)) $(($RANDOM%10000)) ) # Date and time DATE_TIME="$(date +"%F %T")" # Set password $CURL "http://$http_url/userRpm/WlanSecurityRpm.htm?wepSecOpt=3&wpaSecOpt=3&wpaCipher=1&intervalWpa=0&secType=3&pskSecOpt=3&pskCipher=1&interval=0&Save=Save&pskSecret=$NEW_WPA_PASSWORD" | grep "$set_password_successfuly" > /dev/null && SET_PASS="OK" || SET_PASS="ERR" [[ $SET_PASS != "OK" ]] && echo "Set password error" && exit 1 # Reboot $CURL "http://$http_url/userRpm/SysRebootRpm.htm?Reboot=Reboot" | grep "$perform_reboot_successfuly" > /dev/null && REBOOT="OK" || REBOOT="ERR" [[ $REBOOT != "OK" ]] && echo "Reboot error" && exit 1 # Update web page echo " <html> <head> <meta http-equiv=\"Pragma\" content=\"no-cache\"> <meta http-equiv=\"Cache-Control\" content=\"no-cache\"> </head> <body> <center> <p>New Wi-Fi password:<br>$NEW_WPA_PASSWORD</p> <p>Generated: $DATE_TIME</p> </center> </body> </html> " > $webpage_path # Send password and statistics to admins wifi_stat=$($CURL "http://$http_url/userRpm/WlanStationRpm.htm" | awk "/$stat_begin/,/$stat_end/") smtp_message="New Wi-Fi password: $NEW_WPA_PASSWORD\n\nWi-Fi statistics:\n$wifi_stat\n\n$smtp_links" echo -e "$smtp_message" | \ env smtp=$smtp_server from=$smtp_send_from \ /usr/bin/mail -v \ -s "$smtp_title" \ $smtp_send_to
      
      







PS:何らかの理由でsource = "bash"はスクリプトを色付けしませんでした。



更新 :脆弱なジェネレーターを修正しました。



(合計32,768個のパスワードオプションがあります):

 NUMPASS_MIN=10000000 NUMPASS_MAX=99999999 NEW_WPA_PASSWORD="$(( ($RANDOM*($NUMPASS_MAX-$NUMPASS_MIN)/32767)+$NUMPASS_MIN ))"
      
      





次のようになりました(8桁のパスワードのすべてのバリエーションが可能になりました)。

 NEW_WPA_PASSWORD=$( printf "%04d%04d" $(($RANDOM%10000)) $(($RANDOM%10000)) )
      
      






All Articles