目录
一、渗透测试概述
1、渗透测试与APT
渗透测试:渗透测试是一种通过模拟攻击的技术和方法,挫败目标系统的安全控制措施并获得访问控制权的安全测试方法。渗透测试主要依据CVE已经发现的安全漏洞,模拟入侵者的攻击方法对网站应用、服务器系统和网络设备进行非破坏性质的攻击性测试。
CVE(通用缺陷披露):
CWE(通用缺陷列表):
渗透测试过程的原则:
- 要选择不影响业务系统正常运行的攻击方式进行的测试
- 符合规范和法律要求是渗透测试业务的一个必要条件
渗透测试与APT对比:
渗透测试 | APT | |
目的 | 评估计算机网络系统的安全性 | 对高价值目标进行有组织、长期持续性的控制 |
手段方法 | 通过被允许的行为模拟黑客攻击来对目标系统进行测试 | 利用各种高技术手段(包括0day漏洞)、“水坑”攻击、“鱼叉”攻击等 |
结果 | 提高目标系统的安全级别 | 给目标系统带来严重损失 |
渗透测试根据测试方法分类:
- 黑盒测试:将测试对象看做黑盒子,完全不考虑测试对象内部结构和内部特性
- 白盒测试:将测试对象看做白盒子,测试人员依据测试对象内部逻辑结构相关信息,设计或选择测试用例
- 灰盒测试:介于白盒和黑盒之间,是基于对测试对象内部细节有限认知的软件测试方法
渗透测试根据测试目标分类:
- 主机操作系统渗透:对Windows、Solaris、AIX、Linux、SCO、SGl等操作系统本身进行渗透测试
- 数据库系统渗透:对MS-SQL、Oracle、MySQL、lnformix、Sybase、DB2、Access等数据库应用系统进行渗透测试
- 应用系统渗透:对渗透目标提供的各种应用,如ASP、CGI、JSP、PHP等组成的WWW应用进行渗透测试
- 网络设备渗透:对各种防火墙、入侵检测系统、路由器、交换机等网络设备进行渗透测试
渗透测试根据测试位置分类:
- 内部渗透:模拟客户内部违规操作者的行为,在内网中对目标进行渗透测试
- 外网渗透:模拟对内部状态一无所知的外部攻击者的行为(包括对网络设备的远程攻击、口令管理安全性测试、防火墙规则试探与规避、Web及其他开放应用服务的安全性测试),从外网对目标进行渗透测试
针对Web服务体系架构的渗透测试:
- 服务器渗透测试:对服务器自身的安全性(如操作系统、数据库是否存在弱口令等)进行检测
- 中间件渗透测试:对Apache、IIS、Tomcat、Nginx等Web中间件的漏洞(如配置缺陷、文件解析、反序列化漏洞等)
- Web应用渗透测试:对CMS、Blog等Web应用程序的漏洞(如SQL注入、XSS、CSRF、文件上传与解析、文件包含、命令执行等)进行检测
- 业务逻辑渗透测试:对业务逻辑安全性(如验证逻辑问题、会话管理问题、权限控制问题等)进行检测
2、渗透测试执行标准
渗透测试执行标准(PTES):
- 前期交互阶段:与客户进行沟通,确定渗透测试的范围、目标、限制条件以及服务合同细节。客户书面授权委托,并同意实施方案是进行渗透测试的必要条件,所有过程都在客户的控制下进行
- 信息收集阶段:信息收集是每一步渗透攻击的前提,通过信息收集可以针对性的制定模拟攻击测试计划,提高模拟攻击的成功率,降低攻击测试对系统造成的不利影响
- 信息收集方法包括DNS探测、操作系统指纹判别、应用判别、账号扫描、配置判别等
- 信息收集常用工具:
- 商业网络安全漏洞扫描软件Nessus、开源安全检测工具Nmap等
- 操作系统内置的许多功能(Telnet、Nslookup、IE等)也可以作为信息收集的由有效工具
- 威胁建模阶段:利用信息搜集阶段获取的信息,识别目标系统上可能存在的漏洞与弱点,确定最高效的攻击方法。需要将客户组织当作敌手看待,然后以攻击者的视角和思维来尝试利用目标系统的弱点
- 漏洞分析阶段:从前面环节获取的信息分析和理解哪些攻击途径途径会是可行的。重点分析端和漏洞的扫描结果、攫取到的服务“旗帜”信息以及在信收集环节中得到的其他关键信息
- 渗透攻击阶段:针对目标系统实施深入研究和测试的渗透攻击,主要包括:
- 精准打击
- 绕过防御机制
- 定制渗透攻击路径
- 绕过检测机构
- 触发攻击响应控制措施
- 渗透代码测试
- 后渗透攻击阶段:从已经攻陷了客户组织的一些系统或取得域管理员权限之后开始,以特定业务系统为目标,标识出关键的基础设施,并寻找客户组织最具价值和尝试进行安全保护的信息和资产,并需要演示出能够对客户组织造成最重要业务影响的攻击途径。主要包括:
- 基础设施分析
- 高价值目标识别
- 掠夺敏感信息
- 业务影响攻击
- 掩踪灭迹
- 持续性存在
- 报告阶段:使用文档报告来交流在渗透测试过程中做了哪些、如何做的,以及客户如何修复你所发现的漏洞与弱点
注意事项:前期交互阶段,必须取得客户的授权;取得授权后必须向公安部门等监管机构进行报备;保证渗透过程中的所有工具都是合规的、经过检验的
3、渗透测试报告
编写渗透测试报告的两大宗旨及难点:
- 如何准确定位问题:
- 如何让甲方意识到问题的严重性:
渗透测试报告必须包含的内容:
- 该漏洞对企业资产的影响状况(肯能造成的问题)
- 合理的漏洞分级标准以及相应漏洞的分级
- 系统整体的加固建议(如漏洞修复建议、安全防护措施等)
渗透测试报告必须保证是任何渗透测试人员都能看懂的,但可能存在的问题:
- 复现人员无法成功复现漏洞
- 复现人员得出与报告中不同的结论
- 可能导致隐藏的漏洞无法查出
渗透报告的重要性(地位):
- 判定测试费用的重要依据
- 判定渗透测试团队优劣的重要依据
- 判定测试是否成功的重要依据
渗透报告必须具备的品质:
- 简单明了,直击要害
- 尽可能通俗易懂
- 满足甲方需求
报告的基本组成要素:(注意最终报告的发送要采用加密传输)
- 封面:
- 公司名称、标志
- 测试的范畴
- 测试时间
- 文档的保密级别(保密声明)
- 法律声明
- 内容概要:
- 限制字数
- 明确指出测试系统是否安全
- 尽量不提及技术、工具
- 让客户明白我们做了什么,接下来要做什么
- 最后一行是一个结论,明确指出该系统是安全还是不安全
- 漏洞概览及目录:
- 一目了然(可以使用表格或图表)
- 分类列举漏洞
- 可以包含漏洞严重性
- 使用的工具列表:
- 列出所用工具
- 可包含简要工具说明
- 报告主体:
- 发现的每一个漏洞
- 发现漏洞所用工具、payload、exp、影响范围和存在的隐患或危害等内容(不能直接复制扫描结果)
- 漏洞修复建议
二、渗透测试测试环境搭建及工具使用
1、Kali Linux基础
Kali Linux简介:
- Kali Linux前身是BackTrack
- BackTrack 4使用了ubuntu8.10的系统;2011年8月18日,发布了BackTrack 5 R1,基于ubuntu10.04,内核为Kernel 2.6.39.4;目前最新版本为2012年8月13日发布的BackTrack 5 R3黑帽子版,内核为Kernel 3.2.6
- Kali Linux是基于Debian Linux的发行版,第一个发行版(Kali Linux 1.0)于2013年3月发布
- 面向对象人群:从事渗透测试、数字取证、逆向工程、网络攻防技术研究等工作的人员
Kali Linux特性:
- 开源免费
- 开源git树:可以浏览开发树得到所有源代码
- 遵循FSH(文件系统层次化标准):遵循Linux目录结构标准
- 支持无线设备:兼容大量USB和其他无线设备
- 安全的开发环境
- 多语言支持
- 完全的的可定制化
- 支持ARM设备
Kali Linux基本配置:
- 关机命令:
- shutdown -h now //立即关机
- Init 0 //立即关机
- shutdown -h+1 //1分钟后关机
- shutdown -r 12:00 //12:00关机
- 重启命令:
- shutdown -r now //立即重启
- Init 6 //立即重启
- shutdown -r +1 //1分钟后重启
- shutdown -r 12:00 //12:00重启
- 为root用户设置初始密码:
- 在Kali Linux进入开机启动界面按e进入Kali GNU GRUB界面
- 选择linux那一行,将ro(只读)改为rw(读写),并在此命令行末尾添加“init=/bin/bash”,修改完毕后按Ctrl + X或F10进入单用户模式
- 在单用户模式下输入passwd root命令,设置相应密码,设置完成后重启即可使用root用户登录Kali
- IP地址配置(立即生效,重启后失效):
- 配置IP地址:ifconfig eth0 192.X.X.X/24
- 制定默认网关:route add default gw 192.X.X.X
- Kali工具集:
- 官网
- 功能分类(十三类): 信息收集(Hping3、Whois、Dnsenum)、漏洞分析(Nmap、Nikto、Sparta)、Web程序(Burpsuite、Skipfish、Whatweb)、数据库评估软件(Sqlmap)、密码攻击(Hashcat、Jphn、Ophcrack)、无线攻击、逆向工程、漏洞利用工具集(Metasploit)、嗅探/欺骗、权限维持、数字取证、报告工具集、社会工程学工具(SET)
- Sqlmap既属于数据库评估工具,又属于漏洞利用工具
- Nmap既属于信息收集工具,有属于漏洞分析工具
- Maltego既属于信息收集工具,又属于报告工具及社会工程学工具
2、渗透测试目标环境构建
(1)基于LANMP构建PHP测试环境
LANMP简介:
- LANP:Linux+Apache+Mysql+PHP简称
- LANMP:Linux+Apache+Nginx+Mysql+PHP简称
- LANMP是WDLinux官网2010年底推出的Web应用环境的快速简易一键安装包,用Shell脚本编写,且是开源的
LANMP安装:
- 以root用户登录CentOs,打开终端,执行以下命令下载LANMP一键安装包:wget http:// www.wdlinux.cn/files/lanmp_v3.tar.gz
- 解压安装包:tar zxvf lanmp_v3.tar.gz
- 一键安装相关组件:sh lanmp.sh
LANMP初始配置:
- 设置Apache网站的根目录和默认服务端口:
- 步骤1:查找Apache配置文件http.conf所在位置:find / -name httpd.conf
- 步骤2:编辑httpd.conf,设置Apache网站的服务端口(举例81端口)
- 步骤3:编辑httpd.conf,设置Apache网站的根目录(举例设置网站根目录为/www/wdlinux/httpd-2.4.41/htdocs)
- 步骤4:编辑httpd.conf,设置Apache网站的访问权限(举例修改权限为Allowoverride all,Require all granted)
- 步骤5:保存httpd.conf,并重启apachectl服务:cd /www/wdlinux/httpd-2.4.41/bin(跳转到指定目录)、./apachectl restart(重启服务)
- 设置MySQL数据库root账号的密码:
- 步骤1:查找MySQL配置文件my.cnf所在位置:find / -name my.cnf
- 步骤2:编辑my.cnf,在文件中的[mysqld]下增加一行“skip-grant-tables”,取消密码登录验证
- 步骤3:重启mysql服务:systemctl restart mysqld
- 步骤4:以无密码方式登录MySQL:cd /www/wdlinux/mysql-5.5.62/bin(跳转到指定目录)、mysql -h 127.0.0.1 -uroot(登录mysql)
- 步骤5:设置root账户密码,完成后exit退出:
- 5.7前版本:update mysql.user set password=password("root") where user="root";
- 5.7后版本:update mysql.user set authentication_string=password("root") where user="root";
- 步骤6:编辑my.cnf,删除或注释之前在文件中的[mysqld]下增加一行“skip-grant-tables”,恢复密码验证,实现位密码登录
- 步骤7:重启mysqld服务:systemctl restart mysqld
(2)基于WAMP构建PHP测试环境
WAMP简介:
- Windows+Apache+MySQL+PHP的简称
- WAMP源自LAMP,两者的唯一区别在于WAMP用于Windows操作系统,LAMP用于Linux操作系统
WAMP初始配置:
- WAMP安装:
- 步骤1:安装微软常用运行库合集
- 步骤2:安装WAMPServer 3
- 步骤3:启动WAMPServer,选择Start All Services
- 步骤4:测试WAMPServer是否安装成功:访问http://127.0.0.1
- 开通远程访问权限:
- 步骤1:在系统托盘处的WAMPServer图标上单击鼠标左键,在弹出的菜单中选择“Apache" -> "httpd.conf”,打开httpd.conf 配置文件
- 步骤2︰编辑httpd.conf配置文件,将文件中<Directory “${INSTALL_DIR}/www/”>标签下的“Require local”修改成“Require all granted",并保存
- 步骤3:在系统托盘处的WAMPServer图标上单击鼠标左键,在弹出的菜单中选择“Apache" ->"httpd-vhosts.conf”,打开httpd-vhosts.conf配置文件。
- 步骤4∶编辑httpd-vhosts.conf配置文件,将文件中的“Require local”修改成“Require all granted”,并保存。
- 步骤5︰在系统托盘处的WAMPServer图标上单击鼠标左键,在弹出的菜单中选择“Restart All Services”重启WAMPServer,重启完毕后尝试远程访问网站,如果访问成功,则表明网站的远程访问权限已开通。
(3)基于PHPstudy构建PHP测试环境
PHPstudy简介:
- PHPstudy:是一个程序集成包,包括Apache+PHP+MySQL+phpMyAdmin+ZendOptimizer
- 不仅包括PHP调试环境,还包括开发工具、开发手册等
PHPstudy初始配置:
- PHPstudy安装:
- 步骤1:安装微软常用运行库合集
- 步骤2:安装PHPstudy 2018
- 步骤3:启动PHPstudy 2018
- PHPstudy常规配置:
- 步骤1:设置服务端口和网站根目录
- 步骤2:切换组件版本
- 步骤3:更改配置文件
- 步骤4:设置PHP参数开关
(4)典型环境漏洞的建立:
DVWA简介:
- DVWA是一个用来进行安全脆弱性鉴定的Web应用,旨在为安全专业测试人员测试自己的专业技能和工具提供的合法的环境,帮助Web开发者更好的理解Web应用安全防范的过程
- DVWA也是一个开源的漏洞联系平台,基于Apache+MySQl+PHP运行,包含了XSS、SQL注入、文件上传、文件包含、CSRF、暴力破解等各个难度的测试环境
- DVWA下载
DVWA安装:
- 步骤1︰将DVWA资源包解压到网站根目录中(本例中用PHPstudy搭建网站,网站根目录为C:\phpstudy\PHPTutorial\www)
- 步骤2︰修改DVWA-master中config文件夹下的config.inc.php.dist文件:
- (1)文件名修改为config.inc.php
- (2)文件内容中,正确设置连接MySQL数据库的用户名、密码和数据库名(本例中MySQL的root账号的密码为root),并保存
- 步骤3:启动PHPstudy,并访问http://127.0.0.1/DVWA-master/setup.php,点击页面下方的“Create/Reset Database”按钮进行安装
- 步骤4︰安装成功后,会由setup.php自动跳转至login.php,其登录的默认用户名为admin,密码为password
SQLi-Labs简介:
- SQLi-Labs是一款用于学习SQL注入的开源平台(靶场环境),共有60多种不同类型的注入
- 总体上基于Apache+MySQL+PHP运行
- SQLi-Labs下载
SQLi-Labs安装:
- 步骤1:将SQLi-Labs资源包解压到网站根目录中(本例中用PHPstudy搭建网站,网站根目录为C:\phpStudyPHPTutorial\ www)
- 步骤2︰修改sqli-labs-master中sql-connections文件夹下的db-creds.inc文件,正确设置连接MySQL数据库的用户名、密码和数据库名(本例中MySQL的root账号的密码为root) ,并保存
- 步骤3︰启动PHPstudy,并访问http://127.0.0.1/sqli-labs-master,点击页面上的“Setup/reset Database for labs”按钮进行安装
- 步骤4:如出现Welcome页面则表示安装成功
- 注意:注意:如果PHP版本较高(如PHP7),则可能出现报错。建议在安装SQLi-Labs网站之前,将PHP环境切换成低版本(如PHP5)
3、Nmap
(1)Nmap介绍
Namp简介:
- Nmap(Network Mapper简称)是Linux下一款开源免费的网络发现和安全审计的工具
- Nmap最初由Fyodor在1996年创建,随后在开源社区众多的志愿者参与下,该工具逐渐成为最为流行的安全设备工具之一
- Nmap使用原始IP报文来发现网络上有哪些主机,这些主机提供什么服务(应用程序名和版本),服务运行在什么操作系统,他们使用什么类型的报文过滤器/防火墙,以及一些其他的功能
- Namp下载
Nmap家族成员:
- Zenmap:Nmap的图形界面版
- Ncat:基于netcat,并扩展了一些功能,如ncat链、SSL支持、二进制等
- Ncrack:测试已部署的认证系统和密码强度,支持常用协议
- Ndiff:用于网络基线测试,对比Nmap扫描结果之间的差异
- Nping:允许将自己构造的数据包整合在扫描过程中,并对原始数据进行操控
Mmap功能:
- 基本功能:
- 主机发现
- 端口扫描
- 应用程序与版本信息侦测
- 操作系统侦测
- 附加功能:
- 规避FW/IDS
- NSE脚本定制与使用
Nmap命令语法:
- 语法格式:nmap 【空格】 【选项|多选项|协议】【空格】【扫描目标说明】
- 默认扫描:nmap <目标地址>
- 全面扫描:nmap -A -T 4 -v <目标地址>
(2)主机发现
主机发现:
- 目标:确定主机是否在线(Alive,开机状态)
- 原理:与ping类似,发送探测包到目标主机,如果收到恢复,则说明主机是开启的
- 探测方式(有十几种):
- ICMP ECHO / TIMESTAMP / NETMASK 报文
- TCP SYM / ACK 报文
- SCTP INIT / COOKIE-ECHO 报文
主机发现相关命令选项:
主机发现相关命令实例:
(3)端口扫描
端口扫描:
- 目标:确定目标主机TCP/UDP端口的开放情况
- 原理:发送TCP、UDP等类型的探测包到目标端口,根据收到的回复包判定端口是否开放
- 端口的六个状态:
- open:端口开放的
- closed:端口关闭的
- filtered:端口被防火墙IDS/IPS屏蔽,无法确定其状态
- unfiltered:端口没有被屏蔽,但是否开放需进一步确定
- open|filtered:端口是开放的或被屏蔽
- closed|filtered:端口是关闭的被屏蔽
端口扫描相关命令:
端口扫描原理:
- TCP SYN扫描(-sS)原理:Nmap向目标端口发送TCP SYN报文,如果目标机返回TCP SYN+ACK报文,则说明端口处于开放状态,同时Namp会紧接着向目标机发送TCP RST报文以重置此链接;如果目标机返回TCP RST+ACK报文,则说明目标端口处于关闭状态
- TCP connect扫描(-sT)原理:Nmap向目标端口发送TCP SYN报文,如果目标机返回TCP SYN+ACK报文,则说明目标端口处于开放状态,同时Nmap会紧接着向目标机依次发送TCP ACK、TCP RST+ACK完成三次握手和重置此连接;如果目标机返回TCP RST+ACK报文,则说明目标端口处于关闭状态。
- TCP ACK扫描(-sA)原理:Nmap向目标端口发送TCP ACK报文,无论目标端口是否处于开放状态,目标机都会返回TCP RST报文。如果Nmap主机能收到此TCP RST报文,则说明目标端口未被防火墙屏蔽。TCP ACK扫描只能用于确定防火墙是否屏蔽某个端口,可以辅助TCP SYN的方式来判断目标主机防火墙的状况。
- 隐蔽扫描(-sF/-sN/-sX)原理:Nmap向目标端口发送TCP FIN (-sF)/ NULL (-sN)/ FIN+ PSH+URG (-sX)报文,对于Linux系统的目标机,如果目标机未响应,则说明目标端口处于开放状态或被防火墙屏蔽;如果目标机返回TCP RST+ACK报文,则说明目标端口处于关闭状态。对于Windows系统的目标机,无论目标端口处于开放还是关闭状态,目标机都会返回TCP RST+ACK报文。因此,隐蔽扫描方式适合于Linux系统的目标机端口扫描。
端口扫描相关命令实例:
(4)应用程序与版本信息侦测
应用程序与版本信息侦测:
- 目标:识别目标主机开放的TCP/UDP端口上运行的服务及版本信息
- 流程:
- 首先检查open与open/filtered状态的端口是否在排除端口列表内。如果在排除列表,将该端口剔除
- 如果是TCP端口,尝试建立TCP连接。尝试等待片刻(通常6秒或更多,具体时间可以查询文件nmap-services-probes中Probe TCP NULL q||对应的totalwaitms)。通常在等待时间内,会接收到目标机发送的“WelcomeBanner”信息。Nmap将接收到的Banner与nmap-services-probes中NULL probe中的签名进行对比,查找对应应用程序的名字与版本信息
- nmap-services-probes(服务版本数据库文件):默认路径:/usr/share/nmap/nmap-services-probes
- 如果通过“Welcome Banner”无法确定应用程序版本,那么Nmap再尝试发送其他的探测包(即从nmap-services-probes中挑选合适的probe),将probe得到的回复包与数据库中的签名进行对比。如果反复探测都无法得出具体应用,那么打印出应用返回报文,让用户自行进一步判定
- 如果是UDP端口,那么直接使用nmap-services-probes中探测包进行探测匹配,根据结果对比分析出UDP应用服务类型
- 如果探测到应用程序是SSL,那么调用openSSL进一步的侦查运行在SSL之上的具体的应用类型
- 如果探测到应用程序是SunRPC,那么调用brute-force RPC grinder进一步探测具体服务
应用程序与版本信息侦测相关的命令选项:
应用程序与版本信息侦测相关的命令实例:
(5)操作系统侦测
操作系统侦测:
- 目标:识别目标主机操作系统的类型
- 侦测方法:网络协议栈指纹识别技术
常用的网络协议栈指纹识别方法:
- TTL:Time To Live,即数据包的“存活时间”,表示一个数据包在被丢弃之前可以通过多少跃点(Hop)。不同操作系统的缺省TTL值往往是不同的。
- 常见操作系统的TTL值
- Windows 9x/NT/2000 lntel TTL=128
- Digital Unix 4.0 Alpha TTL=60
- Linux 2.2.x Intel TTL=64
- Netware 4.11 Intel TTL= 128
- AIX 4.3.x IBM/RS6000 TTL= 60
- Cisco 12.0 2514 TTL= 255
- Solaris 8 lntel/Sparc TTL= 64
- Windows系统修改TTL值的方法:打开注册表,在“HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\Tcpip\Parameters”新建一个“DefaultTTL”Dword键值进行自定义
- DF位:DF(不分段)位识别:不同OS对DF位有不同的处理方式,有些OS设置DF位,有些不设置DF位;还有一些OS在特定场合设置DF位,在其它场合不设置DF位
- Window Size:TCP接收(发送)窗口大小。它决定了接收信息的机器在收到多少数据包后发送ACK包。一般地,UNIX的Window Size较大。Windows、路由器、交换机等的较小
- ACK序号:不同的OS处理ACK序号时是不同的。如果发送一个FIN+PSH+URG的数据包到一个关闭的TCP端口,大多数OS会把回应ACK包的序号设置为发送的包的初始序号,而
Windows和一些打印机则会发送序号为初始序号加1的ACK包- 对FIN包的相应:发送一个只有FIN标志位的TCP数据包给一个打开的端口,Linux等系统不响应;有些系统如Windows、CISCo、HP/UX等,发回一个RST
- ISN(初始化序列号):不同的OS在选择TCP ISN时采用不同的方法:一些UNIX系统采用传统的64K递增方法;较新的Solaris、IRIX、FreeBSD、Digital Unix、Cray等系统采用随机增量的方法;Linux 2.0、OpenVMS、AlIX等系统采用真随机方法; Windows系统采用一种时间相关的模型;还有一些系统使用常数,如3Com集线器使用Ox803,Apple LaserWriter打印机使用OxC7001。
- 主机使用的端口:一些OS会开放特殊的端口,如Windows的137、139;一些网络设备,如入侵检测系统、防火墙等也开放自己特殊的端口。
操作系统侦测相关的命令选项:
操作系统侦测相关的命令实例:
(6)规避FW/IDS技术
规避FW/IDS技术:
- 目标:绕过主机的防火墙、入侵检测系统等防护手段
- 常用选项:
规避FW/IDS技术实例:
(7)NSE脚本的简单应用
NSE和Lua:
- 除了常规的网络扫描,Nmap还可根据NSE (Nmap scripting Engine)的脚本进行大量渗透工作,这种脚本基于Lua语言编写。
- 脚本存放目录:/usr/share/nmap/scripts/
NSE开发工具:
NSE脚本运用:
SE脚本的应用实例:
(8)扫描结果保存与输出
三种格式的输出:
- normal:标准模式(选项-oN)
- xml文档:(选项-oX)
- grep文件(选项-oG)
- 注:-oA选项可将扫描结果以标准格式、XML、Grep格式一次性全部保存
扫描结果实例:
4、BurpSuite
(1)BurpSuite介绍
BurpSuite简介:
- BurpSuite (简称Burp)是基于Java开发的Web安全领域的集成工具,被称为信息安全界的瑞士军刀,它包含Proxy、Intruder、Repeater、Decoder.Comparer等多个模块,模块间通过共享相互传递HTTP/HTTPS消息数据包。
- BurpSuite共有三个版本:社区版(Community Edition) 、专业版(Professional Edition)和企业版(Enterprise Edition),社区版免费且只有最基础的功能,而专业版在社区版基础上增加了专业漏洞扫描和高级手动调试功能。
- Kali系统自带BurpSuite社区版。
BurpSuite安装实例——在Windows7中安装BurpSuite专业版:
- 步骤1:安装Java环境并设置环境变量
- 在Windows 7中下载Java开发与调试工具JDK8并进行安装。
- 步骤2:设置Java环境变量
- (1)打开“控制面板"->“系统”->“高级系统设置”,在弹出的“系统属性”对话框中,点击“环境变量”按钮,在“环境变量”对话框的“系统变量”模块下点击“新建”按钮。
- (2)新建两个变量:
- 变量名称为“JAVA_HOME”,变量值为“C:\Program Files\Java\jdk1.8.0_191”(本例中的JDK程序的绝对安装路径)变量名称为“CLASSPATH”,变量值为“.;%JAVA_HOME%\lib;%JAVA_HOME%\lib\tools.jar”(注意前面有一个“.”和“;”)
- (3)在“系统变量”列表中找到并选中“PATH”变量,点击“编辑”按钮,在变量值的最后输入“;%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin”(注意PATH变量原有的值不要删除)。确定无误后,依次点击“确定”按钮,完成环境变量的设置。
- (4)启动cmd,分别用java -version和javac -version命令检查环境版本,若两个版本号一致,则说明环境变量配置成功。
- 步骤3:下载BurpSuite Pro程序包(jar),破解并启动BurpSuite Pro
- (1)下载BurpSuite Pro程序包(本例中为burpsuite_pro_v2.1.jar)和对应的破解程序(本例中为burp-loader-keygen-2.jar)
- (2)选中破解程序Keygen,单击鼠标右键,选择“打开方式”为“Java(TM)Piatform SEbinary"
- (3)在破解程序Keygen的主界面,设置Lisence Text为任意字符,点击“run"按钮启动burpsuite_pro_v2.1.jar。如果点击“run”按钮无法启动burpsuite_pro_v2.1.jar,则可以先启动cmd,进入Keygen所在路径,并使用命令java -noverify -Xbootclasspath/p:burp-loader-keygen-2.jar -jar burpsuite_pro_v2.1.jar来启动`(注意:命令中的蓝色标注部分,请根据下载的实际文件名进行替换)
- (4)将Keygen中License复制粘贴到BurpSuite中,并点击“Next”按钮
- (5)在BurpSuite界面点击“Manual activation”按钮,选择手工激活
- (6)拷贝Activation Request和Activation Response。
- (7)拷贝完成后,点击BurpSuite界面点击“Next”按钮,如出现“Success"的提示,则说明激活成功。
- (8)激活之后,不能通过双击BurpSuite主程序来启动,否则启动之后还是需要输入key,两个文件必须放在一个目录下,启动方式有两种:
- 通过Keygen 上的“run”按钮来启动
- 使用命令java -noverify -Xbootclasspath/p:burp-loader-keygen-2.jar -jar burpsuite_pro_v2.1.jar来启动(注意:命令中的蓝色标注部分,请根据下载的实际文件名进行替换)。为了方便,可以将命令保存为一个批处理文件(.bat)
Burpsuite主要功能模块:
- Target:显示目标目录结构的一个功能
- Proxy:拦截HTTP/HTTPS的代理服务器,作为一个在浏览器和目标应用程序之间的中间人,允许拦截、查看、修改在两个方向上的原始数据流
- lntruder:一个定制的高度可配置的工具,对Web应用程序进行自动化攻击,如:枚举标识符、收集有用的数据以及使用fuzzing技术探测常规漏洞
- Repeater:一个靠手动操作来触发单独的HTTP请求,并分析应用程序响应的工具
- Sequencer:用来分析那些不可预知的应用程序会话令牌和重要数据项的随机性的工具
- Decoder:进行手动执行或对应用程序数据智能解码编码的工具
- Comparer:通常是通过一些相关的请求和响应得到两项数据的一个可视化的“差异”
Burpsuite模块简单使用:
- 实例一:HTTP报文抓取与修改
- 步骤1:设置BurpSuite代理服务端口
- 选项卡Proxy->Options->Proxy Listeners
- 注意: Tomcat在本机的默认端口是8080,BurpSuite proxy在本机的默认监听端口也是8080,如果同时打开就会导致端口冲突。因此,建议将BurpSuite proxy的代理端口改为其他不常用端口,如8090
- 步骤2:设置FireFox浏览器代理端口
- 菜单项“工具”->“选项”->“常规”->“网络设置”,点击“设置”按钮,在弹出的“连接设置”对话框中选择“手动代理配置”,“HTTP代理”处填写127.0.0.1,“端口”处填写8090(跟BurpSuite代理服务端口值保持一致),同时勾选“也将此代理用于FTP和HTTPS”,设置完成后点击“确定”按钮
- 步骤3:抓取HTTP请求报文
- (1)首先关闭BurpSuite的拦截功能,具体方法为︰选项卡Proxy->Intercept,设置Intercept is off
- (2)利用FireFox浏览器访问DVWA网站,正常显示认证页面
- (3)开启BurpSuite的拦截功能,具体方法为∶选项卡Proxy->Intercept,设置lntercept is on
- (4)在DVWA网站认证页面输入登录用户名和密码(此处可随便输入任意字符),并点击Login按钮,观察到BurpSuite已经抓到了一个HTTP请求报文
- 步骤4:修改HTTP请求报文
- 将BurpSuite抓到的HTTP请求报文的POST表单中的数据进行修改,设置正确的用户名 (admin)和密码(password),修改完成后多次点击“Forward”按钮发送此HTTP请求报文,观察到DvWA网站认证通过,成功登录
- 实例二:HTTPS报文抓取
- 步骤1:设置BurpSuite代理服务端口
- 选项卡Proxy->Options->Proxy Listeners
- 注意: Tomcat在本机的默认端口是8080,BurpSuite proxy在本机的默认监听端口也是8080,如果同时打开就会导致端口冲突。因此,建议将BurpSuite proxy的代理端口改为其他不常用端口,如8090
- 步骤2:设置FireFox浏览器代理端口
- 菜单项“工具”->“选项”->“常规”->“网络设置”,点击“设置”按钮,在弹出的“连接设置”对话框中选择“手动代理配置”,“HTTP代理”处填写127.0.0.1,“端口”处填写8090(跟BurpSuite代理服务端口值保持一致),同时勾选“也将此代理用于FTP和HTTPS”,设置完成后点击“确定”按钮
- 步骤3:下载并安装浏览器CA证书
- (1)利用FireFox浏览器访问http://burp或127.0.0.1:8090,点击页面右上侧的“cA Certificate”处下载CA证书(cacert.der)
- (2)在FireFox浏览器上选择菜单项“工具”->“选项”->“隐私与安全”>“证书”,点击“查看证书”按钮,在弹出的“证书管理器°对话框中选择“证书颁发机构”标签页,点击“导入”按钮,将刚刚下载的cacert.der导入,导入时注意勾选“信任由此证书颁发机构来标识网站”
- 步骤4:HTTPS报文抓取
- (1)开启BurpSuite的拦截功能,具体方法为︰选项卡Proxy->Intercept,设置lntercept is on
- (2)重启FireFox浏览器,并访问https://www.baidu.com,观察到BurpSuite已经抓到了一个HTTPS请求报文
(2)BurpSuite Repeater模块
Repeater模块功能及场景应用:
- 作为BurpSuite中一款手工验证HTTP消息的测试工具,Repeater通常用于多次重放请求响应和手工修改请求消息及修改后对服务器端响应的消息分析,如:
- 修改请求参数,验证输入的漏洞
- 修改请求参数,验证逻辑越权
- 从拦截历史记录中,捕获特征性的请求消息进行请求重放
Repeater模块应用实例(POST注入):
- 步骤1:进入SQLi-Labs,选择Less-11
- 步骤2:设置BurpSuite代理服务端口和FireFox浏览器的代理端口(本例中均为8090)
- 步骤3︰开启BurpSuite拦截功能,并在SQLi-Labs的Less-11登录页面输入用户名admin和任意密码,点击login按钮,此时BurpSuite Proxy会拦截到HTTP请求报文。
- 步骤4:选中拦截到HTTP请求包,点击鼠标右键,选择“Send to Repeater",将此HTTP请求包发送至Repeater模块。
- 步骤5:在Repeater模块的Request框中,通过修改HTTP请求参数后点击“Go"按钮提交,并观察Response框中显示的服务器返回结果,实施POST注入。
- (1)判断注入点类型
- (2)判断字段数
- (3)判断回显位置
- (4)获取数据库名
- (5)获取数据库表名
- (6)获取字段名
- (7)获取字段值
(3)BurpSuite插件
Extender模块主要由四个子模块组成:
- Extensions:扩展
- BApp Store:应用程序商店
- APIs:扩展API
- Options:选项
常用的Burpsuite插件:
- Logger++ : BurpSuite自带的日志只记录了HTTP Proxy的请求,无法查看Repeater、Intruder等模块的历史记录,Logger++增加了这方面的功能,可以方便地筛选查看各模块历史记录
- CSRF Token Tracker:用于渗透测试过程中CSRF Token的自动更新
- XSS Validator:用于增强BurpSuite对XSS漏洞的检测
- CO2:包含多个小工具如SQLMapper、User Generator、Prettier JS、ASCll Payload Processo、Masher等功能等
- Heartbleed:经典的Heartbleed心脏出血漏洞
- J2EEScan:该插件能够检测JBoss、Tomcat、Weblogic、Oracle应用服务器、Jetty、Apache Axis、JBoss SEAM、Java Server Faces、ApacheWicket、Grails、Apache Struts以及多种CVE漏洞
(4)BurpSuite Intruder模块
Intruder模块的工作原理:Intruter在原始请求数据的基础上,通过修改各种请求参数,以获取不同的请求应答。每一次请求中,Intruder通常会携带一个或多个有效攻击载荷( payload),在不同的位置进行攻击重放,通过应答数据的比对分析来获得需要的特征数据
lntruder模块的常见应用场景:
- 标识符枚举: Web应用程序经常使用标识符来引用用户、账户、资产等数据信息,例如用户名、密码、文件ID等
- 提取有用的数据:在某些场景下,需要通过简单标识符提取一些其他的数据。比如通过用户的个人空间id,获取所有用户在个人空间标准的昵称和年龄
- 模糊测试:很多输入型的漏洞,如SQL注入、XSS和文件路径遍历等,可以通过请求参数提交各种测试字符串,并分析错误消息和其他异常情况,来对应用程序进行检测。由于应用程序的复杂性,手动执行这个测试是一个耗时且繁琐的过程。这样的场景,可以设置payload,通过Intruder自动化地对Web应用程序进行模糊测试
lntruder模块组成:
- Target子选项卡:用于设置攻击目标
- Positions子选项卡:用于设置攻击位置和攻击模式
- payload的位置
- 攻击模式
- 狙击手模式(Sniper):单payload位置,单payload集合,简单替换,若有多个payload位置,则会在每一个位置上遍历一次payload集合
- 攻城锤模式(Battering ram) :多payload位置,单payload集合,在多个位置上使用相同的payload
- 草叉模式(Pitchfork) : 多payload位置,多payload集合,在每个payload位置上遍历对应的payload集合,攻击次数为最短的payload集合的元素个数
- 集束炸弹模式(Cluster bomb) : 多payload位置,多payload集合,以多个payload集合的笛卡尔积作为攻击序列。如第一个位置的payload集合是{A,B},第二格位置的payload集合是{C,D},则攻击序列为{<A,C>,<A,D>,<B,C>,<B,D>}
- payload的位置
- Payloads子选项卡:用来设置攻击载荷(payload)
- payload类型(18种):
- 简单列表(SImple list):最简单的payload类型,配置一个字符串列表作为payload,也可以手工添加字符串列表或从文件加载字符串列表
- 运行时文件(Runtime file):指定文件,作为相应payload位置上的payload列表
- 自定义迭代器(Custom iterator):它共有8个占位,每个占位可以定义一个简单列表,最终所使用的payload为每一个占位的简单列表的笛卡儿积
- 字符串替换(Character substitution):对预定义的字符串进行“枚举替换”后生成新的payload
- 递归提取(Recursive grep):从服务器端提取有效数据的场景,需要先从服务器的响应中提取数据作为payload,然后替换payload的位置,进行攻击。递归的配置需要进入Options->Grep-Extract进行配置;使用Recursivegrep模式时,线程数必须为1
- 字符块(Character blocks):使用一个给出的输入字符串,根据指定的设置产生指定大小的字符块,表现形式为生成指定长度的字符串
- 数字类型(Number):根据配置,生成一系列的数字作为payload
- 日期类型(Dates):根据配置,生成一系列的日期
- 暴力字典(Brute forcer):生成包含一个指定的字符集的所有排列特定长度的有效载荷,通常用于枚举字典的生成
- 空类型(Null payloads):产生的payload其值是一个空字符串
- payload复制(Copy other payload):这种类型的payload是将其他位置的参数复制到payload位置上
- payload类型(18种):
- Options子选项卡:
- 请求消息头设置(Request Headers)
- 请求引擎设置(Request Engine)
- 攻击结果设置(Attack Results)
- 正则匹配(Grep Match)
- 正则提取(Grep Extract)
- 则匹配payload (Grep payloads)
- 重定向( Redirections)
BurpSuite爆破实例:
- 实例一:DVWA暴力破解(Low级别):
- 步骤1:进入DVWA,将安全等级调至Low,并进入网站的暴力破解(BruteForce)模块
- 步骤2:设置BurpSuite代理服务端口和FireFox浏览器的代理端口(本例中均为8090)
- 步骤3:开启BurpSuite拦截功能,并在DVWA网站的暴力破解(Brute Force)模块登录处任意输入用户名和密码,点击login按钮,此时BurpSuite Proxy会拦截到HTTP请求报文
- 步骤4:选中拦截到HTTP请求包,点击鼠标右键,选择“Send to Intruder"
- 步骤5:进入选项卡Intruder-> Positions,先点击“Clear ”按钮清空默认选择的位置,然后依次选中“username=”和“password=”后面的值,并点击"Add ”按钮指定爆破位置,同时将Attack type设置为“Cluster bomb"(集束炸弹模式)。
- 步骤6:进入选项卡Intruder- >Payloads,设置2个payload set(效载荷集),分别用于爆破用户名(username)和密码(password)
- 步骤7:点击右上方的“Start attack”按钮执行爆破攻击,并观察结果。通过请求报文的长度或应答报文的内容判断,正确的用户名和密码为admin/password
- 实例二:DVWA暴力破解(High级别):
- 步骤1:进入DVWA,将安全等级调至High,并进入网站的暴力破解(BruteForce)模块
- 步骤2:设置BurpSuite代理服务端口和FireFox浏览器的代理端口(本例中均为8090)
- 步骤3:开启BurpSuite拦截功能,并在DVWA网站的暴力破解(Brute Force)模块登录处任意输入用户名和密码,点击login按钮,此时BurpSuite Proxy会拦截到HTTP请求报文。与Low级别不同的是,High级别拦截到的HTTP请求报文中含有user_token字段
- 步骤4:选中拦截到HTTP请求包,点击鼠标右键,选择“Send to Intruder"
- 步骤5:进入选项卡Intruder->Positions,按如下方式指定爆破位置,同时将Attack type设置为"Pitchfork”(草叉模式)
- 步骤6:进入选项卡Intruder->Payloads,设置2个payload set(有效载荷集):
- (1) 第一个payload set选择Custom iterator类型
- (2) 第二个payload set选择Recursive grep类型
- 步骤7:进入选项卡lntruder->Options
- (1) 在Request Engine处将线程数设置为1
- (2) 在Grep-Extract处设置为递归提取的内容
- (3) 在Redirections处设置“Follow Redirections”为“always”(总是跟随重定向)
- 步骤8:回到选项卡Intruder->Payloads,在Payload Options处设置初始token值(即为步骤7(2)中选中的token值)
- 步骤9:点击右上方的“Start attack”按钮执行爆破攻击,并观察结果。通过请求报文的长度或应答报文的内容判断,正确的用户名和密码为admin/password
5、Metasploit
(1)Metasploit介绍
Metasploit简介:
- Metasploit是一款开源的安全漏洞检测工具,同时Metasploit是免费的工具,因此安全工作人员经常使用Metasploit工具开监测系统的安全性
- Metasploit Framework (MSF)在2003年以开放源码方式发布,是可以自由获取的开发框架。它是一个强大的开源平台,供开发、测试和使用恶意代码,这个环境为渗透测试、shellcode编写和漏洞研究提供了一个可靠平台
- Metasploit核心中绝大部分由Ruby实现,一小部分由汇编和C语言实现
- Metasploit官网
Metasploit发展历程:
- Metasploit Framework最初是HD Moore个人的想法,当时他在一家安全公司工作,他于2003年10月发布了第一个基于Perl的Metasploit版本,一开始只有共11个漏洞利用程序
- 随着Spoonm帮助和加入,HD于2004年4月重写了该项目并发布了Metasploit 2.0。此版本包括19个漏洞和超过27个payload。在这个版本发布后不久,马特米勒(Skape)加入了Metasploit的开发团队,使得该项目日益流行,Metasploit Framework也受到来自信息安全界的大力支持,并迅速成为一个渗透测试必备的工具
- 2007年,Metasploit团队使用Ruby编程语言完全重写并发布了Metasploit3.0,这次Metasploit从Perl到Ruby的迁移历时18个月,增加超过15万行的新代码。随着3.0版本的发布,Metasploit开始被广泛的采用,在整个安全社区也受到了大幅增加的帮助和贡献
- 在2009年秋季,Rapid7收购了Metasploit,Rapid7是一个在漏洞扫描领域的领导者公司。被收购之后,Rapid7公司允许HD建立一个团队,仅仅专注于Metasploit Framework的开发。也正由于这样,这次收购使得MetasploitFramework开始更迅速地发展,HD Moore也成为了Rapid7公司的CSO及Metasploit首席架构师
Metasploit下载与安装:
Metasploit文件结构:
- 路径:/usr/share/metasploit-framework/
- config:MSF环境配置信息,数据库配置信息
- data:后渗透模块的一些工具及payload ,第三方小工具集合,用户字典等数据信息
- documentation:用户说明文档及开发文档
- external:MSF的一些基础扩展模块
- lib:基础类和第三方模块类
- modules:MSF系统工具模块
- plugins:第三方插件接口
- scripts:MSF的常用后渗透模块,区别于data里的后渗透模块,不需要加post参数和绝对路径,可以直接运行
- tools:额外的小工具和第三方脚本工具
- msfconsole:MSF基本命令行,集成了各种功能
- msfd:MSF服务,非持久性服务
- msfdb:MSF数据库
- msfupdate:MSF更新模块,可以用来更新MSF模块
- msfrpc:MSF的服务端,非持久性的rpc服务
- msfrpcd:持久性的MSF本地服务,可以给远程用户提供rpc服务以及其他的http服务,可以通过xmi进行数据传输
Metasploit模块:
- exploits(渗透攻击/漏洞利用模块)
- 渗透攻击模块是利用发现的安全漏洞或配置弱点对远程目标进行攻击,以植入和运行攻击载荷,从而获得对远程目标系统访问的代码组件。流行的渗透攻击技术包括缓冲区溢出、Web应用程序漏洞攻击、用户配置错误等,其中包含攻击者或测试人员针对系统中的漏洞而设计的各种POC验证程序,以及用于破坏系统安全性的攻击代码,每个漏洞都有相应的攻击代码。
- 渗透攻击模块是Metasploit框架中最核心的功能组件。
- payloads(攻击载荷模块)
- 攻击载荷是我们期望目标系统在被渗透攻击之后完成实际攻击功能的代码,成功渗透目标后,用于在目标系统上运行任意命令或者执行特定代码。
- 攻击载荷模块从最简单的添加用户账号、提供命令行Shell,到基于图形化的VNC界面控制,以及最复杂、具有大量后渗透攻击阶段功能特性的Meterpreter,这使得渗透攻击者可以在选定渗透攻击代码之后,从很多适用的攻击载荷中选取他所中意的模块进行灵活地组装,在渗透攻击后获得他所选择的控制会话类型,这种模块化设计与灵活的组装模式也为渗透攻击者提供了极大的便利。
- auxiliary(辅助模块)
- 该模块不会直接在测试者和目标主机之间建立访问,它们只负责执行扫描、嗅探、指纹识别等相关功能以辅助渗透测试。
- nops(空指令模块)
- 空指令(NOP)是一些对程序运行状态不会造成任何实质性影响的空操作或无关操作指令。最典型的空指令就是空操作,在x86 CPU体系架构平台上的操作码是0x90。
- 在渗透攻击构造邪恶数据缓冲区时,常常要在真正执行的Shellcode之前添加一段空指令区。这样,当触发渗透攻击后跳转执行Shellcode时,就会有一个较大的安全着陆区,从而避免受到内存地址随机化、返回地址计算偏差等原因造成的Shellcode执行失败。
- Matasploit框架中的空指令模块就是用来在攻击载荷中添加空指令区,以提高攻击可靠性的组件。
- encoders(编码器模块)
- 编码器模块通过对攻击载荷进行各种不同形式的编码,完成两大任务:一是确保攻击载荷中不会出现渗透攻击过程中应加以避免的“坏字符”;二是对攻击载荷进行“免杀”处理,即逃避反病毒软件、IDS/IPS的检测与阻断。
- post(后渗透攻击模块)
- 后渗透攻击模块主要用于在渗透攻击取得目标系统远程控制权之后,在受控系统中进行各式各样的后渗透攻击动作,比如获取敏感信息、进一步横向拓展、实施跳板攻击等。
- evasion(规避模块)
- 规避模块主要用于规避Windows Defender防火墙、Windows应用程序控制策略(applocker)等的检查。
Metasploit常用命令:
(2)exploits模块使用
缓冲区溢出攻击:缓冲区是内存中存放数据的地方。在程序试图将数据放到计算机中某一位置,但没有足够空间时会发生缓冲区溢出。缓冲区溢出攻击利用编写不够严谨的程序,通过向程序缓冲区写入超过预定长度的数据,造成缓存的溢出,从而破坏程序的堆栈,导致程序执行流程改变
exploits(渗透攻击/漏洞利用模块):
- 渗透攻击模块是利用发现的安全漏洞或配置弱点对目标进行攻击,以植入和运行攻击载荷,从而获得对远程目标系统访问的代码组件
- 渗透攻击模块包括缓冲区溢出、Web应用程序漏洞攻击、用户配置错误等多种攻击方法。其中缓冲区溢出攻击方法数量最多,总的来说分为两大类,即主动溢出和被动溢出,主动溢出是针对目标主机的漏洞主动地进行攻击以获得控制权限,被动溢出是针对目标主机被动的监听让偶获得相应的操作
- exploits模块支持的操作系统类别包括:AIS、BSDI、Dialup.FreeBSD、Hpux、lrix、Linux、Netware、OSX、Solaris、Unix、Windows等。其中windows的溢出方式数量最多。
- /usr/share/metasploit-framework/modules/exploits
利用Metasploit进行渗透攻击测试的一般流程:
- 扫描目标机系统,寻找可用漏洞
- 选择并配置一个渗透攻击(漏洞利用)的模块(exploits)
- 选择并配置一个攻击载荷模块(payloads)
- 选择一种编码技术(encoders),用来绕过杀毒软件的查杀
- 执行渗透攻击
- 后渗透攻击阶段操作
exploit模块实例:
- 实例1:ms08-067漏洞利用
- 实例2:ms17-010漏洞利用
reverse_tcp与blind_tcp:
- reverse_tcp:攻击机设置一个端口(LPORT)和IP(LHOST),Payload在目标机执行连接攻击机IP的端口,这时如果在攻击机监听该端口会发现目标机已经连接
- victim_IP:xxxx -> attacker_IP:4444
- bind_tcp:攻击机设置一个端口(LPORT),Payload在目标机执行打开该端口,以便攻击机可以接入
- attacker_IP:xxxx -> victim_IP:4444
- 关于reverse的方法一般较为安全,因为是目标机主动连接攻击机,所以一般不会被防火墙发现。而采用bind的方法,攻击机主动连接目标机(即需要在目标机上打开端口)时很容易被安全阮籍和防火墙发现
(3)auxiliary模块使用
auxiliary(辅助模块):
- 主要功能:执行扫描、嗅探、指纹识别等相关功能以辅助渗透测试
- 与exploits模块区别:
- exploits模块一般需要和payloads模块联合使用,通过exploits模块渗透成功后执行payloads模块中的代码
- auxiliary模块不需要和payloads模块联合使用
- /usr/share/metasploit-framework/modules/auxiliary
auxiliary模块应用实例:
- 实例一:ms12-020漏洞利用
- 实例二:网络主机存活扫描
- 实例三:Web目录扫描
- 实例四:FTP登录密码爆破
(4)meterpreter模块
meterpreter模块:
- Metasploit V4之后的版本中,meterpreter作为后渗透攻击模块的实施通道,可根据渗透测试目标需求进行灵活扩展
- 涉及范围:信息收集、口令提取、权限提升、内网拓展等
meterpreter的技术优势:
- 平台通用性:提供了各种主流操作系统和平台上的meterpreter版本,包括Windows、Linux、BSD等,并同时支持x86和x64平台,另外还提供基于Java和PHP语言的实现,以应对各种不同环境。
- 纯内存工作模式:工作时直接装载meterpreter的动态链接库到目标进程空间,而不是先上传到磁盘,再调用loadlibrary加载动态链接库启动。这样启动隐蔽,很难被杀毒软件检测到,也不会在目标主机磁盘留下任何痕迹。
- 灵活且加密的通信协议:采用TLV (Type Length Value)数据封装格式;通信数据经过XOR加密,然后调用OpenSSL库进行SSL封装传输,保证传输的保密和隐蔽性。
- 易于扩展:meterpreter的插件以动态链接库文件的形式存在,可以根据喜好或习惯选择编程语言,并按照meterpreter的接口形式编写所需要的功能,然后编译成动态链接库,拷贝至相应目录即可。
meterpreter常用命令:
meterpreter脚本:
- 默认存放路径:/usr/share/Metasploit-framework/scripts/meterpreter/
- 使用方法:run 【脚本名称】
- 常用脚本:
- vnc:改脚本可以往目标机上上传一个vnc\阿根廷、,可以查看目标机的屏幕
- arp_scanner:改脚本课可以检测所在局域网中的存活主机
- scraper:改脚本可以列举目标系统信息,包括攫取用户名和密码、下载全部注册表、挖掘密码hash值、输出HKEY_CURRENT_USER(HKCU)等
- persisterce:改脚本允许在目标机注入meterpreter代理,以确保系统重启之后meterpreter还能运行
meterpreter脚本使用实例:
- 实例一:persistence使用实例
- 实例二:meterpreter其他脚本使用
6、FireFox浏览器渗透测试插件
(1)Firefox浏览器及插件概述
Firefox简介:
- Firefox是一个出资Mozilla组织流行的Web浏览器。Firefox的流行并不仅仅是因为它是一个好的浏览器,而且它能支持插件进而强化它自身的功能
- Mozilla有一个插件站点,其中一些插件对于渗透测试人员和安全分析人员来说是相当有用的。这些渗透测试插件能帮助我们执行不同类型的渗透,并能从浏览器中更改头部。对于渗透测试中涉及的相关工作,使用插件的方式可以减少我们对独立工具的使用
- Firefox典型插件:
- FoxyProxy
- User-Agert Switcher
- Hackbar
- HTTP Header Live
- Flagfox
- Wappalyzer
- Firefox浏览器插件通用下载路径
Firefox浏览器插件通用安装方法:
(2)Hackbar的使用
Hackbar简介:
- Hackbar是一个简单的渗透测试工具,能用于测试简单的SQL注入、XSS、本地文件包含、XXE等漏洞
- Hackbar基本功能:
- 加载(Load)、切分(Split)和执行(Execute)URL
- 对选定字符串进行加密
- 对选定字符串进行编/解码
- 提供三种数据库的SQL查询语句
- 提供XSS攻击payload
- 提供LFI(本地文件包含)攻击payload
- 提供XXE攻击payload
- 传递POST表单数据
(3)其他插件的使用
FoxyProxy:FoxyProxy是一个发哦记得代理管理插件,能够提高firefox的内置代理的兼容性,可基于URL的参数在一个或多个代理之间进行切换
User-Agent Switcher:该插件用于改变HTTP头部中的User Agent,利用它可以实现隐藏(伪装)客户端浏览器信息的目的
HTTP Header Live:支持即时查看网站的HTTP头
Wappalyzer:支持分析目标网站所采用的平台架构、网站环境、服务器配置环境、JavaScript框架、编程语言等参数
Flagfox:安装到浏览器后会显示一个国旗来告知Web服务器的位置,同时也包含Whois、ping等功能
7、社会工程学工具SET
(1)社会学工具概述
社会工程学:
- 使用计谋、假情报或人际关系去火的利益和其他敏感信息
- 攻击对象——人——秘密信息的保存者,信息安全链中最薄弱的环节
- 利用受害者的本能反应、好奇心、信任、贪婪等心里弱点进行欺骗、伤害
常见社会工程学攻击方式:
- 环境渗透:对特定的环境进行渗透,是社会工程学为了获得所需的情报或敏感信息经常采用的手段之一。社会工程学攻击者通过观察目标对电子邮件的响应速度、重视程度以及可能提供的相关资料,比如一个人的姓名、生日、ID电话号码、管理员的IP地址、邮箱等,通过这些收集信息来判断目标的网络构架或系统密码的大致内容,从而获取情报。
- 引诱:网上冲浪经常碰到中奖、免费赠送等内容的邮件或网页,诱惑用户进入该页面运行下载程序,或要求填写账户和口令以便“验证”身份,利用人们疏于防范的心理引诱用户,这通常是黑客早已设好的圈套。
- 伪装欺骗:目前流行的网络钓鱼事件以及更早以前的求职信病毒、圣诞节贺卡,都是利用电子邮件和伪造的Web站点来进行诈骗活动的。有调查显示,在所有接触诈骗信息的用户中,有高达5%的人都会对这些骗局做出响应。
- 说服:说服是对信息安全危害较大的一种社会工程学攻击方法,它要求目标内部人员与攻击者达成某种一致,为攻击提供各种便利条件。个人的说服力是一种使某人配合或顺从攻击者意图的有力手段,特别地,当目标的利益与攻击者的利益没有冲突,甚至与攻击者的利益一致时,这种手段就会非常有效。如果目标内部人员已经心存不满甚至有了报复的念头,那么配和就很容易达成,他甚至会成为攻击者的助手,帮助攻击者获得意想不到的情报或数据。
- 恐吓:社会工程学师常常利用人们对安全、漏洞、病毒、木马、黑客等内容的敏感性,以权威机构的身份出现,散布安全警告、系统风险之类的信息,使用危言耸听的伎俩恐吓欺骗计算机用户,并声称如果不按照他们的要求去做,会造成非常严重的危害或损失。
- 恭维:高明的黑客精通心理学、人际关系学、行为学等社会工程学方面的知识与技能,善于利用人类的本能反应、好奇心、盲目信任、贪婪等人性弱点设置陷阱,实施欺骗,控制他人意志为己服务。他们通常十分友善,很讲究说话的艺术,知道如何借助机会均等去迎合人,投其所好,使多数人会友善地做出回应,乐意与他们继续合作。
- 反向社会工程学:反向社会工程学是指攻击者通过技术或者非技术的手段给网络或者计算机应用制造“问题”,使其公司员工深信,诱使工作人员或网络管理人员透露或者泄漏攻击者需要获取的信息。这种方法比较隐蔽,很难发现,危害特别大,不容易防范。
(2)SET使用
SET简介:
- SET (Social Engineering Toolkit)是Kali Linux中集成的一款社会工程学工具包,它是一个基于Python的开源的社会工程学渗透测试工具。这套工具包由David Kenned设计,而且已经成为业界部署实施社会工程学攻击的标准。
- SET利用人们的好奇心、信任、贪婪及一些愚蠢的错误,攻击人们自身存在的弱点。SET最常用的攻击手法包括:用恶意附件对目标进行E-mail钓鱼攻击、Java Applet攻击、基于浏览器的漏洞攻击、收集网站认证信息、建立感染的便携媒体、邮件群发等攻击手段。
Kali中启动SET:
- 方法一:选择系统菜单->社会工程学工具集(Social Engineering Tools) ->socialengineering toolkit
- 方法二:在终端输入setoolkit命令
SET菜单项说明:
SET使用实例:
- 实例一:建立钓鱼网站手机目标凭证
- 实例二:二维码攻击
8、密码攻击工具
(1)密码存储与密码攻击
密码存储方法:
- 明文存储:将用户密钥以普通文本的方式保存在数据库字段中,这种方法的安全性最低,黑客很容易获得用户的密钥
- 加密存储:一般常用的是对称加密方法,该方法使用系统密钥对所有用户密钥进行加密。这种方法的关键在于系统密钥的安全性,如果系统密钥泄露,所有用户的密钥将变得不安全
- Hash存储(最常用):利用单项散列(杂凑)函数对用户密钥进行运算得到Hash值(指纹)并存储在数据库中。与第二种方法相比,这种方法的好处是不需要存储和保护系统密钥,且攻击者无法通过Hash值逆向计算出用户密钥的明文
- Hash函数H(x)的特性:
- 固定长度的输出:函数H(x)的输入可以是任意长度,而输出是固定长度
- 单向性:已知x,求出h=H(x)较为容易;但已知h,求使得H(x)=h的x在计算上是不可行的
- 弱碰撞自由性:已知x,找出y (y≠x)使得H(y)=H(x)在计算上是不可行的
- 强碰撞自由性:找出任意两个不同的输入x、y,使得H(y)=H(x)在计算上是不可行的
- 常用Hash函数(算法):
- MD5
- SHA系列(主要包括SHA-1、SHA-224、SHA-256、SHA-384和SHA-512)
- Hash函数H(x)的特性:
密码攻击:
- 概念:已经获取目标密钥Hash值或加密后的密文的情形下,利用某种方式还原出目标密钥的明文的过程
- 一般方法:
- 1、暴力攻击:尝试对所有可能的密钥组合进行相同的Hash运算,并将计算结果与目标密钥的Hash值进行比对,比对结果一致则破解成功。特点:时间成本高。
- 2、字典攻击(Dictionary Attack):提前构建一个“明文->密文”对应关系的一个大型数据库(字典),破解时通过密文直接反查明文。特点:存储一个这样的数据库(字典),空间成本高。
- 3、彩虹表攻击(Rainbow Table Attack):特点:在字典法的基础上改进,以时间换空间。常用的彩虹表:http:l/project-rainbowcrack.com/table.htm
抵抗字典及彩虹表攻击的方法:
(2)Hashcat的使用
Hashcat简介:
- Hashcat是自称世界上最快的密码恢复工具,它在2015年之前拥有专有代码库,但现在作为免费软件发布。
- Hashcat适用于Linux、OS X和Windows等操作系统,支持多种计算核心(包括CPU、GPU、APU、DSP、FPGA等)。
- Hashcat支持的散列算法有Microsoft LM哈希、MD4、MD5、SHA系列、Unix加密格式、MySQL和Cisco PIX等。
使用Hashcat进行密码攻击的关键:
- 选择国构造一本强大的字典
- 了解目标的Hash类型(算法)
Hashcat常用选项参数:
Hashcat的破解模式:
Hashcat的Hash类型:
Hashcat的掩码字符集:
Hashcat掩码运用实例:
- 实例一:字典破解(-a o)
- 实例二:组合破解(-a 1)
- 实例三:掩码暴力破解(-a 3)
(3)Hydra的使用
Hydra简介:
- Hydra (九头蛇)是一个相当强大的暴力密码破解工具。该工具支持几乎所有协议的在线密码破解,如FTP、HTTP、HTTPS、MySQL、MS SQL、Oracle、Cisco,IMAP和VNC等。
- Hydra能够在Linux、Windows、Cygwin、Solaris11、FreeBSD8.1、OpenBSD、osx、QNX/Blackberry上测试和编译。
Hydra常用功能选项:
利用Hydra进行密码攻击的一般步骤:
- 1、选择目标:输入目标地址,可选:单独IP、CIDR、文档中的列表
- 2、选择协议:输入需要爆破的协议,如ftp://等,需要开始之前探测服务
- 3、检查参数:假如爆破需要加入额外的参数则添加即可
Hydra使用实例:
- 实例1:爆破FTP服务器登录密码(已知用户名)
实例二:爆破FTP服务器的用户名和密码1
- 实例三:爆破FTP服务器的用户名和密码2
- 实例四:爆破远程桌面服务的用户名和密码
(4)Crunch的使用
Crunch简介:
- Crunch是一种创建密码字典的工具,按照指定的规则生成密码字典,可以灵活的制定自己的字典文件。
- 使用Crunch工具生成的密码可以输出到屏幕、保存到文件或另一个程序。
- Kali中自带crunch工具,可直接在Kali中使用。
Crunch命令格式:
Crunch常用选项参数:
Crunch使用实例:
- 实例一:
- 实例二:
- 实例三:
- 实例四:
9、漏洞扫描工具
(1)安全漏洞概述
漏洞产生原因:
- 技术原因:软件系统复杂性高,质量难于控制,安全性降低;公共模块的使用引发了安全问题
- 经济原因:“柠檬市场”效应——安全功能是最容易删减的部分
- 环境原因:从传统的封闭、静态和可控变为开放、动态和难控;攻易守难
- 安全缺陷:安全性缺陷是信息系统或产品自身“与生俱来”的特征,是其“固有成分”
安全漏洞的生命周期:
- 阶段一,安全漏洞研究与挖掘:由高技术水平的黑客与渗透测试师开展,主要利用源代码审计(白盒测试)、逆向工程(灰盒测试)、Fuzz测试(黑盒测试)等方法,挖掘出目标系统中存在的可被利用的安全漏洞。
- 阶段二,渗透代码开发与测试:在安全漏洞挖掘的同时,黑客们会开发概念验证性的渗透攻击代码(POC),用于验证找到的安全漏洞是否确实存在,并确认其是否可被利用。
- 阶段三,安全漏洞和渗透代码限于封闭团队:在发现安全漏洞并给出渗透攻击代码后,“白帽子”采用的处理策略是首先通知厂商进行修补,而在厂商给出补丁后再进行公布;而“黑帽子”一般在封闭小规模团队中进行秘密地共享,以充分利用这些安全漏洞和渗透攻击代码所带来的攻击价值。
- 阶段四,安全漏洞和渗透代码开始扩散:由于各种原因,在封闭团队中秘密共享的安全漏洞和渗透代码最终会被披露出来,在互联网上得以公布,“黑帽子”会快速对其进行掌握和应用,并在安全社区中开始快速扩散。
- 阶段五,恶意程序出现并开始传播:“黑帽子”们将在掌握安全漏洞和渗透代码基础上,进一步开发更易使用、更具自动化传播能力的恶意程序,并通过黑客社区组织结构和互联网进行传播。在此过程中,厂商完成补丁程序开发和测试,并进行发布。
- 阶段六,恶意程序大规模传播并危害互联网:厂商发布补丁程序和安全预警将更进一步的让整个黑客社区了解出现新的安全漏洞和相应的渗透代码、恶意程序,更多的“黑帽子”们将从互联网或社区关系网获得并使用这些恶意程序,对互联网的危害也达到顶峰。
- 阶段七,渗透攻击代码、攻击工具、恶意程序逐渐消亡:在厂商补丁程序、安全公司提供的检测和移除机制得到广泛应用后,相应的渗透代码、恶意程序将被“黑帽子”们逐渐抛弃,从而慢慢的消亡。
CVE:
- CVE:公共漏洞和暴露
- 特点:
- 为每个漏洞和暴露确定了唯一的名称给每个漏洞和暴露一个标准化的描述不是一个数据库,而是一个字典
- 任何完全迥异的漏洞库都可以用同一个语言表述,可以使得安全事件报告更好地被理解,实现更好的协同工作
- 可以成为评价相应工具和数据库的基准非常容易从互联网查询和下载
- 通过“CVE编辑部”体现业界的认可
安全漏洞风险评级:
- 微软设置风险等级:低级(Low)、中危(Moderate)、重要(Important)和严重(Critical)
- CVSS通用漏洞评分系统:最大10分,最小0分。得分7~10的漏洞通常被认为比较严重,得分在4~6.9之间的是中级漏洞,0~3.9的则是低级漏洞
- 基本评估指标:代表长期存在的本质的、基本的脆弱性,这种脆弱性不会随时间和用户环境改变。
- 时效性评估指标:随时间改变但不随用户环境改变的脆弱性。
- 环境评估指标:代表和用户环境直接相关的脆弱性。
- CNNVD中国国家信息安全漏洞库:隶属于中国信息安全测评中心,是中国信息安全测评中心为切实履行漏洞分析和风险评估的职能,负责建设运维的国家级信息安全漏洞库,为我国信息安全保障提供基础服务。
- CNVD国家信息安全漏洞共享平台:隶属于国家计算机网络应急技术处理协调中心
漏洞与补丁:
- 安装补丁是漏洞消减的技术手段之一:
- 及时安装有效补丁可避免约95%的信息安全损失
- 专门用于修复漏洞的软件补丁一般称为安全补丁补丁
- 安装中需要注意的问题:
- 可靠来源
- 补丁测试
- 备份及应急措施
- 虚拟补丁:
- 虚拟补丁技术是通过控制所保护系统的输入输出,防止对系统的漏洞攻击行为的技术
- 虚拟补丁是一种基于主机的安全功能,在未对漏洞进行永久补丁修复之前,其工作原理不是修改可执行程序,而是针对网络数据流的深层分析,检测入站流量并保护应用程序免受攻击
- 虚拟补丁技术较早的使用是在Web应用系统上,较早提出这个概念的是趋势科技,近来绿盟也加入了这个领域,也是在Web上。数据库的虚拟补丁是近几年的防御技术,较早提出的是Mcaffee,国内数据库安全厂商安华金和也是这方面的佼佼者
(2)AWVS的使用
AWVS:
- AwVS,全称Acunetix Web Vulnerability Scanner,是一款知名的Web网络漏洞扫描工具,可以用来测试网站、Web应用程序及接口的安全性。
- AWVS能够检测7000种以上的Web安全漏洞,包括SQL注入、XSS、配置不当、弱密码等常见类型。
AWVS 14菜单项:
- Target:目于设置扫描目标参数
- Add Target:增加单个目标
- Add Targets:增加多个目标
- Target Groups:设置目标组
- Vulnerabilities:用于显示和管理AWVS扫描出的所有漏洞类型、级别及详情统计信息
- Scan:用于设置、启动扫描任务
- Scan information
- Vulnerabilities
- Site Structure
- Events
- Reports:用于生成扫描报告,可基于漏洞、扫描任务或扫描目标生成报告
AWVS 14使用实例:
(3)Nikto的使用
Nikto简介:
- Nikto是一款基于Perl语言开发的开源Web扫描评估软件,可以对Web服务器进行多项安全测试,能在230多种服务器上扫描出2600多种有潜在危险的文件、CGI及其他问题。
- Nikto可以扫描指定主机的Web类型、主机名、指定目录、特定CGI漏洞、返回主机允许的HTTP模式等。
Nikto常用命令:
Nikto使用实例:
(4)OWASP ZAP的使用
OWASP ZAP简介:
- OWASP ZAP:(OWASP Zed Attack Proxy,OWASP攻击代理服务器)是世界上最受欢迎的免费安全工具之一。ZAP可以帮助我们在开发和测试应用程序过程中自动发现Web应用程序中的安全漏洞。另外,它也是一款提供给具备丰富经验的渗透测试人员进行人工安全测试的优秀工具。
- 工作原理:ZAP以架设代理的形式来实现渗透性测试。它将自己置于用户浏览器和服务器中间,充当一个中间人的角色,浏览器与服务器的所有交互都要经过ZAP,这样ZAP就可以获得所有交互的信息,并且可以对它们进行分析、扫描,甚至是改包再发送。
- 主要功能:本地代理、主动扫描、被动扫描、Fuzzy、暴力破解
OWASP ZAP使用实例:
10、Webshell管理工具
(1)Webshell简介
Webshell简介:
- Webshell是以ASP、PHP、JSP或者CGl等网页文件形式存在的一种代码执行环境,主要用于网站管理、服务器管理、权限管理等操作。
- Webshell使用方法简单,只需上传一个代码文件,通过网址访问,便可进行很多日常操作,极大地方便了使用者对网站和服务器的管理。
- 正因如此,也有小部分人将代码修改后当作后门程序使用,以达到控制网站服务器的目的。
- Webshell的作用:
- 一方面,Webshell常常被站长用于网站管理、服务器管理等,可以在线编辑网页脚本、上传下载文件、查看数据库、执行任意程序命令等。
- 另一方面, Webshell也常常被入侵者利用,达到控制网站服务器的目的。这些网页脚本常称为Web脚本木马,比较流行主要是ASP或PHP木马,也有基于.NET的脚本木马与JSP脚本木马。国内常用的Webshell有海阳ASP木马、Phpspy.c99shell等。
Webshell管理工具:
- 中国菜刀(chopper)
- 中国菜刀是一款专业的Webshell管理软件,用途广泛,使用方便,小巧实用。
- 只要支持动态脚本的网站,都可以用中国菜刀来进行管理。
- 在非简体中文环境下使用时,会自动切换到英文界面。
- 使用UNICODE方式编译,持多国语言输入显示。
- 蚁剑(AntSword)
- 蚁剑是一个开放源代码、跨平台的Webshell管理工具,旨在满足渗透测试人员以及具有权限和/或授权的安全研究人员以及网站管理员的需求。
- 蚁剑由两部分组成,一个是项目核心源码antSword,另一个是加载器。
- 常用功能:虚拟终端、文件管理、数据操作等。
- 相比于菜刀,蚁剑的功能更强大。
- 冰蝎(Behinder)
- Weevely
- weevely是一款Python编写的Webshell管理工具,它最大的优点在于跨平台,可以算作是Linux下的一款菜刀替代工具(限于PHP)。
- Kali Linux自带Weevely。
(2)Webshell工具使用
Webshell工具使用实例:
实例一:菜刀使用
实例二:蚁剑使用
实例三:Weevely使用实例
三、信息收集与社工技巧
1、信息收集总览
信息收集种类:
- DNS:
- Domain Name system域名系统,提供域名与IP地址之间的映射,是大型企业网站运转的核心
- 收集原因:
- 确定企业运行规模
- 可从DNS中收集子域名、IP等
- 控制网站解析
- 子域名:
- mail.XXX.com
- 收集原因:
- 确定企业网站运行数量,从而进行下一步(安全评估)准备
- 获得不同子域名所映射的IP,从而获得不同C段
- 寻找更大的安全脆弱点和面
- C段:
- 在IP地址的4段号码中,前3段号码为网络号码,剩下的1段号码为本地计算机的号码192.168.1.5/24
- 收集原因:
- 确定C段存活主机数量
- 确定C段中主机的端口,服务,操作系统等
- 邮箱:
- 收集原因:
- 通过分析邮箱格式和后缀,可以得知邮箱命名规律和邮箱服务器
- 为爆破登录表单收集数据,可形成字典
- 发送钓鱼邮件,执行高级APT控制
- 收集原因:
- 指纹:
- Web指纹:获取运行的脚本语言,开发框架,CMS,寻找脆弱点(漏洞)。如:.action一般可以确定为Struts2,如:Powered by **
- 中间件指纹:获取中间件使用的产品和版本,通过产品和版本查询是否有漏洞存在,如: struts2反序列化,iis文件解析
- 系统指纹:获取操作系统使用的产品和版本可以在以后渗透中提供渗透基准如:大小写,shell部署方式
- 社工库:
- 寻找指定目标的已经泄露的数据。如:邮箱,获取到企业内部人员已经泄露的密码,可以在撞库,爆破中使用如:姓名,手机号,找回密码,重置信息
- 寻找指定目标的已经泄露的数据。如:邮箱,获取到企业内部人员已经泄露的密码,可以在撞库,爆破中使用如:姓名,手机号,找回密码,重置信息
- 钓鱼攻击:
- 邮件、链接、办公文件
- 构造鱼叉攻击和水坑攻击
- 绕过边界防御设备
- 从内部瓦解防御网络,直接反弹shell
2、DNS介绍
DNS:
- Domain Name system域名系统,是将域名和IP地址相互映射的一个分布式数据库
- 协议:TCP/UDP
- 端口:53
- 域名长度:每一级域名长度的限制是63个字符,域名总长度则不能超过253个字符
IP地址查询方法:
- A记录查询:A记录指定域名对应的IP地址
- nslookup www.sangfor.com.cn
- dig www.sangfor.com.cn [+short] [@server] [+trace]
- NS(Name Server)记录查询:域名服务器记录查询
- dig -t NS www.163.com //-t用来指定查询的种类
- TXT记录查询:一般指某个主机名或域名的说明
- dig -t TXT www.163.com
- MX (Mail Exchanger)记录查询:邮件交换记录,它指向一个邮件服务器,用于电子邮件系统发邮件时根据收信人的地址后缀来定位邮件服务器
- dig -t MX 163.com
- CNAME记录查询:可以将注册的不同域名都转到一个域名记录上,由这个域名记录统━解析管理
- dig -t CNAME 163.com
- Whois查询:查询域名的IP以及所有者等信息的传输协议
- whois sangfor.com.cn
- 在线查询:
- whois.iana.org
- www.arin.netwho.is
- centralops.net/co/
- www.17ce.com
3、子域名收集
子域名收集原因:
- 子域名枚举可以在测试范围内发现更多的域或子域,这将增大漏洞发现的机率。
- 有些隐藏的、被忽略的子域上运行的应用程序可能帮助我们发现重大漏洞。
- 在同一个组织的不同域或应用程序中往往存在相同的漏洞
子域名收集方法:
- 爆破:通过字典匹配枚举存在的域名
- Kali:
- subDomainsBrute
- https://github.com/lijiejie/subDomainsBrute
- dnsmap
- subDomainsBrute
- WundowsL:
- fuzzDomain
- 子域名挖掘机
- Kali:
- 搜索引擎:通过搜索引擎获取已经爬取到的子域名
- 语法:Site:163.cn
- 工具:
- theharvester:利用google, bing, pgp, linkedin, google-profiles, jigsaw, twitter,公开信息收集,可以获取子域名,邮箱,主机,员工姓名,开放端口,banner。
- 常用语法: theharvester -d sangfor.com.cn -b all
- aquatone:不只通过简单的子域爆破,同时还会利用各种开放的互联网服务和资源,来协助其完成子域枚举任务,增加子域名爆破的成功率。aquatone分为三个阶段:发现,扫描,收集
- aquatone-discover发现:通过google、shodan、censys、爆破等多种方式过去目标存在的域名
- 常用语法:aquatone-discover -d sangfor.com.cn -t 1
- aquatone-scan扫描:经过发现阶段获取到的域名,然后扫描域名主机存活和开放端口
- 常用语法:aquatone-scan -d sangfor.com.cn -p 'port' -t 'threads'
- aquatone-gather收集:经过扫描以后发现存货的的域名和端口,aquatone-gather将自动访问存活的域名并截图
- 常用语法:aquatone-gather -d sangfor.com.cn
- aquatone-discover发现:通过google、shodan、censys、爆破等多种方式过去目标存在的域名
- theharvester:利用google, bing, pgp, linkedin, google-profiles, jigsaw, twitter,公开信息收集,可以获取子域名,邮箱,主机,员工姓名,开放端口,banner。
- 域传送:
- DNS区域传送(DNS zone transfer)指的是一台备用服务器使用来自主服务器的数据刷新自己的域(zone)数据库。为运行中的DNS服务提供了一定的冗余度,目的是为了防止主的域名服务器因意外故障变得不可用时影响到整个域名的解析。
- DNS区域传送操作只在网络里真的有备用域名DNS服务器时才有必要用到,但许多DNS服务器却被错误地配置成只要有client发出请求,就会向对方提供一个zone数据库的详细信息,所以说允许不受信任的因特网用户执行DNS区域传送(zone transfer)
- 危害:黑客可以快速的判断出某个特定zone的所有主机,收集域信息,选择攻击目标,找出未使用的IP地址,黑客可以绕过基于网络的访问控制
- 常用操作:
- dig @DnsServer axfr domain
- nslookup 进入交互->server dns domain ->ls domamin
- frerce -dns domain
- 在线网站:
- www.virustotal.com
- dnsdumpster.com
- tool.chinaz.com
4、C段扫描
C段扫描原因:
- 收集C段内部属于目标的IP地址
- 内部服务直线IP访问,没有映射域名
- 更多的探测主机目标资产
C段扫描方法:
- Nmap:快速扫描大型网络;可以获得主机运行的端口,服务,系统指纹;提供上百个扩展脚本
- Namp-扫描C段主机存活:
- Nmap -sn -PE -n 192.168.1.1/24 -oX out.xml
- -sn 不扫描端口
- -PE ICMP扫描
- -n 不进行dns解析
- Nmap-定向端口扫描
- Nmap -sS -Pn -p 3389 ip
- -sS 半开放扫描
- -Pn 不进行主机存活探测
- Nmap-全端口扫描
- Nmap -sS -Pn -p 1-65535 -n ip
- 扫描方式:半开放扫描
- Nmap-服务扫描
- Nmap -ss -sV -p 1-65535 -n ip
- 扫描方式:半开放扫描
- 显示出端口开放的服务
- Namp-扫描C段主机存活:
- Masscan:Masscan号称是最快的互联网端口扫描器,最快可以在六分钟内扫遍互联网,每秒传输1000万个数据包;允许任意地址范围和端口范围
- Masscan-安装:
- sudo apt-get install git gcc make libpcap-dev(安装必备环境,kali已经默认安装完成)
- git clone https://github.com/robertdavidgraham/masscancd masscan
- make(编译)
- Masscan-使用:
- masscan -p 80 ip/24 --rate 10000 -oL output.txt
- -p 设置端口
- --rate 发包速率
- -oL 输出位置
- Masscan -p 80 ip --excludefile special.txt
- 绕过扫描特定ip(添加--excludefile)
- 自定义多种格式输出:
- -oX 输出xml
- -oJ 输出json格式
- -oL 输出简单列表
- 注意问题:
- 扫描选项中必须添加端口-p、--ports 1-65535
- 目标主机是IP地址,不是域名
- masscan -p 80 ip/24 --rate 10000 -oL output.txt
- Masscan-安装:
5、Web目录扫描
目录扫描原因:
- 寻找到网站后台管理
- 寻找未授权界面
- 寻找网站更多隐藏信息
目标扫描方法:
- robors.txt:Robots协议(Robots Exclusion Protocol)“网络爬虫排除标准”,网站通过Robots协议告诉搜索引擎哪些页面可以抓取,哪些页面不能抓取。同时也记录网站所具有基本的目录
- 搜索引擎:搜索引擎会爬取网站下目录,并且不需要触碰网站任何防御设备
- 语法: site:sangfor.com.cn
- 爆破:通过字典匹配网站是否返回相应正确状态码,然后列出存在的目录。爆破可能会触发网站防火墙拦截规则,造成IP封禁
- dirb:DIRB是一个Web内容扫描程序;通过字典查找WEB服务器的响应;DIRB只能扫描网站目录不能扫描漏洞
- 方法:dirb https://www.sangfor.com.cn/XXX/wordlist.txt
- 参数:
- dirbuster:DirBuster多线程Java应用程序,主要扫描服务器上的目录和文件名;
扫描方式分为基于字典和纯爆破;OWASP下开源项目- 使用方法:
- 使用方法:
- dirb:DIRB是一个Web内容扫描程序;通过字典查找WEB服务器的响应;DIRB只能扫描网站目录不能扫描漏洞
6、指纹识别
系统指纹识别:
- 方法一:通过TCP/IP数据包发到目标主机,由于每个操作系统类型对于处理TCP/IP数据包都不相同,所以可以通过之间的差别判定操作
- nmap -ss -Pn -O ip
- nmap识别操作系统指纹必须使用端口,所以不允许添加-sn参数系统类型。
- 方法二:端口服务识别。每个操作系统都有特有的服务和端口,如:windows桌面连接使用的3389 RDP协议、445端口windows的smb协议开启端口、iis 80端口
- nmap -ss -sv ip
中间件指纹识别:
- 通过http返回消息中提取server字段
- 通过端口服务探测中间件,常用端口:Tomcat、Jboss 8080、weblogic 7001
- 通过构造错误界面返回信息查看中间件,主要构造不存在的路径和畸形数据
Web程序指纹识别:
识别目标:
- 开发语言:
- 后缀名识别 .asp、.php、.jsp,如果无法通过后缀名识别,可以通过抓包查看与后台交互点。如登录,查询
- http返回消息头 x-Powered-By
- cookie:PHPSESSIONID - > php, JSPSESSIONID - > jsp,ASPSESSIONIDAASTCACQ -> asp
- 开发框架:
- 第三方组件
- 一般包括流量统计、文件编辑器、模板引擎
- 识别方法:一般目录扫描
- FCKeditor
- CKEditor
- CMS程序
- 特定文件夹 dede/、 admin/admin_Login.aspx
- Powered by ***
- 网站favicon图标
- 数据库
- 常规判断,asp->sql server,php- > mysql,jsp-oracle
- 网站错误信息
- 端口服务,1433 -> sql server,3306 -> mysql,oracle—>1521
在线探测:
- 浏览器插件wappalyzer。可以探测内容管理系统,平台,开发语言,框架甚至更多
- 云悉https://www.yunsee.cn/。在线自动探测目标网站的数据库,开发语言,操作系统,web容器,CMS,开
发框架
防火墙指纹识别:
- 识别方法:
- nmap -p 80 --script http-waf-fingerprint目标
- sqlmap -u "domain" --identify-waf
7、GoogleHacking
逻辑运算式:
基本语法:
Google hacking 语法收集网站:https: // www.exploit-db.com/google-hacking-database/
应用实例:
8、网络空间搜索引擎
网络空间搜索引擎:
- 网络空间搜索引擎不同于搜索普通网页,而是直接搜索网络中存在主机,将主机信息汇聚成数据库,然后显示出主机的IP、端口、中间件、摄像头,工控设备banner等其他网络设备信息。
- 按照普通搜索引擎规则来搜索网络设备,如:ip:"192.168.1.0"。
常见搜索引擎:
- 国外引擎:shodan
- Shodan是国外人员开发的网络空间搜索引擎
- Shodan可以说是一款“黑暗”谷歌,一刻不停地在寻找着所有和互联网关联的服务器、摄像头、打印机、路由器等
- 凡是连接到互联网的红绿灯、安全摄像头、家庭自动化设备以及加热系统等都会被轻易地搜索到
- 基本语法:
- 基本使用:
- port:80 //搜索开放80端口的主机
- port:80 product:"nginx" //搜素开放80端口的主机,并且服务器是nginx
- net:ip地址/24 //C段探测
- http.favicon.hash:-395680774 //搜索favion
- 命令行操作:
- pip install shodan //安装命令行工具
- shodan init 'API Key' //初始化shaodan
- shodan count net:ip/24 //count统计结果
- shodan count net:port/3306
- shodan download <filename> <query type> //download下载数据,数据格式json
- shodan download XxX net:222.126.229.0/24
- shodan parse [option] <filenames> //解析json数据
- shodan parse --fields ip_str,port XXX.json.gz(或XXX.json)
- shodan host [option] <ip> //host搜索指定ip
- shodan host ip
- shodan search [option]<search query> //search搜索内容
- shodan search --fields ip_str,port net:ip/24
- shodan search --fields ip_str,port net:ip/24
- 国内引擎:zoomeye、fofa
9、情报分析
情报分析概念:
- 广义上情报分析是对全源数据进行综合、评估、分析和解读,将处理过的信息转化为情报以满足已知或预期用户需求的过程。
- 实际上对于网络空间情报分析主要对于目标的ip,域名,电话,邮箱,位置,员工,公司出口网络,内部网络等等进行收集,然后进行综合判断整理汇聚成数据库。
Maltego:
- Maltego是一种独特的工具,它对互联网上的信息进行收集、组织,并将这些信息显示在适于执行链路分析的、基于节点的图形上。
- 在kali中默认安装了maltego软件,可以直接在终端输入maltego进行启动
- 首次使用maltego需要注册
收集方法:
- 域名类:
- 单击标签machines
- 弹出对话框选择Footprint L3,点击next输入要进行收集的域名,点击finish
- 点击finish以后系统会自动收集关于该域名的互联网信息
- 通用类:
- 新建“graph"(ctrl +T)
- 在左侧选择对应的种类,拖入图中双击并修改信息(比如域名)
- 选择指定的“transforms"
收集结果:
- 从域名出发,收集网页、AS号、网络段、邮件服务器、地点等
- 收集完成以后依然还可以继续对每个点继续探测
- 探测方法:右键节点->点击All Transforms弹出的下拉列表中点击相应收集点即可立刻探测
- 左侧界面同样可以添加要是搜集信息点,如:IP,NS记录,A记录,邮箱
- 使用方法:选中某个收集点拖放到右边的界面,然后双击输入要探测的信息,同时右键选择该节点然后在弹出的列表中选择探测方法
- 如果收集到的信息和其他一样,maltego会自动关联
- 同时malego可以关联shodan搜索引擎,输入自己的key以后,可以使用shodan数据库探测
- maltego探测完毕以后可以导出探测数据,点击左上方的maltego图标弹出的下拉列表中export,然后紧接着选择Generate Roport
- 导出格式为PDF,输入名称,点击save,保存信息
10、社工库和多维度信息收集
杜工库:将互联网泄露的信息汇聚成数据库,简单说:黑客数据库。
多维角度信息收集:
- 通过app
- 通过微信公个口通过目标qq群
- 通过威胁情报
- 信服产业教育中心
- 通过网站开发者角度
- 通过运维角度
- 通过架构师角度去获得目标相关信息
信息收录实例:
11、Cobalt Strike配置
Cobalt Strike简介:
- Cobalt Strike是一款渗透测试软件,分为客户端与服务端,可以进行团队分布式操作
- 服务端:1个
- 客户端:N个
- Cobalt Strike集成了功能和模块:
- 端口转发
- 扫描多模式端口Listener
- Windows exe程序生成
- Windows dll动态链接库生成
- java程序生成
- office宏代码生成
Cobalt Strike安装配置及使用:
12、Office钓鱼
Office钓鱼:在无需交互、用户无感知的情况下,执行Office文档中内嵌的一段恶意代码,从远控地址中下载并运行恶意可执行程序。例如:远控木马或者勒索病毒等。
Cobalt Strike钓鱼:Cobalt Strike office钓鱼主要方法是生成一段vba代码,然后将代码复制到office套件中,当用户启动office自动运行。
Cobalt Strike钓鱼操作:
CVE-2017-11882漏洞:
- 漏洞为Office内存破坏漏洞,影响目前流行的所有Office版本。攻击者可以利用漏洞以当前登录的用户的身份执行任意命令。
- 该漏洞出现在模块EQNEDT32.EXE中,属于栈溢出漏洞,是对EquationNative数据结构处理不当导致。
- 漏洞影响:
- Microsoft Office 2007
- Microsoft Office 2010
- Microsoft Office 2013
- Microsoft Office 2016
- 复现过程:
13、钓鱼
CHM钓鱼:
- CHM (Compiled Help Manual)即“已编译的帮助文件”。它是微软新一代的帮助文件格式,利用HTML作源文,把帮助内容以类似数据库的形式编译储存。
- 利用CHM钓鱼主要原因是因为该文档可以执行cmd命令
CHM钓鱼制作:
LNK钓鱼:
- lnk文件是用于指向其他文件的一种文件。这些文件通常称为快捷方式文件,通常它以快捷方式放在硬盘上,以方便使用者快速的调用
- lnk钓鱼主要将图标伪装成正常图标,但是目标会执行shell命令
LNK钓鱼制作:
HTA钓鱼:
- HTA是HTML Application的缩写,直接将HTML保存成HTA的格式,是一个独立的应用软件。
- HTA虽然用HTML、JS和CSS编写,却比普通网页权限大得多,它具有桌面程序的所有权限。
HTA钓鱼制作:
14、网站克隆和钓鱼邮件
网站克隆:
- 复制目标网站前端信息
- 构建相似网页
- 获取用户登录数据
克隆方法:
钓鱼邮件:钓鱼邮件指利用伪装的电邮,欺骗收件人将账号、口令等信息回复给指定的接收者;或引导收件人连接到特制的网页,这些网页通常会伪装成和真实网站一样,如银行或理财的网页,令登录者信以为真,输入信用卡或银行卡号码、账户名称及密码等而被盗取。
钓鱼邮件制作: