標簽:光貓
腳本編程, 經驗雜筆使用python破解電信寬帶密碼
先森閑著沒事就喜歡研究光貓、路由器那一套,對網速比較敏感。在折騰網速的時候經常遇到的方案就是光貓僅轉換光信號,改成橋接讓路由器直接撥號。讓路由器撥號就涉及到寬帶的賬號密碼了,先森已經拿到了光貓的超管賬號,由于寬帶不是先森辦的,也不好聯系電信客服索要寬帶賬號密碼,所以就想著自己來獲取寬帶賬號密碼。先森坐標成都,運營商電信,光貓型號。折騰記錄百度有方法說是將hw_ctree.xml解密,里面會有寬帶密碼,但是先森實測解密出來里面只有超管密碼啥的,并沒有寬帶密碼。經過研究,實測可行方案如下。1、獲取“明文”首先使用超管賬號登錄光貓后臺,8080端口那個,不是80端口的。在網絡-網絡設置中,連接名稱選擇帶internet的那個,可以看到下面有用戶名和密碼,這個就是寬帶賬號和密碼了。成都的寬帶賬號是CD開頭的,CD是大寫。密碼是密文,這個只是顯示密文,通過F12大法,找到密碼的input標簽,將type的“password”改成“text”就能看到明文了。但是這個明文是64位的一場串,一看就不是什么正經密碼。光貓后臺F12大法2、破解密碼正經的密碼不可能64位那么行,拿著這個密碼去撥號也是沒法成功的。經過搜索了解,這個密碼是經過md5和哈希后的值,這個值想反解是很難的,但是寬帶密碼是純數字的,且并不是很長的,所以我們可以生成0~幾百萬數字先md5再哈希的值去跟“明文”做對比,相等的數字就是寬帶密碼了。python代碼:import hashlib# “明文”貼到這里:secret = '04f96727bb95e8cd75455822a7472e99a3fa14ce8098ffc5ce4a73ef07dde3fe'def sha256(todo): return hashlib.sha256(str(todo).encode()).hexdigest()def md5(todo): return hashlib.md5(str(todo).encode()).hexdigest()for value in range(0, 1000000000): # 可以將數字調大,獲取更長的密碼 s = sha256(md5(value)) print(value) # 打印可以看到當前計算的數字,可能會影響效率,不需要的可以刪掉此行 if s == secret: print(f'find: {s} = {value}') break“明文”字符串以“04f96727bb95e8cd75455822a7472e99a3fa14ce8098ffc5ce4a73ef07dde3fe”為例,這個密碼很簡單,解密出來是123123:解密過程當然,先森用的寬帶密碼沒這么簡單,不過也只是跑了幾分鐘就跑出來了,跑的速度具體要看機器的配置。先森將光貓改成橋接后,路由器使用破解出來的寬帶密碼撥號成功,證明此方法是具有可行性的。
系統運維, 經驗雜筆華為光貓HS8145V交叉編譯靜態tcpdump
先森是個網速強迫癥,閑著沒事就喜歡研究光貓、路由器那一套,還希望在任何地方只要有網就能控制家里的設備。可惜先森的電信光貓是大內網,雙層NAT,沒有ipv4公網IP,結果偶然先森發現家里設備都可以直連ipv6了,而且分配到設備的ipv6地址還是公網的,先森就想著使用ipv6來突破網絡限制。結果,運營商為了保證安全,默認是限制了ipv6入訪的。由于家里寬帶不是先森辦理的,先森不太方便直接將光貓改為橋接的模式,所幸是先森拿到了光貓超管密碼,還可以通過shell的方式去操作iptables調整入訪策略。但光貓的iptables策略特別多,先森也得為安全考慮,不能直接全放通,所以得進行測試。結果問題來了,光貓的shell中沒有tcpdump的命令,沒法抓包,讓先森調試的心態爆炸,當時各種搜索都沒有找到光貓抓包的方法。由于ipv6的支持在先森身邊依舊不是那么普遍,像先森公司的商纖就沒有分配ipv6(不知道是不是公司IT把ipv6分配給關了),騰訊云CDN回源也不支持ipv6源站,所以當時先森一條條iptables策略調試的差不多之后,也就擱置了。但是沒法運行tcpdump抓包這個事一直讓先森如鯁在喉,然后最近突然知道了“交叉編譯”這么一個玩意兒,讓先森沉寂的心死灰復燃。交叉編譯:交叉編譯是在一個平臺上生成另一個平臺上的可執行代碼。如在x86平臺上編譯ARM平臺上運行的可執行代碼。先森在折騰的過程中遇到很多坑,在這里記錄一下。配置情況光貓:華為HS8145V,已經開啟telnet;交叉編譯主機:CentOS 7.9 x86_64,其實應該用Ubuntu來交叉編譯更方便,但是先森對這系統不熟。交叉編譯器的尋找歷程確認平臺在網上搜交叉編譯tcpdump的教程,一開始根本沒注意到編譯器,然后直接上手編譯,這就跟平時正常編譯一樣,編譯出來的是gcc編譯的,根本不是交叉編譯的。網上教程說要確認目標機是arm-linux還是mips-linux什么的,先森看光貓通過telnet登錄的時候有什么BusyBox、Dopra Linux,搜了一圈也沒能明確搜出來華為光貓的系統屬于什么,只是搜到有說華為光貓使用的是海思芯片,屬于arm架構的,最后是`uname -m`確認到華為這個是arm平臺。選擇arm-linux-gcc確認了光貓HS8145V是arm后,目標就很明確了,下載一下交叉編譯器,然后開整。但先森萬萬沒想到,arm-linux-gcc的下載鏈接那么難找,好不容易找到了,結果又發現arm-linux-gcc有很多版本,還要根據光貓arm的情況來選。arm-linux-gcc的不同版本那么光貓是什么情況呢,可以在命令行進行查看:WAP(Dopra Linux) # uname -aLinux EchoLife_WAP 3.10.53-HULK2 #1 SMP Fri Oct 20 01:08:58 CST 2017 armv7l GNU/Linux或者直接WAP(Dopra Linux) # uname -marmv7l實際在搜交叉編譯的教程時,要不就是單純的arm-linux-gcc,不然就是gcc-arm-linux-gnueabi和gcc-arm-linux-gnueabihf,所以就搜armv7l屬于哪種。百度了半天,好像都說armV7屬于armhf,想來armv7l應該也是,但實測不行,還得是armel。具體可以了解一下:arm-linux-gnueabi-gcc 和 arm-linux-gnueabihf-gcc:兩個交叉編譯器分別適用于 armel 和 armhf 兩個不同的架構,armel 和 armhf 這兩種架構在對待浮點運算采取了不同的策略(有 fpu 的 arm 才能支持這兩種浮點運算策略)。其實這兩個交叉編譯器只不過是 gcc 的選項 -mfloat-abi 的默認值不同。gcc 的選項 -mfloat-abi 有三種值 soft、softfp、hard(其中后兩者都要求arm 里有 fpu 浮點運算單元,soft 與后兩者是兼容的,但 softfp 和 hard 兩種模式互不兼容):soft: 不用fpu進行浮點計算,即使有fpu浮點運算單元也不用,而是使用軟件模式。softfp: armel架構(對應的編譯器為 arm-linux-gnueabi-gcc )采用的默認值,用fpu計算,但是傳參數用普通寄存器傳,這樣中斷的時候,只需要保存普通寄存器,中斷負荷小,但是參數需要轉換成浮點的再計算。hard: armhf架構(對應的編譯器 arm-linux-gnueabihf-gcc )采用的默認值,用fpu計算,傳參數也用fpu中的浮點寄存器傳,省去了轉換,性能最好,但是中斷負荷高。下載arm-linux-gcc由于先森arm-linux-gcc的下載地址時比較痛苦,有點難找,所以顯示把各種版本的鏈接在這里列一下。下載單純的arm-linux-gcc,版本較老,4.4.3貌似是2010年發布的了資源地址:http://www.friendlyelec.com.cn/download.asp在頁面中可以找到下載地址:http://112.124.9.243/arm9net/mini2440/linux/arm-linux-gcc-4.4.3-20100728.tar.gz下載arm-linux-gnueabi或arm-linux-gnueabihf,資源下載列表頁是先選gcc版本,再選編譯器架構,最后還要選架構運行平臺,這里先森選的是最新版本latest-7中的arm-linux-gnueabi的64位系統版本。由于這個頁面加載較慢或者未free無法打開,所以先森把兩個版本的下載地址都貼出來:資源列表頁:http://releases.linaro.org/components/toolchain/binaries/armel架構:http://124.156.146.205/gcc-linaro-7.5.0-2019.12-x86_64_arm-linux-gnueabihf.tar.xzarmhf架構:http://124.156.146.205/gcc-linaro-7.5.0-2019.12-x86_64_arm-linux-gnueabi.tar.xz配置arm-linux-gcc# 下載后解壓tar -xJvf gcc-linaro-7.5.0-2019.12-x86_64_arm-linux-gnueabi.tar.xz# 可選,先森是將其移動重命名了一下mv gcc-linaro-7.5.0-2019.12-x86_64_arm-linux-gnueabi /usr/local/arm# 可選,但建議操作cd /usr/local/arm/binln -s arm-linux-gnueabi-gcc arm-linux-gcc建議增加環境變量,不然編譯的時候./configure的參數需要加上'CC=/usr/local/arm/bin'echo 'export PATH=$PATH:/usr/local/arm/bin' >> /etc/profilesource /etc/profile添加環境變量后,需要執行`arm-linux-gcc -v`測試一下arm-linux-gcc是否存在問題,可能會遇到下面的問題:bin/.arm-none-linux-gnueabi-gcc: /lib/ld-linux.so.2: bad ELF interpreter: No such file or directory# 解決方法:yum install -y ld-linux.so.2到這里終于把arm-linux-gcc部分弄完了,下面進入編譯環節。交叉編譯libpcap和tcpdump由于tcpdump需要依賴libpcap,所以需要下載這個包,分別編譯,先森下載的最新版本:https://www.tcpdump.org/release/tcpdump-4.99.1.tar.gzhttps://www.tcpdump.org/release/libpcap-1.10.1.tar.gz交叉編譯libpcap前面準備工作做好了,libpcap還是很好編譯的。下載解壓后,進入libpcap目錄中:./configure --prefix=/tmp/armroot --host=arm-linux --target=arm-linux --with-pcap=linuxmakemake install# –prefix指定目標文件生成路徑(makefile里面的target存放路徑);# –host、–target都寫成目標平臺即可,例如:arm-liux或mips-linux,光貓是arm的,所以寫arm-linux# --with-pcap將告訴編譯器我們正在編譯哪種數據包捕獲類型# 如果前面沒有加arm-linux-gcc的環境變量,那么需要加上CC='/usr/local/arm/bin'編譯鏈路徑編譯時遇到的問題:# 問題1:configure: error: Neither flex nor lex was found.# 解決:yum install -y flex bison# 問題2:/usr/local/arm/bin/../libexec/gcc/arm-none-linux-gnueabi/4.4.3/cc1: error while loading shared libraries: libstdc++.so.6: cannot open shared object file: No such file or directory# 解決:貌似和系統是64位,gcc是32位有關,安裝32位的庫即可yum install -y libstdc++.i686# 問題3:/usr/local/arm/bin/../lib/gcc/arm-none-linux-gnueabi/4.4.3/../../../../arm-none-linux-gnueabi/bin/as: error while loading shared libraries: libz.so.1: cannot open shared object file: No such file or directory# 解決:yum -y install zlib.i686交叉編譯tcpdump實際測試,tcpdump的交叉編譯,必須是編譯靜態鏈接,編譯器默認是動態鏈接庫。由于光貓的根路徑是只讀的,而lib庫就在系統路徑中,無法在光貓添加確實的動態鏈接庫文件,所以只能選擇靜態交叉編譯這條路了。解壓tcpdump包后,進入目錄進行操作:# 指定靜態交叉編譯export CFLAGS=-staticexport CPPFLAGS=-staticexport LDFLAGS=-staticexport ac_cv_linux_vers=3./configure --prefix=/tmp/armroot --host=arm-linux --target=arm-linuxmakemake install# 編譯好的文件就是當前目錄下的tcpdump文件,也可以去--prefix執行的目錄的bin或sbin目錄找到tcpdump編譯tcpdump時遇到的問題:# 問題1:configure: error: cannot determine linux version when cross-compiling# 解決辦法:我們需要找出我們的 Ubuntu(或 Linux)操作系統內核正在運行的主要版本。執行 uname -a 命令。# 注意:您的輸出可能會有所不同,但請查找類似于版本號的內容。下面,先森的主機是 3.10.0-1160.45.1.el7.x86_64,我們抓住第一個“3”。uname -aLinux VM-0-4-centos 3.10.0-1160.45.1.el7.x86_64 #1 SMP Wed Oct 13 17:20:51 UTC 2021 x86_64 x86_64 x86_64 GNU/Linux# 然后將ac_cv_linux_vers 變量設置為上一個命令中發布的內核版本的主要編號,再嘗試編譯export ac_cv_linux_vers=3# 問題2:/mnt/jffs2/tcpdump: can't load library 'libc.so.6'# 解決:缺的動態鏈接庫又沒法塞進光貓的系統,所以需要靜態交叉編譯# 問題3:靜態編譯會遇到此類警告tcpdump.c:(.text+0x5a6): warning: Using 'initgroups' in statically linked applications requires at runtime the shared libraries from the glibc version used for linkin# 解決:正常現象,只是警告,不影響使用建議操作剝離符號信息,使二進制文件更小,這些符號僅在調試應用程序時有用,而光貓的存儲容量比較小。[root@VM-0-4-centos bin]# ll -htotal 14M-rwxr-xr-x 1 root root 1.9K Apr 2 16:32 pcap-config-rwxr-xr-x 1 root root 6.9M Apr 2 16:33 tcpdump-rwxr-xr-x 1 root root 6.9M Apr 2 16:33 tcpdump.4.99.1[root@VM-0-4-centos bin]# arm-linux-gnueabi-strip tcpdump[root@VM-0-4-centos bin]# ll -htotal 8.4M-rwxr-xr-x 1 root root 1.9K Apr 2 16:32 pcap-config-rwxr-xr-x 1 root root 1.5M Apr 2 16:34 tcpdump-rwxr-xr-x 1 root root 6.9M Apr 2 16:33 tcpdump.4.99.1拿到光貓上去運行折騰了這么多,最終能在光貓上運行才是第一目標。先森是直接把tcpdump放到服務器的web目錄中,然后光貓直接wget下載到光貓中的。先森在測試交叉編譯的運行中,遇到了很多錯誤,總結下來是以下4種:# 第一種報錯WAP(Dopra Linux) # ./tcpdump.Ullegal Illegal instruction# 第二種報錯WAP(Dopra Linux) # ./tcpdump.libc /mnt/jffs2/tcpdump.libc: can't load library 'libc.so.6'# 第三種報錯WAP(Dopra Linux) # ./tcpdump.0\:08 /mnt/jffs2/tcpdump.0:08: can't resolve symbol '__libc_start_main'# 第四種報錯WAP(Dopra Linux) # ./android-tcpdump android-tcpdump: eth0: You don't have permission to capture on that device(socket: Operation not permitted)事實上,除了第四種,前三種都是編譯有問題的版本,第四種只是提醒沒有權限執行。沒有權限的情況,經過一番搜索,先森找到了再次提權的方法(本來以為shell提權已經是終點了),二次提權只需要su切到root,密碼:admin,可以通過whoami查看當前角色。二次提權后執行成功寫在最后本來先森是想在文章最后把自己編譯好的文件分享出來的,結果在完善本文的時候搜到了一篇Android官方寫的tcpdump靜態交叉編譯的文檔,其中有詳細的靜態編譯步驟,也有官方編譯好的文件下載地址。先森試了一下,直接下載Android官方編譯的tcpdump也是能夠在光貓運行的,如果先森一開始就搜到了這邊文檔或資源。。。。文檔地址:https://www.androidtcpdump.com/android-tcpdump/compile直接下載:https://www.androidtcpdump.com/android-tcpdump/downloads

川公網安備 51011202000104號