我试图弄清楚运行Busybox Linux的基于ARM的设备如何在配置文件中存储用户的哈希。基本上,系统允许您将整个配置备份到文件中。在此文件中,我可以看到默认帐户之一的哈希值-admin

如果将admin密码配置为test,则会在输出文件中得到此哈希值: />
3785a9c61b587f2ff0dd7132db844f14


由于是32个字符的哈希,我怀疑它是MD5。从测试中我知道,如果我将其他内置帐户之一配置为具有相同的密码,则哈希是不同的。因此,似乎无论采用哪种哈希算法,它都可能在哈希之前将usernamepassword连接在一起。

我尝试了很多组合,但我想我可能只需要尝试蛮力。知道我对usernamepassword的了解后,我想我可以进行自定义词典攻击或其他任何操作。

有什么建议吗?

评论

密码ist可能与用户名混为一谈,也可能与其他名称混为一谈。如果您连续几次将同一用户的密码设置为同一密码,那么它总是相同还是不同?

是的,对于给定的密码,特定用户的哈希值始终相同。系统之间也相同-您可以从一个设备中保存配置,然后将其上传到另一个设备。

最好的选择是找到正在生成此哈希的任何程序并将其重新存储。

@IgorSkochinsky不是BusyBox开源的吗?可能有问题的版本已修改,但仍然

@ user45891:我不认为BusyBox是生成这些配置文件的程序。

#1 楼

当我遇到类似的问题时,我花了一段时间写的一个Perl程序,并对其进行更改以匹配您的数据。这应该生成“ test:admin”的所有排列,该排列可以将任何字符用作分隔符,并包括所有缩写(以处理只占用用户名几个字节的情况)。

我从3785a9开始获得了大约50个结果,但没有3785a9c6。因此,这似乎可以排除用户名(一部分)与密码(可能带有分隔符)连接在一起并计算结果的MD5的情况。但是,当然,他们可能会使用MD4或其他会产生16个字节的东西。他们可能会先将密码与用户联系起来。他们可能会向后读取MD5。有很多可能性使查找算法更加困难。

如果您想使用我的perl程序尝试更多操作,就在这里。在Xeon E5的1个核心上花费了大约1个小时。有一些事情可以优化,但是我认为花30分钟使程序运行5分钟变得没有意义。

#!/usr/bin/perl

use Digest::MD5 qw(md5_hex);
use List::Util qw(shuffle);
use strict;
use warnings;

$|=1;

my @admintest=(split("", "admintest"), ":", chr(127));
# my @admintest=(split("", "abc"), ":", chr(127));

my $n=0;

permute("", @admintest);

sub permute {
        my $str=shift;
        my @letters=@_;
        my $str2;

        for (my $i=0; $i<=$#letters; $i++) {
                if ($letters[$i] eq chr(127)) {
                        tryseparatorsonstring($str);
                        return;
                }
                $str2=$str.$letters[$i];
                permute($str2, @letters[0..$i-1], @letters[$i+1..$#letters]);
        }
}
print "\n";

sub tryseparatorsonstring {
        my $str=shift;
        if ($str =~ /:/) {
                for (my $sep=0; $sep<128; $sep++) {
                        my $str2=$str;
                        $str2=~s/:/chr($sep)/ge;
                        trystring($str2, $sep);
                }
        } else {
                trystring($str, "");
        }
}

sub trystring {
        my $str=shift;
        my $sep=shift;
        my $pass=md5_hex($str);
        print "$n\t$str\t$sep\t$pass\n" if $pass =~ /^3785a9/;
        if (++$n%1_000_000==0) {
                printf "%dM\r", $n/1_000_000;
        }
        # print "$str\n";
}

exit 0;


评论


感谢那。我想这超出了列表中的几个选项。我确实设法对设备进行了root操作并可以访问二进制文件,我将尝试再次找到它并尝试signsrch。

– 59e12ca75b3d
2014年11月12日0:09



#2 楼

我建议您寻找一个哈希识别软件。您可以在Internet上找到一些免费的软件。例如:



HashTag(专用于密码哈希标识);

OnlineHashCrack哈希标识(支持250个哈希类型);

hash-identifier;

hashID;
...等等...

我用HashTag尝试了您的样本具有多种设置类型的MD5算法,但是您提供的签名更多,它将更加准确。

$> HashTag.py -sh 3785a9c61b587f2ff0dd7132db844f14

Hash: 3785a9c61b587f2ff0dd7132db844f14

[*] MD5 - Hashcat Mode 0
[*] NTLM - Hashcat Mode 1000
[*] MD4 - Hashcat Mode 900
[*] LM - Hashcat Mode 3000
[*] MD5(HMAC)
[*] MD4(HMAC)
[*] Haval-128(HMAC)
[*] RipeMD-128(HMAC)
[*] Tiger-128(HMAC)
[*] Snefru-128(HMAC)
[*] MD2(HMAC)
[*] MD5(ZipMonster)
[*] MD5(HMAC(Wordpress))
[*] Skein-256(128)
[*] Skein-512(128)
[*] md5($pass.$salt) - Hashcat Mode 10
[*] md5($pass.$salt.$pass)
[*] md5($pass.md5($pass))
[*] md5($salt.$pass) - Hashcat Mode 20
[*] md5($salt.$pass.$salt) - Hashcat Mode 3810
[*] md5($salt.$pass.$username)
[*] md5($salt.'-'.md5($pass))
[*] md5($salt.md5($pass)) - Hashcat Mode 3710
... [cut] ...


评论


+1指出有多少种不同的算法产生相同类型的哈希。

–贡特拉姆·布洛姆(Guntram Blohm)
2014年11月11日14:54

谢谢,我给它添加了更多的哈希值,它们都产生相同的结果。

– 59e12ca75b3d
2014年11月12日0:08

最好的方法是找到在系统中创建新密码条目的软件,然后稍作逆转(只关注用于创建这些哈希的方法)。而且,如果您可以创建新密码,那么它将是明文攻击(容易得多)。另一方面,您也可以尝试查找正在验证密码的软件(可能隐藏在PAM模块中)。

–恐怖
2014年11月12日7:43