标签:光猫
脚本编程, 经验杂笔使用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