福利发放鸡 发表于 2017-10-8 02:46:27

【教程】华为语音鉴权密码解密方法 不用telnet 不用shell 不用漏洞 不用算法

本帖最后由 福利发放鸡 于 2017-10-8 03:00 编辑

关于华为光猫语音鉴权密码这事儿不必多说。$1、$2开头的密文网上各种球解密。大家也是有各种法子:有拿着算法不公开的,有用DDNS+shell的,还有各种发帖、QQ群去球助的......本人能试的都试过了,要么得球人,要么得花钱。偶然看到一篇DDNS+shell破解法非常新颖,可是我的光猫的shell被阉割过了。而且shell折腾来折腾去很容易把光猫整出问题。从中受到启发,换了个思路,大获成功。现在发布原创的鉴权密码解密方法。所需的设备是一台原厂固件的华为光猫,运营商定制的还原后的也包括在内。以及一些电脑程序,会在后面详细说明。
注意,一定要全部读完以后再开始操作!因为下面的一些步骤可能需要花时间去准备。
首先,感谢 @浅唱那回忆 提供的启发。光猫所需具备的两个功能,分别是DDNS和配置文件备份还原。
然后,我们进入到光猫的DDNS设置界面。

域名、提供商主机、用户名、密码都随便填,其他的选项不用动。最后勾上上面的“使能DDNS”,然后点击下面的“应用”按钮。
再然后,我们把光猫的配置文件hw_ctree.xml下载下来。具体过程由于太简单,不再赘述。
下载后,打开编辑。用搜索功能搜索“AuthPassword”,会找到语音的加密的鉴权密码。

将其复制,替换到DDNS功能的“DDNSPassword”里面。

接着,保存配置文件。上传到光猫。具体过程由于太简单,不再赘述。光猫之后可能会重启。
第一部分结束。
第二部分,自己动手搭服务器。这也就是我让大家先读完再操作的原因了。
我们只需要一台http服务器即可。上面需要安装抓包软件,如Wireshark。
请准备好一台http服务器,并且安装好抓包软件,然后进入第三部分。不懂的朋友们,百度上一大把,请自行搜索“搭建http服务器"和”Wireshark抓包“的教程。至于为什么要做这些,请接着往下看。
第三部分,再回到光猫DDNS设置界面。

这时候,将服务提供商保持默认的"dyndns",服务提供商主机则填写搭建好的http服务器的域名或IP地址,服务端口填写搭建好的http服务器端口。点击“应用”。
在服务器上打开抓包软件进行抓包,我这里以Wireshark为演示。请打开"http"结果过滤器,不然马上就会被抓包结果刷屏。

耐心等一会儿,然后,一条惊喜的结果就出现了:

这是我们截获的光猫发送给DNS服务器的IP地址更新请求。到这儿,我这方法的实现原理大家可能就看明白了。我是希望通过伪造一个DYNDNS的更新服务器,使光猫将最新的IP地址,连同DYNDNS认证所需的用户名和密码一块儿发到我的假服务器上。有点儿像李逵和李鬼的故事。我的李鬼收到的一定是明文的用户名和密码,因为DYNDNS公司肯定不知道华为的私有算法,所以华为肯定要明文发送的(https的加密问题不需要考虑,因为我刚刚已经提到咱们走的是http)。而我的所谓DYNDNS账户的认证密码,早在第一部分就被我狸猫换太子了。这样一来,我自己的服务器收到的就是明文的语音鉴权密码!
哎哎哎,这位楼主,你先别急着高兴,你的URL请求里怎么没有用户名和密码呀?
别着急,IT精英来告诉你,DYNDNS的认证信息在请求的header里,不在URL里!
请选中那条关键请求("GET /nic/update?hostname=......"),打开Wireshark下方的那一部分,就像这样:

在"Authorization"的header中,"Credentials"就是您随便填写的那个用户名、和狸猫换太子过的语音鉴权密码了!Surprise 惊喜吧!
header里面的格式是"用户名:鉴权密码",如:在我的例子中,123是我随便填写的DDNS用户名,T5......是我的语音鉴权密码。
此处应该有掌声!
好了,回头看看所有的步骤,你会发现自建http服务器那步也许不是那么重要。因为我们只需要截获这个光猫发出的DDNS请求,并不需要真正有人去回应它。所以,只需要确保自己抓包用的电脑的所选端口畅通、能收到请求即可,并不一定真的需要建一个http服务器。但是在理解我的思路的过程中,“搭建”http服务器却是非常重要的一步。这也就是为什么我一开始就说,一定要全部读完。全部。
总结一下,这种方法一原创,二不需要telnet,三不需要shell,四不需要利用漏洞,五 零风险。
好了,现在可以自己开始动手了!再也不需要求人!再也不需要花额外的钱!再也不需要忍受那些拿着算法却偏不给你、偏不给你、偏不给你的小气鬼了!语音鉴权密码,就在你眼前!你,值得拥有!

lszjyj 发表于 2017-10-8 16:00:32

谢谢楼主分享!

leep4 发表于 2017-10-8 16:22:47

难者不会,会者不难。支持一下,没固话也不懂抓包的飘过

zbj 发表于 2017-10-8 17:11:34

太高明了,佩服。楼主简直可以开个假证公司。

fiyme 发表于 2017-10-8 21:34:13


谢谢楼主分享!

小恶魔兔兔 发表于 2017-10-8 22:35:28

谢谢楼主分享!

zbj 发表于 2017-10-10 01:44:08

今天晚上用我的hg8321测试了一下,这个方法失效。软件版本是V300R015C10SPC135。
因为在ddns密码不更新的时候,不向服务器发送密码。

以下是抓包中的部分代码:
function stDdns(domain,Enable,Provider,Username,Port,DomainName,HostName,SaltAddress)
{
    this.domain = domain;
    this.Enable = Enable;
    this.Provider = Provider;
    this.Username = Username;
    this.Password = '********************************';
    this.Port = Port;
    this.DomainName = DomainName;
    this.HostName = HostName;
    this.SaltAddress = SaltAddress;
}

var WanIPDdns = new Array(null);
var WanPPPDdns = new Array(new stDdns("InternetGatewayDevice.WANDevice.1.WANConnectionDevice.2.WANPPPConnection.1.X_HW_DDNSConfiguration.1","1","dtdns","zzz","80","www.xyz.mn","192.168.1.2",""),null);

。。。。。。。

with (getElement ("ConfigureDiv"))
    {
      SubmitForm.addParameter('x.DDNSCfgEnabled',getCheckVal('DDNSCfgEnabled'));
      SubmitForm.addParameter('x.DDNSProvider',getValue('DDNSProvider'));
      SubmitForm.addParameter('x.DDNSUsername',getValue('DDNSUsername'));
      if (getValue('DDNSPassword') != '********************************')
      {
            SubmitForm.addParameter('x.DDNSPassword',getValue('DDNSPassword'));
      }

yanzhao_sh 发表于 2017-10-11 08:37:21

谢谢楼主分享!

福利发放鸡 发表于 2017-10-11 12:23:20

zbj 发表于 2017-10-10 01:44
今天晚上用我的hg8321测试了一下,这个方法失效。软件版本是V300R015C10SPC135。
因为在ddns密码不更新的 ...
您好,我这种方法是不需要涉及任何代码类的东西的!
唯一可能让人误认为是代码的东西就是编辑配置文件XML。
您直接下载一个Wireshark,然后手动抓、手动查看结果。
WS的过滤器启用了以后结果不会乱的。

福利发放鸡 发表于 2017-10-11 12:24:30

zbj 发表于 2017-10-10 01:44
今天晚上用我的hg8321测试了一下,这个方法失效。软件版本是V300R015C10SPC135。
因为在ddns密码不更新的 ...
我觉得可能是您的理解有误。
您得想如何去触发DDNS更新呀!比如勾选DDNS的“使能”选项。
还有,我测试的时候用的是外网服务器,但是理论上内网服务器应该也是可以的。
哦对了,我的软件版本是V3R016C10S115。是2016版的固件,比您的版本还高,不大可能失效。

页: [1] 2 3 4
查看完整版本: 【教程】华为语音鉴权密码解密方法 不用telnet 不用shell 不用漏洞 不用算法