| 利用系统机理,直接使用密码散列认证 |
|
| 作者:未知 文章来源:网络收集 点击数: 更新时间:2006-3-29 15:21:47
|
在很多时候,我们获得密码散列之后你会怎么办?大多数的人会选择使用如LC4这样的工具进行散列的解密,这样就是依靠对方口令的复杂性不够复杂,如果遇见复杂的口令,又如何利用散列呢? 通过SMB认证协议我们知道,认证是散列加密的,所以知道散列是能够获得认证的,但是麻烦 在于系统本身提供的SMB调用很少,要实现散列认证就不仅仅需要知道散列加密的认证算法,而且要自己完全实现SMB协议和其包含的RPC协议(以我目前的研究我也还只能实现文件读写操作),这很困难,如果需要用到所有的可能SMB的功能就需要很大的工作量。SMBPROXY就是通过SMB协议中的散列加密方式和代理来实现的。有没有其他更好,更简单的途径呢?答案是有的: 那么另2种想法就是: 1。创建一个使用此散列的同名用户,但你不知道其散列无法使用口令登陆。当然如果你能以超级用户用RUNAS等启动这个用户权限运行的进 程 ,然后使用AcquireCredentialsHandleW传送此用户的令牌,也可以,但是显然MS考虑到这个问题,即使用特权用户用RUNAS或服务启动其他 用户权限的进程都必须首先输入明文口令才允许运行。 2。制造一个假的带知道自己散列的凭证 那么我们首先介绍一下NET USE成功以后创建凭证和再次认证的过程: 对于输入口令,则通过调用LPCAPILOG将这个认证记录,包含主机地址,用户名,和明文口令,当再次认证(SMB是基于SOCKET口认证的,当需要一个新的SOCKET连接的时候都会重认证,只是这过程是系统自动完成的,你自己感觉不到而已,这也是SMB协议认证工具必须使用依靠自己解析完整的SMB的原因所在,无法创建凭证其他程序就无法使用已经认证的端口)就从这当中读取明文口令再计算成散列,进行认证,要制造一个假的凭证看来我们就必须知道明文口令。 在MS的严密设计下,看来我们无路可走了,但是我们再考虑一下系统用户认证的方式呢? 系统用户认证的时候,是直接读取散列进行加密处理的,具体的处理程序是在LSASS进程中LsapGetPackageCredentials函数负责。 那么一个想法是修改自己用户的SAM中的散列,但是发现口令散列的修改只到下一次登陆后才能起作用,可见系统在登陆以后就把散列信息都读出到内存中。 但是联想到我们系统连接一个远程机器的时候,会自动先使用这个用户的散列连接,这个散列从那里而来呢,他就在LSASS进程中的一个SESSION表中,那么我们想法修改内存中放置系统用户的SESSION表又如何呢?呵呵,这样就能实现我们既可以完全利用密码散列的系统所有功能了。 方法如下: 创建一个和你知道散列用户同名的用户,设置成特权用户,口令随便 以该用户登陆,运行一个程序修改系统内存中的SESSION表对应用户的散列 然后就可以直接使用远程IP地址和这个用户连接了,如直接输入IP地址到地址栏读取对方文件等。
那么首先需要讲解一下LSASS中SESSION表的存放结构,我的环境是中文简体W2K+SP3 在LSASS进程地址的0X785AFEF8变量中存放LogonSessionTable的地址 这个地址是指向一张SESSION表,每个表占用0X34个字节, 每个项的偏移0X10是一个指针,指向一个结构,这个结构的偏移0X10又是一个指针,指向另一个结构,这个结构的偏移0X38又是一个指针,指向又一个结构(很拗口啊),这个结构的偏移0X8又是一个指针,指向另一个结构,这个结[1] [2] [3] [4] [5] [6] [7] [8] [9] [10] ... 下一页 >>
|
|
[ 收藏此页到: 天天|和讯|博采|ViVi|狐摘|我摘|天极 ] 文章录入:kinda 责任编辑:kinda |
|
上一篇文章: 最新病毒WORM_MSBLAST详解 下一篇文章: CodeRedII真的一去不复返了吗? |
| 【字体:小 大】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口】 |