首页
论坛
课程
招聘
[原创]联通光猫管理员密码分析,不安全的密码方案
2020-5-24 22:59 6595

[原创]联通光猫管理员密码分析,不安全的密码方案

2020-5-24 22:59
6595

联通光猫管理员密码分析,不安全的密码方案

联通光猫型号:HG220GS-U
软件版本:E00L3.03

 

运营商一直在做光猫防破解,对抗升级还是比较快的,所有的分析结论都和版本绑定的,因为运营商或者路由器的开发商看到后可能立马就改了。

 

我自己主要是要改为桥接,这个需求其实打联通的报修电话让局端改一下应该就能搞定。不过几年之前看过一两个老版本的教程,也照葫芦画瓢破解成功了,但我手上的这个版本有点麻烦,现有的教程基本都失效了。有点好奇,这次花点时间仔细看了一下,不过这次被某些人打击得比较厉害,说果然是IT狗云云,只知道和代码过不去。都云作者痴,谁解其中味!

 

这个光猫,先要用普通的user用户和印在光猫背面的密码登录进去,然后改链接为http://192.168.1.1/servmngr.html,在这个页面中把管理员帐号enable,telnet、ftp服务也enable了,注意只针对LAN一侧开放访问。telnet服务的默认用户名和密码都是admin。进入telnet后运行sh就是普通的shell界面。这些是在网上仔细搜能搜到的。

 

既然telnet、ftp权限都有了,那就把文件拿出来分析好了。最后要分析的是下面三个文件,关键函数是cgiAuthAdminPassword(),点到为止,有兴趣的可以自己看看。话说Ghidra对MIPS的反编译还是可以看的。新版的IDA 7.5虽然支持MIPS反编译,不过我没有。
/bin/httpd
/lib/public/libcms_util.so
/lib/public/libaes.so

 

cgiAuthAdminPassword

 

下面是根据光猫MAC地址计算CUAdmin这个用户的密码。EPON的猫需要用其base MAC,也就是“设备基本信息”那个页面中看到的MAC/SN的值,大写。可以看出这个计算很简单,就是用零补齐后AES加密。EPON类型的光猫,这个密码和area code也有关。GPON类型的光猫,则是用其serial number计算的,此处未体现。所以光猫的WEB端口千万不要针对WAN一侧开放,否则被探测出MAC地址的话,有可能随便被人访问。LAN侧如果是很多人能访问的光猫,也得小心。本质上光猫的这个管理员密码设定是不安全的,虽然是一机一码,然而却是确定的,重复一次:这个密码方案是不安全的!

 

所幸的是,管理员CUAdmin账户默认没开启,需要用一机一码的user帐号登录进去后才能开启。至于user帐号的密码,有待分析。

#include <stdio.h>
#include <atlstr.h>

#include <openssl/aes.h>
#pragma comment(lib, "libeay32.lib")

static const unsigned char encryptionKey[] = "JmpwfGjcfsjpnfJmpwfGjcfsjpnf0000";

void Encrypt(unsigned char *in, size_t inLen, unsigned char *out, size_t &outLen)
{
    AES_KEY aesContext;

    AES_set_encrypt_key(encryptionKey, 256, &aesContext);

    outLen = 0;
    for (size_t k = 0; k < inLen; k += AES_BLOCK_SIZE, outLen += AES_BLOCK_SIZE)
    {
        unsigned char padded[AES_BLOCK_SIZE] = {};
        memcpy(padded, &in[k], (k + AES_BLOCK_SIZE) < inLen ? AES_BLOCK_SIZE : inLen - k);
        AES_ecb_encrypt(padded, &out[k], &aesContext, AES_ENCRYPT);        
    }
}

int main(int argc, char** argv)
{
    static unsigned char mac[] = "112233445566";

    constexpr size_t insize = sizeof(mac) - 1;
    constexpr size_t remain = insize % AES_BLOCK_SIZE;
    constexpr size_t outsize = remain ? insize - remain + AES_BLOCK_SIZE : insize;

    unsigned char out[outsize] = {};

    size_t outlen = 0;
    Encrypt(mac, sizeof(mac) - 1, out, outlen);

    CString passwd;
    for (size_t k = 0; k < outlen; ++k)
    {
        CString t;
        t.Format(L"%02X", out[k]);
        passwd += t;
    }

    _tprintf(_T("password for CUAdmin: %s\n"), (LPCTSTR)passwd);
}

第五届安全开发者峰会(SDC 2021)10月23日上海召开!限时2.5折门票(含自助午餐1份)

最后于 2020-5-25 17:59 被blowfish编辑 ,原因:
收藏
点赞1
打赏
分享
最新回复 (8)
雪    币: 19
活跃值: 活跃值 (394)
能力值: ( LV7,RANK:110 )
在线值:
发帖
回帖
粉丝
猪会被杀掉 活跃值 1 2020-5-25 01:20
2
0
我顶版主大人,沙发。
雪    币: 1255
活跃值: 活跃值 (21)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
jackyspy 活跃值 1 2020-5-25 08:46
3
0
本质是越权漏洞啊,这也太随意了…话说密码为啥不随机出,非要搞固定算法个
雪    币: 3217
活跃值: 活跃值 (105)
能力值: (RANK:20 )
在线值:
发帖
回帖
粉丝
blowfish 活跃值 2020-5-25 10:04
4
0
jackyspy 本质是越权漏洞啊,这也太随意了…话说密码为啥不随机出,非要搞固定算法个

运营商或者说路由器开发商(烽火)以前是搞的硬编码密码,CUAdmin以前默认密码是CUAdmin,后来改成123qweasdzxc。还有内置的另外一个工程帐号。

普通帐号还能随便enable、disable管理员帐号,这安全模型就是一塌糊涂。

想想中国的千家万户装的是这种安全水准的光猫,多么可怕

最后于 2020-5-26 11:20 被blowfish编辑 ,原因:
雪    币: 6567
活跃值: 活跃值 (907)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
gamehack 活跃值 2020-5-25 12:03
5
0
历害了,插个眼,万一以后用到呢!
雪    币: 9536
活跃值: 活跃值 (1148)
能力值: ( LV12,RANK:340 )
在线值:
发帖
回帖
粉丝
bxc 活跃值 6 2020-5-25 14:55
6
0
好东西,收下了。
雪    币: 1002
活跃值: 活跃值 (57)
能力值: ( LV2,RANK:15 )
在线值:
发帖
回帖
粉丝
lynxtang 活跃值 2020-5-28 11:17
7
0
厉害厉害,现在很多光猫厂家的安全意识还是在逐步增强了。
雪    币: 270
活跃值: 活跃值 (70)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
至尊宝xh 活跃值 2021-9-2 17:39
8
0

我分析他的前端html页面,发现在html文件里面有var webObjArray = '<%ejGetObject(MDMOID_CU_FUNCTION_WEB)%>'.split('/');这种语句,这种应该是一般在jsp页面中的,实在想不到在html文件中也能这样嵌入?!

最后于 2021-9-2 17:40 被至尊宝xh编辑 ,原因:
雪    币: 270
活跃值: 活跃值 (70)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
至尊宝xh 活跃值 2021-9-2 17:41
9
0
而且我分析他的js代码,有的页面没有检测的代码,但是仍然提示我没有权限,还请大神指教!
游客
登录 | 注册 方可回帖
返回