-2

我正在尝试将身份验证部分从impacket库中实现到 smbserver.py 中。

在某些情况下,我将第 2201 行的错误代码更改为 STATUS_LOGON_FAILURE,但我的 Windows 客户端在要求用户输入新凭据之前一直使用相同的凭据请求 10 次。当我提交 Windows 对话框时,凭据不会发送到脚本。

这是我的代码部分:

                if not authenticateMessage['user_name'] == "testUser":
                print "username not valid"
                errorCode = STATUS_LOGON_FAILURE
                respToken['NegResult'] = '\x02'
            else:
                print "logged in" + authenticateMessage['user_name']
                errorCode = STATUS_SUCCESS
                respToken['NegResult'] = '\x00'

有人在那里写了一个有效的身份验证部分吗?谢谢!

4

1 回答 1

2

您提供的链接不是图书馆的官方存储库。以后使用https://github.com/CoreSecurity/impacket

您指定的代码几乎是正确的,除了authenticateMessage中的user_name字段是 Unicode 编码的事实。您可以通过调用其dump()方法(authenticateMessage.dump() )来查看authenticateMessage结构的内容。

我已将您的代码替换为:

authenticateMessage.dump()
respToken = SPNEGO_NegTokenResp()
if authenticateMessage['user_name'].decode('utf-16le') == "testUser":
    errorCode = STATUS_SUCCESS
    respToken['NegResult'] = '\x00'
else:
    errorCode = STATUS_LOGON_FAILURE
    respToken['NegResult'] = '\x02'

如果您克隆了 master ( https://github.com/CoreSecurity/impacket ),您将看到一个名为 examples/smbserver.py 的新示例(不要与 impacket/smbserver.py 库混淆),它可以更轻松地启动一个简单的服务器。赶紧跑:

smbserver.py shareName sharePath 
(e.g. smbserver.py TMP /tmp)

我进行了上述更改并运行了 smbserver.py 示例,然后从 windows 7 cmd.exe 提示符运行(假设 SMB 服务器运行在 172.16.123.1 并且登录的用户名不是 testUser):

start \\172.16.123.1

如果您嗅探流量,您将看到三次登录尝试失败,然后 Windows 资源管理器将弹出一个对话框,要求您提供新的凭据。如果您将 testUser 指定为用户名(密码可以是任何值),您最终将连接到目标 SMB 服务器。

于 2015-01-27T01:39:44.390 回答