Metasploit用户接口
msfconsoleArmitage: KaliGUI启动;armitage命令启动 Metasploit功能程序msfvenom集成了载荷生成器、载荷编码器、空指令生成器的功能查看详细指令选项:msfvenom-h 服务器消息块协议扫描msf>useauxiliary/scanner/smb/smb_version 搜寻配置不当的MicrosoftSQLServermsf>useauxiliary/scanner/mssql/mssql_ping SSH服务器扫描msf>useauxiliary/scanner/ssh/ssh_version FTP扫描msf>useauxiliary/scanner/ftp/ftp_version,发现ftp服务器msf>useauxiliary/scanner/ftp/anonymous,检查是否允许匿名登录 简单网管协议扫描msf>useauxiliary/scanner/snmp/snmp_login渗透攻击基础 msf>showexploits msf>showauxiliary msf>showoptions msf>showpayloads msf>showtargets info set和unset setg和unsetg save
你的第一次渗透攻击
操作机:KaliLinux 靶机:WindowsXPSP2 Step1:Nmap脚本扫描发现漏洞 Nmap脚本扫描:nmap--script=SCRIPT-NAME(脚本名) Nmap脚本路径:/usr/share/nmap/scripts/SCRIPT-NAME.nse Step2:使用msf,根据漏洞选择攻击模块 msf>searchMODULE_KEYWORD(模块名) 关键字通常为:漏洞编号,漏洞软件名称,msf模块名称 Step3:根据信息搜集结果,配置攻击模块,完成攻击 msf>showoptions
攻击Metasploitable主机
操作机:KaliLinux 靶机:Metasploitable2(Ubuntu8.04) Step1:Nmap扫描发现漏洞 Nmap脚本扫描:nmap–sT–A–P0 Nmap脚本路径:/usr/share/nmap/scripts/SCRIPT-NAME.nse Step2:使用msf,根据漏洞选择攻击模块 根据服务或软件信息,使用搜索引擎查找相关漏洞信息 msf>searchMODULE_KEYWORD 关键字通常为:漏洞编号,漏洞软件名称,msf模块名称 Step3:根据信息搜集结果,配置攻击模块,完成攻击 msf>showoptions Metasploitable2有很多漏洞,尝试对多个漏洞进行利用
全端口攻击载荷:暴力猜解目标开放的端口
全端口攻击载荷是为了应对防火墙 当然,我们可以使用Nmap达到同样的目的,这样的载荷是为了提高自动化程度 msf>search allports
攻陷WindowsXP虚拟机
攻击路径: 使用nmap扫描端口 攻击MSSQL 暴力破解MSSQL服务 xp_cmdshell Meterpreter基本命令 获取键盘记录 挖掘用户名和密码 提取密码哈希值 Windows系统存储哈希值的方式一般为LANManager(LM)、NTLANManager(NTLM),或NTLANManagerv2(NTLMv2)。 使用Meterpreter命令获取密码哈希值 meterpreter>usepriv meterpreter>runpost/windows/gather/hashdump 彩虹表 传递哈希值 smb/psexec模块 使用密码哈希值进行认证,绕过密码破解 权限提升 利用低权限用户建立反向shell连接,获得Meterpreter会话 利用Meterpreter的priv扩展 meterpreter>usepriv meterpreter>getsystem meterpreter>getuid 这样的方法是否奏效,取决于低权限用户具有的权限 MSF会话管理 CTRL-Z sessions–l sessions–iSESSION_ID 令牌假冒 令牌假冒是Meterpreter最强大的功能之一,对渗透测试非常有帮助。 示例场景:你正在对某个组织进行渗透测试,成功地入侵了系统并建立了一个Meterpreter的终端,而域管理员用户在13小时内登录过这台机器。在该用户登入这台机器的时候,一个Kerberos令牌将会发送到服务器上(进行单点登录)并将在随后的一段时间之内有效。你可以使用这个活动令牌来入侵系统,通过Meterpreter你可以假冒成域管理员的角色,而不需要破解他的密码,然后你就可以去攻击域管理员账号,甚至是域控制器。 示例体现了令牌假冒的强大,也描述了使用的前置条件,如:建立Meterpreter,启用域,受控机器上有域管理员的有效令牌,等 使用PS 盗取令牌的两种方式:1.steal_tokenPID meterpreter>ps,获取PID steal_tokenPID,盗取令牌2.incognito模块 有些情况下ps命令不能列出域管理员账号 meterpreter>useincognito meterpreter>list_tokens–u meterpreter>impersonate_tokenDOMAIN\\USERNAME 通过跳板攻击其他机器 Meterpreter进行跳板攻击 meterpreter>runget_local_subnets msf>routeadd 通过添加路由实现跳板,依赖于攻击机与跳板机之间的Meterpreter会话,一旦会话断开,跳板将失效 使用MetasploitPro的VPN跳板 商业版本功能 接入目标内网,扩大了攻击面和可选攻击方式 使用Meterpreter脚本 迁移进程 关闭杀毒软件 获取系统密码哈希值 查看目标机上的所有流量 攫取系统信息 控制持久化
向后渗透攻击模块转变
如果想列举所有的后渗透攻击模块,可以这样输入然后在末尾按TAB键: meterpreter>runpost/ Displayall199possibilities (yorn 将命令行shell升级为Meterpreter sessions–u setg命令将LPORT和LHOST参数设置为Metasploit的全局变量,而不是局限在这一个模块之内。在使用sessions-u命令升级为Meterpreter的时候是必需的。 exploit–z,CTRL-Z 通过附加的Railgun组件操作WindowsAPI meterpreter>irb irbshell允许使用Ruby的语法与Meterpreter直接交互 Railgun能为你提供与Win32本地应用程序一样访问WindowsAPI的能力
msfvenom:载荷生成,载荷编码
msfvenom--help 常用参数: msfvenom-pPAYLOADNAME--payload-options,查看载荷参数 msfvenom–f,指定载荷输出格式 msfvenom–e,指定载荷编码方式 msfvenom–l MODULENAME,列出指定类型的模块清单 隐秘地启动一个攻击载荷 msfvenom–k,配置攻击载荷在一个独立的线程中启动 这种模式下,当包含载荷的程序被启动,宿主程序也会正常运行,避免被用户察觉 -k选项不一定能用在所有的可执行程序上,在实际攻击前请确保你已经在实验环境中进行了测试 加壳软件 UPX加壳 加密,压缩 与MSF编码器的情况类似,目前,仅使用加壳,免杀效果不明显 基于浏览器的渗透攻击 基于浏览器的渗透攻击原理 HeapSpraying(堆喷/堆喷射) 关于空指令 X86:\x90 空指令滑行区+Payload 内存保护机制日益完善,单一技术手段已经不足以完成漏洞利用,但是仍可以作为漏洞利用的组成部分,其思路也值得借鉴 使用调试器揭秘空指令 目的:搞清楚空指令和汇编指令是如何执行的 OllyDbg动态调试 在Shellcode尾部设置断点 在攻击机开启监听 IE浏览器极光漏洞的利用 msf>usewindows/browser/ms10_002_aurora 载荷执行过程中,目标用户机器会变迟钝,为了防止用户关闭浏览器,导致渗透攻击中断,Meterpreter提供了一些指令 手动迁移进程:meterpreter>run migrate –f 模块高级选项:msf exploit(ms10_002_aurora)>show advanced 文件格式漏洞渗透攻击 MS11-006,在微软Windows系统函数CreateSizedDIBSECTION中存在的一个栈溢出漏洞 msf>use windows/fileformat/ms11_006_createsizeddibsection 确认攻击模块的目标系统版本: msf exploit(ms11_006_createsizeddibsection)>show targets 此类攻击方式载荷是文档,往往需要与钓鱼攻击结合起来 发送攻击负载 邮件,下载链接 开启多线程监听 如果用户在文件夹中设置了使用缩略图(thumbnails)方式查看文件,当用户打开payload文件所在的文件夹,即可触发攻击 Metasploit辅助模块(auxiliary module) 辅助模块不使用payload,但提供了端口扫描、指纹识别、暴力猜解、Fuzz测试等很多类型的工具 msf>show auxiliary
辅助模块剖析
FoursquareAPI和自定义辅助模块 目的:查看辅助模块的内部结构,这是一个和渗透测试无关的签到工具 查看FousquareAPI文档,了解如何使用API 通过调用Metasploit框架提供的方法,使用FoursquareAPI,完成自定义模块 使用Metasploit框架进行开发能让我们将注意力集中在模块功能细节上,而不是处理大量重复的代码 配置SET工具包 项目地址:https://github.com/trustedsec/social-engineer-toolkit 配置文件:config/core/set_config 修改metasploit目录为实际目录:METASPLOIT_PATH=/usr/share/metasploit-framework 开启邮件钓鱼:WEBATTACK_EMAIL=ON 关闭自动检测:AUTO_DETECT=OFF 开启Apache攻击:APACHE_SERVER=ON
针对性钓鱼攻击向量
Spear-Phishing Attack Vectors Abobe PDF 的Collab.collectEmailInfo漏洞 设置发件邮箱时需注意,常见邮箱的安全防护措施,如附件检测、第三方邮件客户端认证等 Web攻击向量 JavaApplet 客户端Web攻击 用户名和密码获取 标签页劫持攻击(Tabnabbing) 中间人攻击 网页劫持 综合多重攻击方法 SET的其他特性 SET的交互式shell:该交互式shell可以替换Meterpreter作为一个攻击载荷 RATTE:一个基于HTTP隧道攻击载荷,它依赖于HTTP协议进行通信,并利用了目标主机的代理设置 Web图形界面:一个完整的Web应用攻击程序,能够自动化实施上述讨论的攻击过程 无线攻击向量:在目标主机上创建一个假冒的无线热点 在MSSQL上进行命令执行 突破口:MSSQL弱口令 调用系统管理员权限的扩展存储过程xp_cmdshell,这个存储过程使得你可以在MSSQL服务的运行账户环境(通常是Local System)下执行底层操作系统命令 xp_cmdshell的激活 msf>use auxiliary/admin/mssql/mssql_exec 分析mssql_exec模块 调用Metasploit核心库的MS SQL协议模块:include Msf::Exploit::Remote::MSSQL 激活xp_cmdshell存储过程:mssql_xpcmdshell_enable 调用mssql_xpcmdshell执行操作系统命令
编写一个新的模块
PowerShell 运行Shell渗透攻击 编写Powershell_upload_exec函数 从十六进制转换回二进制程序 计数器 运行渗透攻击模块 Fuzz测试器模块 目标:使服务器端崩溃 使用Ollydbg对服务器端进行调试 根据调试结果对Fuzz字符串长度进行调整 控制结构化异常处理链 查看SEH链内容 查看导致SEH改写的堆栈内容 计算SEH覆盖发生位置:tools/pattern_offset.rb 调整Fuzz长度字符串长度 绕过SEH限制 一段任意的缓冲区填充 NOP空指令滑行区 Shellcode 近跳转 短跳转 POP-POP-RETN 获取返回地址 定位POP-POP-RETN指令序列 使用工具查找:msfpescan –p TARGETAPP.exe 用于调试攻击载荷(发送中断指令):generic/debug_trap 调整初始缓冲区长度 坏字符和远程代码执行 坏字符:导致shellcode被截断的字符 坏字符取决于攻击目标,最快的方法是从攻击目标相同/相似的渗透代码中找坏字符 http://en.wikibooks.org/wiki/Metasploit/WritingWindowsExploit#Dealing_with_badchars
分析multi_meter_inject脚本
查看命令行选项和配置语法格式 变量和函数定义,命令行选项 host_process.memory.allocate调用 隐藏启动远程进程 Meterpreter API 打印输出 基本API调用 Meterpreter Mixins 编写Meterpreter脚本的规则 只使用临时、本地和常数变量,永远不要使用全局或者类变量,因为他们可能与框架内的变量相互冲突。 使用tab键进行缩进,不要使用空格键。 对程序块来说,不要使用大括号{},使用do和end语法模式。 当声明函数时,养成在声明前进行注释,提供函数用途简要介绍的习惯。 不要使用sleep函数,使用"select(nil,nil,nil,<time>)"。 不要使用puts等其他标准的输出函数,使用print,print_line、print_status、print_error、和print_good函数。 总是包含-h选项,该选项将对脚本进行简要的功能说明,并列出所有的命令行选项。 如果你的脚本需要在特定操作系统或者Meterpreter平台运行,确保他们只能在所支持的平台上运行,并在不支持的操作系统和平台运行时报错。 创建自己的Meterpreter脚本 自定义Meterpreter脚本:execute_upload 绕过Windows用户账户控制(UAC)防护功能 msf>use exploit/windows/local/bypassuac 对已经建立的、受UAC限制的Meterpreter会话使用,建立绕过UAC限制的会话,达到提权的目的 ********************************************************************************************** *****一次模拟的渗透测试过程********************************************************************************************************前期交互目标信息
Windows XP 网络环境:互联网+内网 开放端口:80 Metasploitable Linux 网络环境:内网 在内网开发大量端口 目标: 控制内网中的Metasploitable主机*****情报搜集
Nmap扫描:nmap–sT–P0 发现80端口的http服务 确认为Web服务器*****威胁建模
手动测试/工具测试 手动测试是否存在SQL注入漏洞 确定攻击路径*****渗透攻击
根据攻击建模结果选择方式或工具 Sqlmap利用MSSQL注入漏洞 获取注入点,用于MSF终端中的渗透攻击*****MSF终端中的渗透攻击过程
msf>use exploit/windows/mssql/mssql_payload_sqli 完成Meterpreter Shell植入*****后渗透攻击
扫描Metasploitable靶机 在跳板机上使用nmap扫描内网 识别存有漏洞的服务 根据端口扫描结果,使用msf辅助模块中针对特定服务的扫描器*****攻击Postgresql数据库服务
根据扫描结果,确认存在Postresql服务及端口号 搜索msf中与Postgresql相关的模块 选择合适的模块进行渗透攻击,这一过程需要尝试,并不是每一个查找到的模块都能成功利用 弱口令字典: Wordlists*****攻击一个偏门的服务
根据扫描结果,目标提供IRC服务 遇到不熟悉的应用或服务,在攻击前需要更多的时间进行深入研究 通过MSF的攻击模块查找、exploit-db、搜索引擎等对目标服务的进行研究,查找可能存在的漏洞信息*****隐藏你的踪迹
修改时间戳:meterpreter>timestomp 修改事件日志:meterpreter>runevent_manager 流行的取证分析工具:Encase 记录下攻击过程对目标系统进行了哪些修改,可以更容易地隐藏踪迹