£ 登录密码无法通过针对 Sonicwall SRA 的 Windows NPS Radius 身份验证

£ 登录密码无法通过针对 Sonicwall SRA 的 Windows NPS Radius 身份验证

我们有一台 Sonicwall SRA 服务器,配置为使用 RADIUS 向在 Windows Server 2012 R2 上运行的 Windows NPS 服务器验证用户身份。

一切正常,除非密码包含“£”字符。

根据RADIUS 规范在第 24 页的密码字段

包含 UTF-8 编码的 10646 个字符,字符串包含 8 位二进制数据

我发现了一个网站将英镑符号定义为

0xC2 0xA3 (c2a3)

我编写了一个相当丑陋的 perl 脚本,使用简单的 MD5 哈希和 XORing 实现短密码(<= 16 个八位字节)的 RADIUS 密码加密(我不是 perl 专家,所以我知道它并不漂亮!)

#! /usr/bin/perl -w
use 5.010;
use Digest::MD5 qw(md5 md5_hex md5_base64);
use MIME::Base64;
use Carp qw/croak/;
use List::Util qw/max/;

$secret = "verysecret";
$authenticator = '5354ff6a10cec708f2da74a8b268b98d';
$pwd = "££££££££";
$pwdhex = $pwd;

# Convert password to a Hex string
$pwdhex =~ s/(.)/sprintf("%02x",ord($1))/eg;

print "Password in HEX = " .$pwdhex . "\n";
print "Password in ASCII " .$pwd . "\n";

# Convert RA from Hex string into bytes
$authenticator =~ s/([a-fA-F0-9][a-fA-F0-9])/chr(hex($1))/eg;

# Concatenante the secret and authenticator then MD5 them
$md5input = $secret . $authenticator;
$md5 = md5($md5input);
$md5hex = $md5;
$md5hex =~ s/(.)/sprintf("%02x",ord($1))/eg;
print "Secret + RA (MD5)             " . $md5hex . "\n";

state $encryptedpassword = $md5 ^ $pwd;

$encryptedpassword =~ s/(.)/sprintf("%02x",ord($1))/eg;

print "Computed Encrypted Password = " . $encryptedpassword . "\n";

使用 RADIUS 流量的网络跟踪,我能够显示密码已使用 c2a3 对每个井号进行正确加密。

接下来我准备向微软提出一个问题,因为这看起来像是他们在 NPS 中的 Radius 服务器实现中的一个问题,但我想先在这里发布这个相当有趣的谜题,以防有人见过类似的东西。

相关内容