跳到主要内容

HS8145C5/V5 开启Telnet获取超管权限

·1064 字·5 分钟

文章转载自:https://www.crsay.com/blog/network/hs8145c5-v5-telnet-telecomadmin.html

本文主要解决的问题是

  1. 开通Telnet
  2. 获取超管权限
  3. 运营商与华为操作界面互换
  4. 更改MAC/SN/EPON/GPON
  5. 激活Lxc容器内的OpenWRT
  6. 其他

备份是个好习惯,事先务必记录一些资料

  1. 光猫的LOID
  2. PPP/ITV/TR069的VLAN ID,
  3. MAC地址和设备SN
  4. 宽带账号与密码

需要准备的工具:

1.ONT维修使能工具(用于开启路由器Telnet) 2.华为配置加解密工具(密文解密-用$2解密) 3.电脑安装有Telnet或者直接下载一个telnet.exe 也可

一、开启Telnet #

  1. 光猫拔除所有线缆,然后LAN1口插网线直接与电脑连接,通电
  2. 电脑上ipv4地址设置为192.168.1.x(小于255且不为1)
  3. 电脑上打开ONT维修使能工具,点V5使能(对应天翼网关的版本),选择连接LAN1口的网卡,按“启动”按钮,等待使能成功(直到当前成功总数为1),此时右侧设备列表会显示绿色的success,光猫上所有指示灯常亮,不用管它,点击停止,拔线重启。

HW_V5_ENABLE_TELNET

  1. 重启完毕后电脑上
telnet 192.168.1.1
root #用户名
adminHW #密码
su #提权,此时只能使用华为内置的定制命令,输入?显示所有可用的命令。
shell #进入shell
ls #能列出文件即表示shell补全成功。

此时shell用户其实是srv_ssmp,可以再输入一次su(密码:admin)提升为root。

二、获取超管权限 #

获取超管权限有三种方式

  1. 提升useradmin为超级权限用户
  2. 查询超管用户telecomadmin密码
  3. 增加一个超管用户

先Telnet进去

telnet 192.168.1.1
root
adminHW
su
shell

cd /mnt/jffs2/ #进入/mnt/jffs2目录
cp -f hw_ctree.xml hw_ctree.xml.bak #备份是个好习惯
cp -f hw_ctree.xml mycfg.xml.gz #拷贝一份出来
aescrypt2 1 mycfg.xml.gz tem #1为解密 0为加密,tem是key,加密也用这个
gzip -d mycfg.xml.gz #解压

到这里为止我们得到了一个解密后的mycfg.xml文件

看看其中用户设置部分

<X_HW_WebUserInfo NumberOfInstances="2"> 
<X_HW_WebUserInfoInstance InstanceID="1" ModifyPasswordFlag="0" UserName="useradmin" Password="$2yyyyyyyyyyyyyyyyyyy" UserLevel="1" Enable="1" Alias="cpe-1" Salt="c3d06c58fc5ad62c23979eff" PassMode="3"/>
<X_HW_WebUserInfoInstance InstanceID="2" ModifyPasswordFlag="1" UserName="telecomadmin" Password="$2;xxxxxxxxxxxxxxxxxx$" UserLevel="0" Enable="1" Alias="cpe-2" PassMode="3" Salt="50181e70bec28dd7aaa6f4f5"/>
</X_HW_WebUserInfo>

----------------------------------------

NumberOfInstances=2 用户总数为2
InstanceID="1" 用户序号
UserLevel="1" 1为普通用户 0为超级用户
Enable="1" 1启用 0禁用
Alias="cpe-1" 别名,不重要
Salt="c3d06c58fc5ad62c23979eff" 盐,加密用的随机数
PassMode="3" 加密模式 ,0表示明文不加密

搞懂这段代码的含义就可以修改了,根据自己需要选择下面三个操作中的任意一个或几个

1、提升useradmin为超级权限 把useradmin这一行的UserLevel=”1″改为UserLevel=”0″即可

2、查询超管telecomadmin的密码 telecomadmin这一行内$与$之间的xxxxxxxxxxxxxx$就是超管密码,用华为解密工具的密文解密里的$2解密即可

grep WebUserInfoInstance mycfg.xml #提取包含有超管密码的项password字段

另:其实获取超管密码还有另一个相对简单的办法

telnet 192.168.1.1
root
adminHW
display current-configuration grep telecomadmin

屏幕上会直接打印出含有telecomadmin账户密码的行,解密即可

3.增加一个超管用户

修改
<X_HW_WebUserInfo NumberOfInstances="2">
<X_HW_WebUserInfo NumberOfInstances="3">

在telecomadmin这一行下面新增一行,表示新增一个超管admin密码为newpasswd
<X_HW_WebUserInfoInstance InstanceID="3" ModifyPasswordFlag="0" UserName="admin" Password="newpasswd" UserLevel="0" Enable="1" Alias="cpe-3" PassMode="0" />

完成修改以后

gzip mycfg.xml #压缩
aescrypt2 0 mycfg.xml.gz tem #加密
cp -f mycfg.xml.gz /mnt/jffs2/hw_ctree.xml #替换

reboot #重启生效

注意:以上三种方式中,useradmin提权最简便,但如果在前台WEB界面修改useradmin的密码,useradmin可能会变回普通用户,未验证!第二种方式不需要修改文件,但如果运营商下发数据的话应该会发生改变,我采用的是第三种方式新增一个超管用户。

三、运营商界面与华为操作界面互换 #

cp -f /mnt/jffs2/hw_ctree.xml /mnt/jffs2/hw_ctree_bak.xml   (备份运营商hw_ctree文件)
cp -f /mnt/jffs2/hw_boardinfo /mnt/jffs2/hw_boardinfo_bak  ( 备份运营商hw_boardinfo文件)


cp -f /etc/wap/hw_default_ctree.xml /mnt/jffs2/hw_ctree.xml  ( 拷贝华为原厂hw_ctree文件)

sed -i 's/^.*obj.id = "0x0000001a" ; obj.value =.*$/obj.id = "0x0000001a" ; obj.value = "COMMON";/' /mnt/jffs2/hw_boardinfo
sed -i 's/^.*obj.id = "0x0000001b" ; obj.value =.*$/obj.id = "0x0000001b" ; obj.value = "COMMON";/' /mnt/jffs2/hw_boardinfo
sed -i 's/^.*obj.id = "0x00000031" ; obj.value =.*$/obj.id = "0x00000031" ; obj.value = "NOCHOOSE";/' /mnt/jffs2/hw_boardinfo

reboot   (重新启动)

1a, 1b, 31这三行sed替换的命令 用vi直接编辑hw_boardinfo其实更加方便。

注意:因为替换了华为原厂的ctree文件,此时连接telnet的话,需要把电脑的IP地址修改为192.168.100.0/24地址段的,连接192.168.100.1 ,WEB登陆的密码则是telecomadmin: admintelecom,登录进去以后恢复设置就可以以192.168.1.1来连接了。

恢复电信界面的话反向操作即可,要把上面那三行替换为COMMONNOCHOOSE的项再换回去 以湖北电信为例

telnet 192.168.100.1

root
admin
wap>su
wap>shell

cp -f /mnt/jffs2/hw_ctree_bak.xml /mnt/jffs2/hw_ctree.xml
cp -f /mnt/jffs2/hw_boardinfo_bak /mnt/jffs2/hw_boardinfo

sed -i 's/^.*obj.id = "0x0000001a" ; obj.value =.*$/obj.id = "0x0000001a" ; obj.value = "E8C";/' /mnt/jffs2/hw_boardinfo
sed -i 's/^.*obj.id = "0x0000001b" ; obj.value =.*$/obj.id = "0x0000001b" ; obj.value = "HUBCT";/' /mnt/jffs2/hw_boardinfo
sed -i 's/^.*obj.id = "0x00000031" ; obj.value =.*$/obj.id = "0x00000031" ; obj.value = "CHOOSE_XINAN";/' /mnt/jffs2/hw_boardinfo
reboot  

如果要永久启用华为界面,会清除运营商的定制信息,那可就再也回不去运营商界面了,慎用!

restorehwmode.sh   
reboot

替换为华为界面的话会多出来很多设置,但对家庭用户而言大部分没什么用,比较有价值的是可以设定dhcp静态绑定和删除tr069,但是无法开放usb的匿名共享。

说到这个tr069的话,在运营商界面里是没法删除和禁用的,在华为的界面里倒是可以直接操作,但是telnet显然更方便一些

telnet 192.168.1.1 
root
adminHW
su

display waninfo interface wan1 #tr069连接

ip interface config interface wan1 status Disable #禁用tr069 Enable启用

四、切换EPON/GPON和修改MAC和SN #

MAC和SN的修改较为简单,直接替换相应字段即可。

切换epon/gpon或改双模的话风险很高,容易变砖!
telnet 192.168.1.1 #hw:100.1
root 
adminHW #hw:admin
su
shell
cd /mnt/jffs2
vi hw_boardinfo

obj.id = "0x00000001" ; obj.value = "4"; 可以修改为:1、GPON 2、EPON 4、双模 
obj.id = "0x00000002" ; obj.value = "485754444AB7AB9A";光猫标签上的 PON NO 序号 可以修改!
obj.id = "0x00000008" ; obj.value = "2150083444AAA6000999";光猫标签上的 PROD ID 序号 可以修改
obj.value = "F1:51:81:81:81:C0"; MAC地址(12位),可以改成你需要的MAC地址!
obj.id = "0x0000000b" ; obj.value = "F1:51:81:81:81:C8";从这一行开始,MAC地址只能修改前11位,最后一位不能修改!
obj.id = "0x00000022" ; obj.value = "F1:51:81:81:81:C9"; 最后一位不能修改!
obj.id = "0x00000023" ; obj.value = "F1:51:81:81:81:CA";最后一位不能修改!
obj.id = "0x00000024" ; obj.value = "F1:51:81:81:81:CB";最后一位不能修改!
obj.id = "0x0000002d" ; obj.value = "F1:51:81:81:81:CC"; 最后一位不能修改!
obj.id = "0x0000002e" ; obj.value = "F1:51:81:81:81:CD";最后一位不能修改!
obj.id = "0x0000002f" ; obj.value = "F1:51:81:81:81:CE";最后一位不能修改!
obj.id = "0x00000030" ; obj.value = "F1:51:81:81:81:CF";最后一位不能修改!
obj.id = "0x0000000c" ; obj.value = "F1:51:81:81:81:C1";最后一位不能修改!
obj.id = "0x0000000d" ; obj.value = "F1:51:81:81:81:C2";最后一位不能修改!
obj.id = "0x0000000e" ; obj.value = "F1:51:81:81:81:C3";最后一位不能修改!
obj.id = "0x0000000f" ; obj.value = "F1:51:81:81:81:C4";最后一位不能修改!
obj.id = "0x00000010" ; obj.value = "F1:51:81:81:81:C5";最后一位不能修改!
obj.id = "0x00000011" ; obj.value = "F1:51:81:81:81:C6";最后一位不能修改!
obj.id = "0x00000012" ; obj.value = "F1:51:81:81:81:C7";最后一位不能修改!
obj.id = "0x00000013" ; obj.value = "F1:51:81:81:81:C0";最后一位不能修改!
obj.id = "0x00000025"; obj.value = "F1:51:81:81:81:C0";这一行的MAC地址要修改为12位!

修改完毕保存退出,重启后生效。

改单双模风险极高,务必慎重!!!

hw_boardinfo中每个obj对应的字段意义可以参考一下

01.
02.\#define HW_DM_PD_PON_MODE_OBJ_ID      (0x00000001)  /* 上行口模式      */
03.\#define HW_DM_PD_SN_OBJ_ID          (0x00000002)  /* PON SN        */
04.\#define HW_DM_PD_SN_PASSWORD_OBJ_ID    (0x00000003)  /* GPON Password    */
05.\#define HW_DM_PD_SN_HEX_PASSWORD_OBJ_ID  (0x00000004)  /* GPON Password HEX */
06.\#define HW_DM_PD_EPON_KEY_OBJ_ID      (0x00000005)  /* EPON Key       */
07.\#define HW_DM_PD_EPON_PWD_OBJ_ID      (0x00000006)  /* EPON pwd       */
08.\#define HW_DM_PD_BOARD_ITEM_OBJ_ID     (0x00000007)  /* 单板条码       */
09.\#define HW_DM_PD_MACHINE_ITEM_OBJ_ID    (0x00000008)  /* 整机条码       */
10.\#define HW_DM_PD_OPTIC_ITEM_OBJ_ID     (0x00000009)  /* 光模块条码      */
11.\#define HW_DM_PD_LAN_MAC_OBJ_ID       (0x0000000a)  /* LAN MAC        */
12.\#define HW_DM_PD_WLAN_MAC_OBJ_ID      (0x0000000b)  /* WLAN MAC       */
13.\#define HW_DM_PD_WAN_1_MAC_OBJ_ID      (0x0000000c)  /* WAN1 MAC       */
14. \#define HW_DM_PD_WAN_2_MAC_OBJ_ID      (0x0000000d)  /* WAN2 MAC       */
15. \#define HW_DM_PD_WAN_3_MAC_OBJ_ID      (0x0000000e)  /* WAN3 MAC       */
16. \#define HW_DM_PD_WAN_4_MAC_OBJ_ID      (0x0000000f)  /* WAN4 MAC       */
17. \#define HW_DM_PD_WAN_5_MAC_OBJ_ID      (0x00000010)  /* WAN5 MAC       */
18. \#define HW_DM_PD_WAN_6_MAC_OBJ_ID      (0x00000011)  /* WAN6 MAC       */
19. \#define HW_DM_PD_WAN_7_MAC_OBJ_ID      (0x00000012)  /* WAN7 MAC       */
20. \#define HW_DM_PD_WAN_8_MAC_OBJ_ID      (0x00000013)  /* WAN8 MAC       */
21. \#define HW_DM_PD_LOID_OBJ_ID         (0x00000016)  /* GPON/EPON LOID   */
22. \#define HW_DM_PD_LOID_PASSWORD_OBJ_ID   (0x00000017)  /* GPON/EPON LOID Password */
23. \#define HW_DM_PD_CHIP_INFO_OBJ_ID      (0x00000018)  /* 非关键芯片信息   */
24. \#define HW_DM_PD_E8C_SN_OBJ_ID        (0x00000019)  /* 中国电信SN      */
25. \#define HW_DM_PD_BIN_WORD_OBJ_ID      (0x0000001a)  /* 程序定制特征字   */
26. \#define HW_DM_PD_CFG_WORD_OBJ_ID      (0x0000001b)  /* 配置定制特征字   */
27. \#define HW_DM_PD_OPTIC_MODE_CAP_OBJ_ID  (0x0000001c)  /* 光模块能力      */
28. \#define HW_DM_PD_OPTIC_CLASS_OBJ_ID    (0x0000001d)  /* 光模块CLASS     */
29. \#define HW_DM_PD_OPTIC_MONITOR_CAP_OBJ_ID (0x0000001e)  /* 光模块监控能力   */
30. \#define HW_DM_PD_OPTIC_WDM_CAP_OBJ_ID   (0x0000001f)  /* 光模块是否支持WDM */
31. \#define HW_DM_PD_PROVISION_CODE_OBJ_ID  (0x00000020)  /* PROVISION CODE   */
32. \#define HW_DM_PD_PTC_FLAG_OBJ_ID      (0x00000021)  /* PTC FLAG       */

输入Loid注册光猫卡在40%,ITMS注册不成功的话也可修改hw_boardinfo

<X_HW_UserInfo UserName="" UserId="" Status="99" Limit="10" Times="0" Result="99" X_HW_InformStatus="0" X_HW_AcsCnnctSatus="0" ForceSupport="1" SameWithPonInfo="1" X_HW_RegisterMode="0"/>
修改为:
<X_HW_UserInfo UserName="" UserId="" Status="0" Limit="10" Times="0" Result="1" X_HW_InformStatus="0" X_HW_AcsCnnctSatus="0" ForceSupport="1" SameWithPonInfo="1" X_HW_RegisterMode="0"/>

五、激活OpenWRT #

http://192.168.1.1:8080/访问的是华为的WEB,而http://192.168.1.1/访问的实际上是光猫内置的openwrt内的web,这个openwrt运行在一个lxc容器内,可以直接ssh连接到这个容器,甚至替换掉里面的除网络接口之外的功能,这样就等于有了一个oPenwrt系统了,操作稍复杂,方法详见:https://www.right.com.cn/forum/thread-352805-1-1.html

cat /etc/banner
cat /etc/openwrt_release
cat /proc/cpuinfo

参照cat出来的信息: 内置的openwrt是CHAOS CALMER 2.1即15.05.x版本。 软件源:http://archive.openwrt.org/chaos_calmer/15.05.1/omap/generic/ OPKG源:

dest root /
dest ram /tmp
lists_dir ext /var/opkg-lists
option overlay_root /overlay
#option check_signature 1
arch all 1
arch noarch 1
arch omap 10
arch sd5117 12

因为需要用omap架构的sshpass,网上到处找不到所以只能自己编译。编译过程很简单。

cd ~
#下载OPENWRT SDK
wget https://downloads.openwrt.org/chaos_calmer/15.05/mvebu/generic/OpenWrt-SDK-15.05-mvebu_gcc-4.8-linaro_uClibc-0.9.33.2_eabi.Linux-x86_64.tar.bz2
#解压
tar -xf OpenWrt-SDK-15.05-mvebu_gcc-4.8-linaro_uClibc-0.9.33.2_eabi.Linux-x86_64.tar.bz2
#目录命名
move OpenWrt-SDK-15.05-mvebu_gcc-4.8-linaro_uClibc-0.9.33.2_eabi.Linux-x86_64 openwrtsdk

环境搭建好,接下来准备编译

#创建源码目录
mkdir -p ~/openwrtsdk/package/sshpass

#下载源码,如果wget失败可以手动下载sshpass的源码
wget http://sourceforge.net/projects/sshpass/files/sshpass/1.06/sshpass-1.06.tar.gz

tar zxvf sshpass-1.06.tar.gz
mv sshpass-1.06 ~/openwrtsdk/package/sshpass/src

cd ~/openwrtsdk/package/sshpass

#创建Makefile

vi Makefile


include $(TOPDIR)/rules.mk
 
# Name and release number of this package
PKG_NAME:=sshpass
PKG_RELEASE:=1.06
 
PKG_BUILD_DIR := $(BUILD_DIR)/$(PKG_NAME)
 
include $(INCLUDE_DIR)/package.mk
 
define Package/sshpass
  SECTION:=utils
  CATEGORY:=Utilities
  TITLE:=sshpass
endef
 
define Package/sshpass/description
  Sshpass is a tool for non-interactivly performing password authentication with SSH's
endef
# Specify what needs to be done to prepare for building the package.
define Build/Prepare
	mkdir -p $(PKG_BUILD_DIR)
	$(CP) ./src/* $(PKG_BUILD_DIR)/
endef
TARGET_LDFLAGS+= -L$(TOOLCHAIN_DIR)/usr/lib -L$(TOOLCHAIN_DIR)/lib -Wl,-rpath=$(TOOLCHAIN_DIR)/lib
# Specify where and how to install the program.
define Package/sshpass/install
	$(INSTALL_DIR) $(1)/bin
	$(INSTALL_BIN) $(PKG_BUILD_DIR)/sshpass $(1)/bin/
endef
# This line executes the necessary commands to compile our program.
$(eval $(call BuildPackage,sshpass))


#开始编译
make V=99

#如果使用的是多核心的 CPU,可以选择加上 -j 参数,例如8核:
make -j 8 V=99

#因为仅编译IPK,速度飞快

#编译成功以后,ipk 包在 bin/omap/packages/base/ 目录中(注意 omap 是对应 CPU 的名子)
ls ~/openwrtsdk/bin/omap/packages/base/

如果有对应的 ipk 文件的话,就说明成功了。

sshpass编译成功以后赶紧加入crond

crontab -e
分 时 日 月 周 sshpass -p password ssh user@host command

结果发现没有执行!

ps | grep cron

发现crond服务没有启动

手动启动crond后sshpass正常运行 /etc/rc.d/init.d/crond start

于是重新telnet进去一路进入shell

vi /opt/upt/apps/apps/etc/rc.local

添加一行

/usr/sbin/crond -f -c /etc/crontabs -l 5

至此终于大功告成。

六、其他 #

1、修改hw_ctree.xml的另一种方法

Telnet进去修改hw_ctree.xml有时候操作不便,还可以通过导出配置,修改,再恢复的方法来修改。

  • 在http://192.168.1.1:8080/用超管登陆
  • 插一个U盘到光猫的USB口,备份光猫配置文件到U盘,得到一个“/usb_disc/e8_config_backup:ctce8_HS8145C5.cfg”文件。
  • 用华为加解密工具里的“CFG解密”来给这个CFG文件解密。
  • 文本编辑器打开解密后的“ctce8_HS8145C5.cfg”会发现这实际上就是hw_ctree.xml。
  • 用文本编辑器修改然后cfg加密再web恢复配置即可。

以获取宽带账号密码为例

搜索宽带账号(也可在web页“网络”选项卡查看),账号后面是“Password=$-=加密的宽带密码=-$”,将“$”开头与结尾的全部内容复制到华为解密工具的“密文解密”用“$2解密”即可。

img

再比如定义自动重启

<X_HW_AutoReboot Enable="1" RunningDays="3" TrafficLimit="1000" TrafficKeepTime="10" RebootStartTime="120" RebootEndTime="330" DelayMode="none"/>

2、DHCP STATIC和SAMBA共存 在运营商界面无法给dhcp server设定静态地址绑定,在华为界面则无法启动USB设备的SMB共享。为了让两者都可以使用,可以先进华为界面设置DHCP,将IP与MAC绑定(指定的地址需要包含在DHCP SPOOL内,否则不会生效),然后切换到运营商界面开放USB的网络共享即可。或者保持运营商界面,手动修改hw_ctree.xml,需要修改两处,一是LANHostConfigManagement部分的DHCPStaticAddressNumberOfEntries数量,二是DHCPStaticAddress部分,需要定义NumberOfInstances数量和具体的IP/MAC绑定。

3、关闭appmgr和easymesh等进程

进入openwrt

/etc/init.d # vi appmgr

#将函数start_service的内容全部注释
#!/bin/sh /etc/rc.common
# Copyright (C) 2013-2014 OpenWrt.org

START=15
USE_PROCD=1
PROG=/sbin/appmgr

start_service(){
#       procd_open_instance
#       procd_set_param command "$PROG"
#       procd_set_param respawn 3600 5 0
#       procd_close_instance
}

easymesh、vpnclient、cloudclt、dnsproxy和dsmonitor同样按照这个方法关掉,其他的几个插件不知道是什么作用,就先不处理了

到目前为止运行良好,系统load不及原来的一半,CPU波动极小。至于网上一些文章所说的禁用这些服务以后导致ipv6地址无法获取的情况我到没有遇到,反倒是提示了几次IPV6 MTU太大,进入后台修改IPV6的MTU为1280,问题解决。至于还有没有其他后遗症暂且不知。

4、SAMBA共享 SMB是比较吃性能的,华为界面无法开启SMB,只允许使用FTP。在运营商界面启用SAMBA,通过局域网读取或写入较大文件后,猫的内存会很快用完,free的几乎没有,会全部转换为cache。

最好还是设置一个cron每天早上清理一下

sync && echo 1 > /proc/sys/vm/drop_caches
sync && echo 2 > /proc/sys/vm/drop_caches
sync && echo 3 > /proc/sys/vm/drop_caches