网络攻防技术

网络攻防技术

十一月 06, 2021

第1章 信息收集

收集域名信息

Whois查询

​ Whois是一个标准的互联网协议,可用于收集网络注册信息,注册的域名、IP地址等信息。Whois就是一个用于查询域名是否已被注册以及注册域名的详细信息的数据库(如域名所有人、域名注册商)。在Whois查询中,得到注册人的姓名和邮箱信息通常对测试个人站点非常有用,因为我们可以通过搜索引擎和社交网络挖掘出域名所有人的很多信息。对中小站点而言,域名所有人往往就是管理员。

​ 在Kali系统中,Whois已经默认安装,只需输入要查询的域名即可。在线Whois查询的常用网站有爱站工具网(https://whois.aizhan.com)、站长之家( http://whois.chinaz.com)和VirusTotal (https://www.virustotal.com),通过这些网站可以查询域名的相关信息,如域名服务商、域名拥有者,以及他们的邮箱、电话、地址等。

备案信息查询

网站备案是根据国家法律法规规定,需要网站的所有者向国家有关部门申请的备案,这是国家信息产业部对网站的一种管理,为了防止在网上从事非法的网站经营活动的发生。主要针对国内网站,如果网站搭建在其他国家,则不需要进行备案。

常用的网站有以下这两个。站长之家: http://whois.chinaz.com 。天眼查: http://www.tianyancha.com

收集敏感信息

Google是世界上最强的搜索引擎之一,对一位渗透测试者而言,它可能是一款绝佳的黑客工具。我们可以通过构造特殊的关键字语法来搜索互联网上的相关敏感信息。

表1.1 Google的常用语法及其说明

关键字 说明
Site 指定域名
Inurl URL中存在关键字的网页
Intext 网页正文中的关键字
Filetype 指定文件类型
Inthtle 网页标题中的关键字
link link:baidu.com即表示返回所有和baidu.com做了链接的URL
Info 查找指定站点的一些基本信息
cache 搜索Google里关于某些内容的缓存

当然,不仅是Google搜索引擎,这种搜索思路还可以用在百度、雅虎、Bing、Shodan等搜索引擎上,其语法也大同小异。除此之外,也可以尝试在GitHub上寻找相关敏感信息,如数据库连接信息、邮箱密码、uc-key、阿里的osskey,有时还可以找到泄露的源代码等。可以通过乌云漏洞表https://wooyun.shuimugan.com)查询历史漏洞信息。

收集子域名信息

子域名也就是二级域名,是指顶级域名下的域名。假设我们的目标网络规模比较大,直接从主域入手显然是很不理智的,因为对于这种规模的目标,一般其主域都是重点防护区域,所以不如先进入目标的某个子域,然后再想办法迂回接近真正的目标,这无疑是个比较好的选择。尽可能多的搜集目标的高价值子域的方法:

1.子域名检测工具:用于子域名检测的工具主要有Layer子域名挖掘机、K8、wydomain、Sublist3r、dnsmaper、subDomainsBrute、Maltego CE等。笔者重点推荐Layer子域名挖掘机、Sublist3r和subDomainsBrute。

2.搜索引擎枚举:可以利用Google语法搜索子域名,例如要搜索百度旗下的子域名就可以使用“site:baidu.com”语法。

3.第三方聚合应用枚举:很多第三方服务汇聚了大量DNS数据集,可通过它们检索某个给定域名的子域名。只需在其搜索栏中输入域名,就可检索到相关的域名信息。读者可以利用DNSdumpster网站(https://dnsdumpster.com/)、在线DNS侦查和搜索的工具挖掘出指定域潜藏的大量子域。

4.证书透明度公开日志枚举:证书透明度(Certificate Transparency,CT)是证书授权机构(CA)的一个项目,证书授权机构会将每个SSL/TLS证书发布到公共日志中。一个SSL/TLS证书通常包含域名、子域名和邮件地址,这些也经常成为攻击者非常希望获得的有用信息。查找某个域名所属证书的最简单的方法就是使用搜索引擎搜索一些公开的CT日志。

收集常用端口信息

在渗透测试的过程中,对端口信息的收集是一个很重要的过程,通过扫描服务器开放的端口以及从该端口判断服务器上存在的服务,就可以对症下药,便于我们渗透目标服务器。所以在端口渗透信息的收集过程中,我们需要关注常见应用的默认端口和在端口上运行的服务。最常见的扫描工具就是Nmap。在Banner信息中,可以得到包括软件开发商,软件名称,服务类型,版本号等信息,通过这些信息可以使用某些工具直接去使用相对应的exp去攻击。常用NC、Dmitry、NMAP、AMAP等工具进行Banner信息收集。下面简单展示NMAP和AMAP的使用方法。

使用NMAP自带的Banner脚本获取Banner信息, 执行该工具的命令如下所示。

1
nmap -sT -p1-200 --script=banner ip

使用AMAP获取Banner信息,执行该工具的命令如下所示。

1
amap -B ip 1*200

说明:THC-Amap是运行在Linux/UNIX/Windows 平台上的安全扫描软件,通过探测端口响应的应用程序指纹数据来识别应用程序和服务,远甚于通过缺省端口号来判断应用程序和服务的方法,其具有完美的SSL支持、完整的RPC探测等特点。

在某些kali linux上,amap是预装的;在某些版本上,需要运行sudo apt install amap 命令手动安装。

指纹识别

本文所讲指纹是指网站CMS指纹识别、计算机操作系统及Web容器的指纹识别等。应用程序一般在html、js、css等文件中多多少少会包含一些特征码,比如WordPress在robots.txt中会包含wp-admin、首页index.php中会包含generator=wordpress 3.xx,这个特征就是这个CMS的指纹,那么当碰到其他网站也存在此特征时,就可以快速识别出该CMS,所以叫作指纹识别。

在渗透测试中,对目标服务器进行指纹识别是相当有必要的,因为只有识别出相应的Web容器或者CMS,才能查找与其相关的漏洞,然后才能进行相应的渗透操作。

CMS (Content Management System)又称整站系统或文章系统。开发者只要给客户一个软件包,客户自己安装配置好,就可以定期更新数据来维护网站,节省了大量的人力和物力。常见的CMS有Dedecms(织梦)、Discuz、PHPWEB、PHPWind、PHPCMS、ECShop、Dvbbs、SiteWeaver、ASPCMS、帝国、Z-Blog、WordPress等。

代表工具有御剑Web指纹识别、WhatWeb、WebRobo、椰树、轻量WEB指纹识别等,可以快速识别一些主流CMS。

查找真实IP

在渗透测试过程中,目标服务器可能只有一个域名,那么如何通过这个域名来确定目标服务器的真实IP对渗透测试来说就很重要。如果目标服务器不存在CDN,可以直接通过www.ip138.com获取目标的一些P及域名信息。这里主要讲解在以下这几种情况下,如何绕过CDN寻找目标服务器的真实IP。

1.目标服务器存在CDN:CDN即内容分发网络,主要解决因传输距离和不同运营商节点造成的网络速度性能低下的问题。就是一组在不同运营商之间的对接节点上的高速缓存服务器,把用户经常访问的静态数据资源(例如静态的html、css、js图片等文件)直接缓存到节点服务器上,当用户再次请求时,会直接分发到在离用户近的节点服务器上响应给用户,当用户有实际数据交互时才会从远程Web服务器上响应,这样可以大大提高网站的响应速度及用户体验。所以如果渗透目标购买了CDN服务,可以直接ping目标的域名,但得到的并非真正的目标Web服务器,只是离我们最近的一台目标节点的CDN服务器,这就导致了我们没法直接得到目标的真实IP段范围。

2.判断目标是否使用了CDN:通常会通过ping目标主域,观察域名的解析情况,以此来判断其是否使用了CDN。还可以利用在线网站17CE(https://www.17ce.com)进行全国多地区的ping服务器操作,然后对比每个地区ping出的IP结果,查看这些IP是否一致,如果都是一样的,极有可能不存在CDN。如果IP大多不太一样或者规律性很强,可以尝试查询这些IP的归属地,判断是否存在CDN。

**3.绕过CDN寻找真实IP:**在确认了目标确实用了CDN以后,就需要绕过CDN寻找目标的真实IP,下面介绍一些常规的方法。

  • 内部邮箱源。一般的邮件系统都在内部,没有经过CDN的解析,通过目标网站用户注册或者RSS订阅功能,查看邮件、寻找邮件头中的邮件服务器域名IP,ping这个邮件服务器的域名,就可以获得目标的真实IP(注意,必须是目标自己的邮件服务器,第三方或公共邮件服务器是没有用的)。
  • 扫描网站测试文件,如phpinfo、test等,从而找到目标的真实IP。
  • 分站域名。很多网站主站的访问量会比较大,所以主站都是挂CDN的,但是分站可能没有挂CDN,可以通过ping二级域名获取分站IP,可能会出现分站和主站不是同一个IP但在同一个C段下面的情况,从而能判断出目标的真实IP段。
  • 国外访问。国内的CDN往往只对国内用户的访问加速,而国外的CDN就不一定了。因此,通过国外在线代理网站App Synthetic Monitor(https://asm.ca.com/en /ping.php)访问,可能会得到真实的IP。
  • 查询域名的解析记录。也许目标很久以前并没有用过CDN,所以可以通过网站NETCRAFT(https://www.netcraft.com/)来观察域名的IP历史记录,也可以大致分析出目标的真实IP段。
  • 如果目标网站有自己的App,可以尝试利用Fiddler或Burp Suite抓取App的请求,从里面找到目标的真实IP。
  • 绕过CloudFlare CDN查找真实IP。现在很多网站都使用CloudFlare提供的CDN服务,在确定了目标网站使用CDN后,可以先尝试通过在线网站CloudFlareWatch (http://www.crimeflare.us/cfs.html#box)对CloudFlare客户网站进行真实IP查询。

4.验证获取的IP:找到目标的真实IP以后,如何验证其真实性呢?如果是Web,最简单的验证方法是直接尝试用IP访问,看看响应的页面是不是和访问域名返回的一样;或者在目标段比较大的情况下,借助类似Masscan的工具批扫描对应IP段中所有开了80、443、8080端口的IP,然后逐个尝试IP访问,观察响应结果是否为目标站点。

收集敏感目录文件

在渗透测试中,探测Web目录结构和隐藏的敏感文件是一个必不可少的环节,从中可以获取网站的后台管理页面、文件上传界面,甚至可能扫描出网站的源代码。

针对网站目录的扫描主要有DirBuster、御剑后台扫描珍藏版、wwwscan、Spinder.py(轻量级快速单文件目录后台扫描)、Sensitivefilescan(轻量级快速单文件目录后台扫描)、Weakfilescan(轻量级快速单文件目录后台扫描)等工具。

第2章 搭建漏洞环境及实战

在linux系统中安装LANMP

LANMP是Linux下Apache、Nginx、MySQL和PHP的应用环境,这里演示的是WDLinux的一款集成的安装包,操作起来非常简单。首先,下载需要的安装包,以v3为例,命令如下所示。

wget http://dl.wdlinux.cn/files/lanmp_v3.tar.gz

下载完成后进行解压,解压文件的命令为tar zxvf lanmp_v3.tar.gz.

Apache:Apache HTTP Server(简称 Apache)是 Apache 软件基金会的一个开放源码的网页服务器,可以在大多数计算机操作系统中运行,由于其多平台和安全性被广泛使用,是最流行的 Web 服务器端软件之一。它快速、可靠并且可通过简单的 API 扩展,将Perl/PHP/Python等解释器编译到服务器中。

Nginx: Nginx(engine x) 是一个高性能的HTTP和反向代理web服务器,同时也提供IMAP/POP3/SMTP服务。Nginx是由伊戈尔·赛索耶夫为俄罗斯访问量第二的Rambler.ru站点(俄文:Рамблер)开发的,第一个公开版本0.1.0发布于2004年10月4日。其特点是占有内存少,并发能力强,事实上nginx的并发能力在同类型的网页服务器中表现较好,中国大陆使用nginx网站用户包括百度、京东新浪网易腾讯淘宝等。

MySQL:MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,属于 Oracle 旗下产品。在 WEB 应用方面,MySQL是最好的 RDBMS (Relational Database Management System,关系数据库管理系统) 应用软件之一。MySQL 软件采用了双授权政策,分为社区版和商业版,由于其体积小、速度快、总体拥有成本低,尤其是开放源码这一特点,一般中小型网站的开发都选择 MySQL 作为网站数据库。

PHP:PHP(PHP: Hypertext Preprocessor)即“超文本预处理器”,是在服务器端执行的脚本语言,尤其适用于Web开发并可嵌入HTML中。该语言当初创建的主要目标是让开发人员快速编写出优质的web网站。 PHP同时支持面向对象和面向过程的开发,使用上非常灵活。经过二十多年的发展,随着php-cli相关组件的快速发展和完善,PHP已经可以应用在 TCP/UDP服务、高性能Web、WebSocket服务、物联网、实时通讯、游戏、微服务等非 Web 领域的系统研发。

根据W3Techs2019年12月6号发布的统计数据,PHP在WEB网站服务器端使用的编程语言所占份额高达78.9% 。在内容管理系统的网站中,有58.7%的网站使用WordPress(PHP开发的CMS系统),这占所有网站的25.0%。

在Windows系统中安装WAMP

Windows下实现php开发环境的方法就是将数据库mysql,服务器apache,开发语言php集合在一起。WAMPserver就是这样一个集成环境。

wamp官方网址:http://www.wampserver.com/en/ 是lamp架构在windows系统上的版本。下载后运行wampserver软件,一直点击下一步即可以完成安装。

phpStudy是一个PHP调试环境的程序集成包。该程序包集成最新的Apache+PHP+MySQL+phpMyAdmin+ZendOptimizer,一次性安装,无须配置即可使用,是非常方便、好用的PHP调试环境。该程序不仅包括PHP调试环境,还包括了开发工具、开发手册等。

首先下载PhpStudy集成环境,可在PhpStudy官网进行下载;然后解压安装包进行安装,可以进行自定义安装;接着打开PhpStudy,点击【一键启动】即可启动PHP环境。

搭建DVWA漏洞环境

DVWA (Damn Vulnerable Web Application) 是用 PHP+MySQL 编写的一套用于漏洞检测和教学的程序,支持多种数据库,包括了 SQL 注入、XSS 等一些常见的安全漏洞。

搭建DVWA靶场环境:

启动phpstudy,在浏览器中打开“phpMyAdmin”;

点击数据库,创建名为dvwa的数据库;

下载dvwa的压缩包DVWA-master,解压后放到phpstudy的web根目录,即www目录下;

将“DVWA-master”文件夹下的“config”文件夹中的“config.inc.php .dist”文件拷贝一份,其中一份不做修改,另外一份进行修改并去掉后缀名.dist。修改config.inc.php,修改内容如下红色方框:

image-20211106162414971

打开浏览器,访问“127.0.0.1/dvwa”,即可打开部署好的DVWA环境,该环境用于安全测试使用。

默认没有数据库表,进入 Setup / Reset DB,拉到最下面,创建数据库表.

这样DVWA就创建好了。将安全等级调成low,默认是impossible。

搭建SQL注入平台

为了学习、练习SQL注入技术,除了使用DVWA实验环境外,也可以搭建和使用SQLi-labs实验环境。

sq Ii-labs是一款学习SQL注入的开源平台,共有75种不同类型的注入。

下载sqli-labs的压缩包后,把解压文件放到“phpstudy”的“WWW”目录下。

打开sql-connections文件夹中的db-creds.inc文件,可以修改数据库的账号、密码、库名等配置信息。

修改完数据库密码后,打开浏览器访问“127.0.0.1/sq1i-labs/”,接着单击“Setup/reset Database for labs”。

如果看到数据库中的各种tables创建或清理完毕,说明安装成功。

搭建XSS测试平台

可以使用一些在线练习平台。如:

https://www.ichunqiu.com/experiment

https://www.hetianlab.com/experiments

http://test.ctf8.com/

第3章 常用的渗透测试工具

SQLMap详解

sqlmap是渗透测试中常用的一个SQL注入工具。它被预装到了kali Linux中。sqlmap支持五种不同的注入模式:

  • 基于布尔的盲注,即可以根据返回页面判断条件真假的注入。
  • 基于时间的盲注,即不能根据页面返回内容判断任何信息,用条件语句查看时间延迟语句是否执行(即页面返回时间是否增加)来判断。
  • 基于报错注入,即页面会返回错误信息,或者把注入的语句的结果直接返回在页面中。
  • 联合查询注入,可以使用union的情况下的注入。
  • 堆查询注入,可以同时执行多条语句的执行时的注入。

命令基本格式:

默认使用level1检测全部数据库类型

1
sqlmap -u “http://www.vuln.cn/post.php?id=1″

指定数据库类型为mysql,级别为3(共5级级别越高,检测越全面)

1
sqlmap -u “http://www.vuln.cn/post.php?id=1″ –dbms mysql –level 3

跟随302跳转:当注入页面错误的时候,自动跳转到另一个页面的时候需要跟随302, 当注入错误的时候,先报错再跳转的时候,不需要跟随302。目的:要追踪到错误信息。

cookie注入:当程序有防get注入的时候,可以使用cookie注入

1
sqlmap -u “http://www.baidu.com/shownews.asp” –cookie “id=11″ –level 2(只有level达到2才会检测cookie)

从post数据包中注入:可以使用burpsuite或者temperdata等工具来抓取post包

1
sqlmap -r “c:\tools\request.txt” -p “username” –dbms mysql 指定username参数

获取数据库基本信息

1
sqlmap -u “http://www.vuln.cn/post.php?id=1″ –dbms mysql –level 3 –dbs

查询有哪些数据库

1
sqlmap -u “http://www.vuln.cn/post.php?id=1″ –dbms mysql –level 3 -D test –tables

查询test数据库中有哪些表

1
sqlmap -u “http://www.vuln.cn/post.php?id=1″ –dbms mysql –level 3 -D test -T admin –columns

查询test数据库中admin表有哪些字段,dump出字段username与password中的数据

1
sqlmap -u “http://www.vuln.cn/post.php?id=1″ –dbms mysql –level 3 -D test -T admin -C “username,password” –dump

从数据库中搜索字段,在dedecms数据库中搜索字段admin或者password

1
sqlmap -r “c:\tools\request.txt” –dbms mysql -D dedecms –search -C admin,password 

读取与写入文件:首先找需要网站的物理路径,其次需要有可写或可读权限。

–file-read=RFILE 从后端的数据库管理系统文件系统读取文件 (物理路径)

–file-write=WFILE 编辑后端的数据库管理系统文件系统上的本地文件 (mssql xp_shell)

–file-dest=DFILE 后端的数据库管理系统写入文件的绝对路径

示例

1
2
3
4
5
6
7
8
9
10
11
sqlmap -r “c:\request.txt” -p id –dbms mysql –file-dest “e:\php\htdocs\dvwa\inc\include\1.php” –file-write “f:\webshell\1112.php”

使用shell命令:

sqlmap -r “c:\tools\request.txt” -p id –dms mysql –os-shell

接下来指定网站可写目录:

“E:\php\htdocs\dvwa”

\#注:mysql不支持列目录,仅支持读取单个文件。sqlserver可以列目录,不能读写文件,但需要一个(xp_dirtree函数)

sqlmap详细命令:

•–is-dba 当前用户权限(是否为root权限)

•–dbs 所有数据库

•–current-db 网站当前数据库

•–users 所有数据库用户

•–current-user 当前数据库用户

•–random-agent 构造随机user-agent

•–passwords 数据库密码

•–proxy http://local:8080 –threads 10 (可以自定义线程加速) 代理

•–time-sec=TIMESEC DBMS响应的延迟时间(默认为5秒)

Options(选项):

•–version 显示程序的版本号并退出

•-h, –help 显示此帮助消息并退出

•-v VERBOSE 详细级别:0-6(默认为1)

Burpsuite

(1)Proxy

Burp Proxy是利用Burp开展测试流程的核心,通过代理模式,可以让我们拦截、查看、修改所有在客户端与服务端之间传输的数据。Burp Proxy 的拦截功能主要由Intercept选项卡中的Forward、Drop、Interceptionison/off和Action构成,它们的功能如下所示。

  • Forward表示将拦截的数据包或修改后的数据包发送至服务器端。Drop表示丢弃当前拦截的数据包。
  • Interception is on表示开启拦截功能,单击后变为Interception is off,表示关闭拦截功能。
  • 单击Action按钮,可以将数据包进一步发送到Spider 、 Scanner .Repeater.Intruder等功能组件做进一步的测试,同时也包含改变数据包请求方式及其body的编码等功能。

打开浏览器,输入需要访问的URL并按回车键,这时将看到数据流量经过BurpProxy并暂停,直到单击Forward按钮,才会继续传输下去。如果单击了Drop按钮,这次通过的数据将丢失,不再继续处理。

当Burp Suite拦截的客户端和服务器交互之后,我们可以在 Burp Suite的消息分析选项中查看这次请求的实体内容、消息头、请求参数等信息。Burp有四种消息类型显示数据包:Raw、Params、Headers和 Hex。

  • Raw主要显示Web 请求的raw格式,以纯文本的形式显示数据包,包含请求地址、HTTP协议版本、主机头、浏览器信息、Accept可接受的内容类型、字符集、编码方式、cookie等,可以通过手动修改这些信息,对服务器端进行渗透测试。
  • Params主要显示客户端请求的参数信息,包括GET或者POST请求的参数、cookie参数。可以通过修改这些请求参数完成对服务器端的渗透测试。
  • Headers中显示的是数据包中的头信息,以名称、值的形式显示数据包。
  • Hex对应的是Raw中信息的二进制内容,可以通过Hex编辑器对请求的内容进行修改,在进行00截断时非常好用。

Scanner

Burp Scanner主要用于自动检测Web系统的各种漏洞。本小节介绍Burp Scanner的基本使用方法,在实际使用中可能会有所改变,但大体环节如下。
首先,确认Burp Suite正常启动并完成浏览器代理的配置。然后进入Burp Proxy,关闭代理拦截功能,快速浏览需要扫描的域或URL模块,此时在默认情况下,Burp Scanner会扫描通过代理服务的请求,并对请求的消息进行分析来辨别是否存在系统漏洞。而且当我们打开 Burp Target时,也会在站点地图中显示请求的URL树。
我们随便找一个网站进行测试,选择Burp Target的站点地图选项下的链接,在其链接URL上右击选择“Actively scan this host”,此时会弹出过滤设置,保持默认选项即可扫描整个域。

也可以在Proxy下的HTTP history中,选择某个节点上的链接URL并右击选择Doan activescan进行扫描

Intruder

Intruder是一个定制的高度可配置的工具,可以对Web应用程序进行自动化攻击,如通过标识符枚举用户名、ID和账户号码,模糊测试,SQL注入,跨站,目录遍历等。

它的工作原理是Intruder在原始请求数据的基础上,通过修改各种请求参数获取不同的请求应答。在每一次请求中,Intruder通常会携带一个或多个有效攻击载荷(Payload),在不同的位置进行攻击重放,通过应答数据的比对分析获得需要的特征数据。Burp Intruder通常被应用于以下场景。

  • 标识符枚举。Web应用程序经常使用标识符引用用户、账户、资产等数据信息。例如,用户名、文件ID和账户号码。
  • 提取有用的数据。在某些场景下,不是简单地识别有效标识符,而是通过简单标识符提取其他数据。例如,通过用户的个人空间ID获取所有用户的其个人空间的名字和年龄。
  • 模糊测试。很多输入型的漏洞(如SQL注入、跨站点脚本和文件路径遍历)可以通过请求参数提交各种测试字符串,并分析错误消息和具他异常情况,来对应用程序进行检测。受限于应用程序的大小和复杂性,手动执行这个测试是一个耗时且烦琐的过程,因此可以设置Payload,通过Burp Intruder自动化地对Web应用程序进行模糊测试。

Repeater

Burp Repeater是一个手动修改、补发个别HTTP请求,并分析它们的响应的工具。它最大的用途就是能和其他Burp Suite 工具结合起来使用。可以将目标站点地图、BurpProxy浏览记录、Burp Intruder的攻击结果,发送到Repeater 上,并手动调整这个请求来对漏洞的探测或攻击进行微调。

Repeater分析选项有4种:Raw、Params、Headers和 Hex。

  • Raw:显示纯文本格式的消息。在文本面板的底部有一个搜索和加亮的功能,可以用来快速定位需要寻找的字符串,如出错消息。利用搜索栏左边的弹出项,能控制状况的灵敏度,以及是否使用简单文本或十六进制进行搜索。
  • Params:对于包含参数(URL查询字符串、cookie头或者消息体)的请求Params选项会把这些参数显示为名字/值的格式,这样就可以简单地对它们进行查看和修改了。
  • Headers:将以名字/值的格式显示HTTP的消息头,并且以原始格式显示消息体。Hex:允许直接编辑由原始二进制数据组成的消息。

渗透测试过程中,我们经常使用Repeater进行请求与响应的消息验证分析,例如修改请求参数、验证输入的漏洞;修改请求参数、验证逻辑越权;从拦截历史记录中,捕获特征性的请求消息进行请求重放。

Comparer

Burp Comparer在 Burp Suite 中主要提供一个可视化的差异比对功能,来对比分析两次数据之间的区别,使用到的场合有:

  • 枚举用户名的过程中,对比分析登录成功和失败时,服务端反馈结果的区别。
  • 使用Intruder进行攻击时,对于不同的服务端响应,可以很快分析出两次响应的区别在哪里。
  • 进行SQL注入的盲注测试时,比较两次响应消息的差异,判断响应结果与注入条件的关联关系。

使用Comparer时有两个步骤,先是数据加载,然后是差异分析。Comparer数据加载的常用方式如下所示。

  • 从其他Burp工具通过上下文菜单转发过来。
  • 直接粘贴。
  • 从文件里加载。

加载完毕后,如果选择两次不同的请求或应答消息,则下发的比较按钮将被激活,此时可以选择文本比较或字节比较。

Nmap

Nmap (Network Mapper,网络映射器)是一款开放源代码的网络探测和安全审核工具。它被设计用来快速扫描大型网络,包括主机探测与发现、开放的端口情况、操作系统与应用服务指纹识别、WAF识别及常见安全漏洞。Nmap的特点如下所示。

  • 主机探测:探测网络上的主机,如列出响应TCP和ICMP请求、ICMP请求、开放特别端口的主机。
  • 端口扫描:探测目标主机所开放的端口。
  • 版本检测:探测目标主机的网络服务,判断其服务名称及版本号。
  • 系统检测:探测目标主机的操作系统及网络设备的硬件特性。
  • 支持探测脚本的编写:使用Nmap的脚本引擎(NSE)和Lua编程语言

Nmap的下载地址为https://nmap.org/download.html

扫描参数

进入安装目录后,在命令行直接执行Nmap或查看帮助文档,输入nmap –help将显示Nmap用法及其功能。

首先介绍设置扫描目标时用到的相关参数,如下所示。

l -iL:从文件中导入目标主机或目标网段。

l -iR:随机选择目标主机。

l –exclude:后面跟的主机或网段将不在扫描范围内。

l –excludefile:导入文件中的主机或网段将不在扫描范围中。与主机发现方法相关的参数如下。

l -sL: List Scan(列表扫描),仅列举指定目标的IP,不进行主机发现。

l -sn: Ping Scan,只进行主机发现,不进行端口扫描。

l -Pn:将所有指定的主机视作已开启,跳过主机发现的过程。

l -PS/PA/PU/PY[portlist]:使用TCP SYN/ACK或SCTP INIT/ECHO方式来发现。-PE/PP/PM:使用ICMP echo、timestamp、netmask请求包发现主机。

l -PO[protocollist]:使用IP协议包探测对方主机是否开启。

l -n/-R: -n表示不进行DNS解析;-R表示总是进行DNS解析。

l –dns-servers <serv1[,serv2]….>:指定DNS服务器。

l –system-dns:指定使用系统的DNS服务器。

l –traceroute:追踪每个路由节点。

与常见的端口扫描方法相关的参数如下。

l -sS/sT/sA/sW/sM:指定使用TCP SYN/Connect()/ACK/Window/Maimon scans的方式对目标主机进行扫描。

l -sU:指定使用UDP扫描的方式确定目标主机的UDP端口状况。

l -sN/sF/sX:指定使用TCP Null/FIN/Xmas scans秘密扫描的方式协助探测对方的TCP端口状态。

l –scanflags :定制TCP包的flags。

l -sl <zombie host[ :probeport]>:指定使用Idle scan的方式扫描目标主机(前提是需要找到合适的zombie host) 。

l -sY/sZ:使用SCTP INIT/COOKIE-ECHO扫描SCTP协议端口的开放情况。

l -sO:使用IP protocol扫描确定目标机支持的协议类型。

l -b :使用FTP bounce scan扫描方式。

跟端口参数与扫描顺序的设置相关的参数如下。

l -p :扫描指定的端口。

l -F: Fast mode (快速模式),仅扫描TOP 100的端口。

l -r:不进行端口随机打乱的操作(如无该参数,Nmap会将要扫描的端口以随机顺序的方式进行扫描,让Nmap的扫描不易被对方防火墙检测到)。

l –top-ports :扫描开放概率最高的number个端口(Nmap的作者曾做过大规模的互联网扫描,以此统计网络上各种端口可能开放的概率,并排列出最有可能开放端口的列表,具体可以参见nmap-services文件。默认情况下,Nmap会扫描最有可能的1000个TCP端口)。

l –port-ratio :扫描指定频率以上的端口。与上述–top-ports类似,这里以概率作为参数,概率大于–port-ratio的端口才被扫描。显然参数必须在0~1之间,想了解具体的概率范围可以查看nmap-services文件。

与版本侦测相关的参数如下所示。

l -sV:指定让Nmap进行版本侦测。

l –version-intensity :指定版本侦测的强度(0~9),默认为7。数值越高,探测出的服务越准确,但是运行时间会比较长。

l –version-light:指定使用轻量级侦测方式( intensity 2)。

l –version-all:尝试使用所有的probes进行侦测( intensity 9) 。

l –version-trace:显示出详细的版本侦测过程信息。

在了解以上参数及其含义后,再来看用法会更好理解,扫描命令格式: Nmap+扫描参数+目标地址或网段。比如一次完整的Nmap扫描命令如下。

1
nmap -T4 -A -v ip

其中-A表示使用进攻性(Aggressive)方式扫描;-T4表示指定扫描过程使用的时序(Timing),共有6个级别(O~5),级别越高,扫描速度越快,但也容易被防火墙或IDS检测并屏蔽掉,在网络通信状况良好的情况下推荐使用T4。-v表示显示冗余(verbosity)信息,在扫描过程中显示扫描的细节,有助于让用户了解当前的扫描状态。

常用方法

Nmap的参数较多,以下是在渗透测试过程中比较常见的命令。

\1. 扫描单个目标地址:在Nmap后面直接添加目标地址即可扫描,如图3.23所示。

namp 192.168.0.100

\2. 扫描多个目标地址:如果目标地址不在同一网段,或在同一网段但不连续且数量不多,可以使用该方法进行扫描。

namp 192.168.0.100 192.168.0.105

\3. 扫描一个范围内的目标地址:可以指定扫描一个连续的网段,中间使用“-”连接,例如下列命令表示扫描范围为192.168.0.l00~192.168.0.110。

namp 192.168.0.100-110

\4. 扫描目标地址所在的某个网段:以C段为例,如果目标是一个网段,则可以通过添加子网掩码的方式扫描,下列命令表示扫描范围为192.168.0.1~192.168.0.255。

namp 192.168.0.100/24

5.扫描主机列表targets.txt 中的所有目标地址:扫描targets.txt中的地址或者网段,此处导入的是绝对路径,如果targets.txt文件与nmap.exe在同一个目录下,则直接引用文件名即可。

nmap -iL C: \Users \Aerfa \Desktop\targets.txt

​ 6.扫描除某一个目标地址之外的所有目标地址:下列命令表示扫描除192.168.0.105之外的其他192.168.0.x地址,从扫描结果来看确实没有对192.168.0.105进行扫描。

namp 192.168.0.100/24 -exclude 192.168.0.105

​ 7.扫描除某一文件中的目标地址之外的目标地址:下列命令表示扫描除了target.txt文件夹中涉及的地址或网段之外的目标地址。还是以扫描192.168.0.x网段为例,在targets.txt中添加192.168.0.100和192.168.0.105从扫描结果来看已经证实该方法有效可用。

nmap 192.168.0.100/24 -excludefile C:\Users \Aerfa \Desktop\targets.txt

​ 8.扫描某一目标地址的21、22、23、80端口:如果不需要对目标主机进行全端口扫描,只想探测它是否开放了某一端口,那么使用-p参数指定端口号,将大大提升扫描速度。

nmap 192.168.0.100 -p 21,22,23,80

9.对目标地址进行路由跟踪:下列命令表示对目标地址进行路由跟踪。

namp –traceroute 192.168.0.105

\10. 扫描目标地址所在C段的在线状况:下列命令表示扫描目标地址所在C段的在线状况。

namp 192.168.0.100/24

\11. 目标地址的操作系统指纹识别:下列命令表示通过指纹识别技术识别目标地址的操作系统的版本,如图3-58所示。

namp -0 192.168.0.105

\12. 目标地址提供的服务版本检测:下列命令表示检测目标地址开放的端口对应的服务版本信息。

Namp -sV 192.168.0.105

\13. 探测防火墙状态:在实战中,可以利用FIN扫描的方式探测防火墙的状态。FIN扫描用于识别端口是否关闭,收到RST回复说明该端口关闭,否则就是open或filtered状态。

namp -sF -T4 192.168.0.105

第4章 Web安全原理剖析

web安全基础

抓包

标准格式:

http://www.xxxx.com:(80)/phpcms/show.php?id=35

scheme:指定使用的协议

host:HTTP服务器的IP地址或域名

port#:默认端口课省略,其余端口需注明

path:访问资源的路径

query-string:发送给http服务器的数据

HTTP/1.1中定义了5类状态码,状态码由三位数字组成,第一个数字定义了响应的类别

  • 1×× 提示信息-表示请求已被成功接收,继续处理
  • 2×× 成功-表示请求已被成功接收,理解,接受
  • 3×× 重定向-要完成请求必须进行更进一步的处理
  • 4×× 客户端错误-请求语法错误或请求无法实现
  • 5×× 服务端错误-服务器请求时出错

HTTP协议定义的与服务器交互的方法:GET,POST,PUT,DELETE

GET一般用于获取/查询资源信息,POST一般用于更新资源信息

  • GET提交的数据会放在URL之后,以?分割URL和传输数据,参数之间以&相连,如:EditPosts.aspx?name=test1&id=12345
  • POST方法是把提交的数据放在HTTP包含的Body中