使用 metasploit 渗透下一台主机后,并不意味着渗透测试的结束,而接下来需要做的就是后渗透阶段,后渗透阶段在已经拿下目标主机的前提下,进行一系列获取敏感信息、利用这台机器为跳板机做其他主机的攻击等,主要使用的是 metasploit 中的 post 模块,也就是后渗透模块。
metasploit 也提供了一个后渗透的工具,就是 meterpreter,meterpreter 的优点在于工作方式是在内存中,不需对磁盘进行其他操作。通信协议是加密过的,且可以同时和多个信道进行通信。除此外,meterpreter 是在进程中工作的,不需要去创建新进程,且可以随意在进程间切换。适用于 win,linux 等多个平台,适用于 x86 和 x64。
meterpreter 是在获取目标机器的 shell 后使用的,当通过 metasploit 拿下目标主机后可使用 meterpreter 进行后渗透测试,文章是使用 ms17010 拿下的 win7 靶机。
通过 metasploit 拿下主机进入到 meterpreter 后,其 shell 的稳定性比较低,例如若不是通过 ms17010 拿下的主机,而是通过浏览器的漏洞拿下的,当目标的浏览器关闭后,其 shell 就失效了,所以第一件事建议将 meterpreter 绑定到一个目标机的稳定进程上,getpid 命令可查看自己当前 shell 的进程 id,ps 命令会列出目标机的进程。
上面 getpid 获取的进程 id 为 1036,在 ps 列出的目标机器所有进程上,可以看到 explorer,它是 windows 系统图形界面管理文件管理的进程,很重要的也很稳定,其 id 是 1632,如果要将 shell 迁移到 explorer 进程上,可使用命令 migrate 接 id 即可。
除了上面的手动迁移进程外,meterpreter 也提供了一个自动迁移的命令,它就是 post 后渗透模块中的 migrate,它会找一个合适的稳定的进程进行迁移,命令是 run post/windows/manage/migrate。
当把 shell 迁移到稳定的进程后,就可以使用 meterpreter 的命令来进行一些相应的操作,例如使用 sysinfo 命令可以获取目标的系统类型,位数结构,当前用户,语言等。
这里再介绍两个不常用的命令,一个是检测目标是否运行在虚拟机上,命令是 run post/windows/gather/checkvm,可以看到其命令属于 post 后渗透模块中的 windows 系统下的 gather 信息收集模块中,属于信息收集类,因为我的 win 靶机是在 vm 中运行的,所以顺便使用这个命令检测一下,看下检测结果。
另一个就是 idletime 命令,用来检测系统已经运行了多久,因为输出结果不多,所以我把这两条命令的执行截成了一张图。
上面有一个命令是 getpid 用来获取进程 id,其有个很像的命令就是 getuid,getuid 用来获取当前渗透到目标系统的用户。
如果系统装有杀毒软件,则可能会影响我们的一些操作,可以使用命令 run post/windows/manage/killav 来关闭目标机的杀毒软件,我 win7 靶机没装杀毒软件,所以这里提示没有找到,这个命令这里先记录一下,后期了装些杀毒软件再进行这个命令的具体测试。
除此外,如果想通过远程桌面的形式链接目标机,想开启目标机的 rdp 远程桌面协议的话,可以使用 run post/windows/manage/enable_rdp 命令来进行开启,也就是 3389 端口。我是以正常的 user 用户登录的,目前没有权限进行开启,这里会提示没有权限,关于权限的问题,后期再进行具体的测试和记录。
我们再看下其他的信息收集命令,首先是获取目标系统当前已经登录的用户,命令为 run post/windows/gather/enum_logged_on_users,我这里只有 lurenjia 账号进行了登录。
其次我们再看一下目标机装的应用程序有哪些,命令为 run post/windows/gather/enum_applications。这个命令的结果会保存在 root 下面的. msf4 下,因为. 开头在 linux 中都是隐藏的,所以查看需要设置一下显示隐藏文件。
meterpreter 也提供了对摄像头操作的一些命令,例如 screenshot 命令的截取屏幕,截屏图片会存储在 root 目录下。
meterpreter 的 webcam 开头的命令会对摄像头进行操作,webcam_list 用来查看目标机器是否有摄像头,webcam_snap 是使用摄像头拍一张照片,同样存储在 root 目录下,webcam_stream 是开启摄像头,相当于直播,此命令会返回一个 html 文件地址,地址也是 root 目录下,打开此文件可以实时看到目标机摄像头的情况。我靶机在虚拟机没有摄像头,这里给大家贴出来 webcam 这三个命令。
除此外,meterpreter 也提供了 shell 这个命令,可以进入目标机的 dos 命令行,exit 为退出命令行的命令。
下面再记录一下 meterpreter 对文件的一些操作,首先是 pwd 或者是 getwd,用来获取目标机当前处于哪个目录,还有个命令是 getlwd 用来获取自己机器当前所处的目录。getwd 和 getlwd 容易混淆,可以这样看,metasploit 中很多利用模块都会有 rhost 和 lhost 两个参数,rhost 即 remote host 远程主机,lhost 即 local host 本地主机,那么获取远程当前目录应为 getrwd,获取本地当前目录应为 getlwd,但 meterpreter 中有区别就是,本地获取目录确实是 getlwd,而远程不是 getrwd 而是 getwd。
然后就是 cd 命令切换目录,这个和 windows 下 dos 命令一样。meterpreter 也提供了一个 ls 命令,用来获取当前目录下的文件和目录。
从上面这个图可以看出来我第一次 cd c:向 c 盘根目录切换的时候失败了,而正确的命令是 cd c:/,这里先提一下就是,windows 中处理路径是右斜线,linux 是左斜线。但在接下来要介绍的像 search 查找文件、download 下载文件、upload 上传文件时,发现左斜线会报错,路径需要是右斜线。后来想了一下,可能 cd 这个命令是先在本地做的处理随后给的肉鸡,而像查找下载这些命令本地处理的是命令操作,路径是直接给到肉鸡处理的。
下面是 search 命令,用来搜索目标机的文件,-f 参数指定查找的是文件类型,-d 指定的是要在哪个范围进行查找。下面命令是查找 c 盘下的所有 txt 文件,搜到了四百多个结果,这里只截取了部分内容。
meterpreter 也提供了 download 命令用来进行下载目标机器上的文件,第一个参数是要下载的文件地址,第二个参数是要下载到本地的路径。
下面是 upload 命令,用来向目标机器上传文件,使用方法和 download 类似,第一个参数是要上传文件的本地路径,第二个参数是目标机器的存储路径,我这里执行报了一个 1314 的错误,我去网上搜了一下,说是需要执行一下 execute -f cmd.exe -c -i -H 这个命令,这个命令的作用是使用 cmd 进行交互,我没有继续,大家如果有这个错误可以试一下这个命令。
当拿下一台主机的时候,如果需要继续渗透其内网的其他主机,作为一个外来的入侵者,这时候直接用 metasploit 是很不方便的。例如内网的 ip 都是以 10.0.0.0 这种,metasploit 渗透时,目标机器填 10 开头的内网 ip 是到达不了的,而刚刚拿下的机器基本都处于内网网段,这时,则可以借助刚刚的肉鸡作为跳板,对内网其他的主机进行后续的渗透。
这里需要了解下路由表的作用,windows 都会有自己的路由表,meterpreter 中直接 route print 命令可进行查看目标机的路由表情况。
主要介绍下前三列,分别是 ip,掩码和网关,作用在于当访问路由表中指定的 ip 时,传送的路由就是指定的网关地址。四个 0 的 ip 为默认,意思是所有的 ip 都会访问后面指定的默认网关,而这个网关就是自己的路由器地址,然后由路由器发送向外网,向目标机传输。这里的四个 0 就是默认所有的请求都会默认以路由器向外发送。
当路由表中指定了具体的 ip 跳具体的网关时,就不会再走四个 0 这条记录了。路由表会先看有没有指定的 ip 记录,如果有则跳指定的 ip 网关,如果没有就走默认的四个 0。
说明了路由表,然后来看下 meterpreter 的应用,首先需要明确的是添加路由表这个记录是添加在自己机器上的,而不是目标机。再添加前,需要先将网关确定下来,而这个网关就是自己和肉鸡之前的 shell 会话。这个 shell 可以使用 meterpreter 的 background 命令将这个会话放到后台,然后会返回这个 session 的会话序号,网关设置为这个序号即可。
然后就是确认目标机的内网 ip 段,run get_local_subnets 来获取目标机器所在的子网情况,也就是获取其目标机器所在的网段和掩码。
有了内网的 ip 段,掩码和网关后,就可以通过 route add 命令直接添加了,添加后再次使用 metasploit 攻击时,模块的 rhost 目标地址这样类似的参数就可以直接写 10.0.0.0 这种格式的内网 ip,然后 exploit 运行时,路由表一看有这条记录,则不会以四个 0 默认拿路由器进行发送,而是由刚才的 session 会话 shell 来发送,也就相当于肉鸡去发送的这个指令,肉鸡存在内网中,所以可以成功访问。
通过上面的操作,这时就可以直接 metasploit 填写内网 ip 了。我这里自己和虚拟机的靶机都在同一个局域网,而且也没有其他靶机了,所以具体的后续步骤就不做了,后续步骤其实就是又回到了 metasploit 的操作。
我这里通过 metasploit 去试了另外一台同网的机器,这台机器不是靶机,没有特意的漏洞可以利用,我这里就只是 exploit 运行一下,然后通过 wireshark 包看一下情况。104 是 kali 攻击机,105 是拿下的肉鸡,106 是新机器,106 就当作是目标机内网的另一台机器吧。
以上是部分截图,可以看到,我攻击 106 时,是先向 105 发送的请求,随后 105 去请求了 106。可以看到以肉鸡做了跳板。
meterpreter 提供了后续渗透的很多利用模块和命令,命令过多只能介绍一部分,其他的大家感兴趣可以去搜索下其他的说明文档或者看下 meterpreter 模块下的脚本等。
公众号推荐:aFa攻防实验室
分享关于信息搜集、Web安全、内网安全、代码审计、红蓝对抗、Java、Python等方面的东西。