Web渗透测试学习笔记

文章目录

  • 第一章 信息收集
    • 1.1域名信息
      • 1.1.1whois查询
      • 1.1.2备案信息查询
    • 1.2敏感信息
    • 1.3子域名信息
      • 1.3.1 子域名检测工具
      • 1.3.2搜索引擎枚举
      • 1.3.3第三方聚合应用枚举
      • 1.3.4证书透明公开日志枚举
    • 1.4端口信息
    • 1.5指纹信息
    • 1.6真实IP
    • 1.7敏感目录文件
    • 1.8社会工程学
  • 第二章 环境搭建
    • 2.1在Linux中安装LANMP
    • 2.2在Windows中安装wamp
    • 2.3搭建DVWA漏洞平台
    • 2.4搭建SQL注入平台
    • 2.5搭建XSS测试平台
  • 第三章 渗透工具
    • 3.1sqlmap
      • 3.1.1安装
      • 3.1.2入门
      • 3.1.3进阶:参数讲解
        • 1.--level 探测等级
        • 2.--is-dba 当前用户是否为管理员权限
        • 3.--roles 列出数据库管理员的角色(仅Oracle)
        • 4.referer HTTP Referer头
        • 5.--sql-shell 运行自定义SQL语句
        • 6.--os-cmd,--os-shell 运行任意操作系统命令
        • 7.--file-read 从数据库服务器中读取文件
        • 8.--file-write,--file-dest 上传文件到数据库服务器中
        • 9.--identify-waf 判断目标是否有安全防护(WAF/IDS/IPS)进行试探
      • 3.1.4 SQLmap自带绕过脚本tamper的讲解
        • 常用的tamper脚本
          • apostrophemask.py
          • base64encode.py
          • multiplespaces.py
          • space2plus.py
          • nonrecursivereplacement.py
          • space2randomblank.py
          • unionalltounion.py
          • securesphere.py
          • space2hash.py
          • space2mssqlblank.py(mssql)
          • space2mssqlhash.py
          • between.py
          • percentage.py
          • sp_password.py
          • charencode.py
          • randomcase.py
          • charunicodeencode.py
          • space2comment.py
          • equaltolike.py
          • greatest.py
          • ifnull2ifisnull.py
          • modsecurityversioned.py
          • space2mysqlblank.py
          • modsecurityzeroversioned.py
          • space2mysqldash.py
          • bluecoat.py
          • versionedkeywords.py
          • halfversionedmorekeywords.py
          • space2morehash.py
          • apostrophenullencode.py
          • chardoubleencode.py
          • unmagicquotes.py
          • randomcomments.py
    • 3.2burpsuite
      • 3.2.1安装
      • 3.2.2入门
        • 1.Proxy
        • 2.spider
        • 3.decoder
      • 3.2.3进阶
        • 1.Scanner
        • 2.intruder
        • 3.Repeater
        • 4.Comparer
        • 5.Sequencer
    • 3.3nmap
      • 3.3.1安装
      • 3.3.2入门
        • 1.参数
          • 主机发现
          • 扫描技巧
          • 指定端口和扫描顺序
          • 服务版本识别
          • 脚本扫描
          • OS识别
          • 防火墙/IDS躲避和哄骗
          • Nmap 输出
          • 时间性能优化
          • 其他nmap选项
        • 2.常用方法
          • 扫描单个地址
        • 3.状态识别
      • 3.3.3进阶
        • nmap的脚本的分类
        • 脚本参数
        • 案例
          • 1.鉴权扫描
          • 2.暴力破解
          • 3.扫描常见漏洞
          • 4.应用服务扫描
          • 5.探测局域网内更多服务开启的情况
          • 6.whois解析
  • 第四章 Web安全原理
    • 4.1SQL注入基础
      • 4.1.1SQL注入的原理
      • 4.1.2与MySQL注入相关的注入点
        • 常用的MySQL查询和函数
          • 1.MySQL查询语句
          • 2.limit的用法
          • 3.需记住的几个函数
          • 4.注释符
          • 5.内联注释
      • 4.1.3Union注入攻击
    • 4.2SQL注入进阶
    • 4.3SQL注入绕过
    • 4.4XSS基础
    • 4.5XSS进阶
    • 4.6CSRF
    • 4.7SSRF
    • 4.8文件上传
    • 4.9暴力破解
    • 4.10命令执行
    • 4.11逻辑漏洞挖掘
    • 4.12XXE
    • 4.13WAF
      • 4.13.1WAF介绍
      • 4.13.2WAF判断
      • 4.13.3WAF绕过
  • 第五章 Metasploit
    • 5.1Metasploit简介
    • 5.2Metasploit基础
      • 5.2.1专业术语
      • 5.2.2渗透攻击步骤
    • 5.3主机扫描
      • 5.3.1使用辅助模块进行端口扫描
      • 5.3.2使用辅助模块进行服务扫描
      • 5.3.3使用nmap扫描
    • 5.4漏洞利用
    • 5.5后渗透攻击:信息收集
    • 5.6后渗透攻击:权限提升
    • 5.7后渗透攻击:移植漏洞利用代码模块
    • 5.8后渗透攻击:后门
    • 5.9内网攻击域渗透实例
  • 第六章 Powershell

第一章 信息收集

渗透测试之前,最重要的一步就是信息收集,在这个阶段,我们要尽可能的手机目标组织的信息。越是了解测试目标,更有利于测试工作的进行。在信息收集过程中,主要收集服务器的配置信息和网站的敏感信息,包括域名以及子域名信息、目标网站系统、CMS指纹、目标网站真实IP、开放的端口等。只要是与目标网站相关的信息,我们都应该尽量去收集。

1.1域名信息

得到了目标域名后,第一件事就是获取域名的注册信息。包括该域名的DNS服务器和注册人的信息等。域名信息收集的方法有以下几种。

1.1.1whois查询

Whois是一个标准的互联网协议,可用于收集网络注册信息,注册域名、IP地址等信息。在Whois查询中,得到注册人的姓名和邮箱信息通常对测试个人站点非常有用,可以通过搜索引擎和社交网络挖掘出域名所有人的很多信息。对于中小站点,域名所有人往往就是管理员。使用kali系统中的whois查询功能如下图所示:
Web渗透测试学习笔记_第1张图片
在线的第三方whois查询网站还有爱站工具网、站长之家、VirusTotal,通过这些网站可以查询域名的相关信息,如域名服务商,域名拥有者,以及他们的邮箱、电话、地址等。

1.1.2备案信息查询

网站备案是根据国家法律规定,网站所有者需要向国家有关部门申请备案,这是国家信息产业部对网站的一种管理,为了防止在网上从事非法的网站经营活动的发生。主要正对国内。
常用的网站有以下这两个:
ICP备案查询网,
天眼查。

1.2敏感信息

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

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

利用搜索引擎还可以收集数据库文件、SQL注入、配置信息、源代码泄露、未授权访问和robots.txt等敏感。
另外,通过burpsuite的repeater功能同样可以获取一些服务器信息,如运行server类型和版本、PHP版本信息等。针对不同的server,可以利用不同的漏洞进行测试。
除此之外,也可以尝试在github上寻找相关敏感信息。如数据库链接信息、邮箱密码、UC-key、阿里的osskey,有时还可以找到泄露的源代码等。
读者可以通过乌云漏洞列表查看历史漏洞信息。

1.3子域名信息

如果目标网络规模较大,一般从其子域名入手。子域名收集方法常见以下几种。

1.3.1 子域名检测工具

常用的子域名收集工具有:Layer子域名挖掘机、K8、wydomain、Sublist3r、dnsmaper、subDomainsBrute、Maltego CE等。笔者重点推荐Layer子域名挖掘机、SubList3r和subDomainsBrute。
Layer子域名挖掘机使用较简单,只需要在域名对话框中直接输入域名即可,扫描结果显示包括域名、解析IP、CDN列表、Web服务器和网站状态等。
SubList3r可以列举多种资源,如Google、Yahoo、bing、百度等搜索引擎中可查到的子域名,还可以列出Netcraft、VirusTotal、ThreatCrowd、DNSdumpster和Reverse DNS查到的子域名。
subDomainsBrute的特点是可以用小字典递归发现三级、四级域名,用法如下:

python subDomainsBrute.py xxx.com

1.3.2搜索引擎枚举

可以使用Google语法搜索子域名:site:xxx.com

1.3.3第三方聚合应用枚举

很多使用第三方服务汇聚了大量DNS数据,它可以通过检索某个给定的子域名。只需要在其搜索栏中输入域名。也可以使用DNSdumpster网站、在线DNS侦查和搜索的工具挖掘出指定域潜藏的大量子域。

1.3.4证书透明公开日志枚举

证书透明度是证书授权机构的一个项目,证书授权机构会将每个SSL/TLS证书发布到公共日志中。一个SSL/TLS证书通常包含域名、子域名和邮件地址,这些也经常成为攻击者非常希望获得的有效信息。查找某个域名所属证书的嘴就简单的方式就是使用搜索引擎搜索一些公开的CT日志。
推荐使用crt.sh和censys这两个网站。

除此之外、还可以利用一些在线网站查询子域名,如子域名爆破网站、IP反查绑定域名网站。

1.4端口信息

通过扫描服务器开放的端口及其对应的服务,可对症下药。使用的最常见工具是Nmap,还有无状态端口扫描工具Masscan、ZMap和御剑高速TCP端口扫描工具。
常见端口、服务描述及其攻击方式如下:

  • 文件共享服务端口
端口号 服务 攻击方式
21/22/69 ftp/tftp文件传输协议 允许匿名的上传、下载、爆破和嗅探
2049 NFS服务 配置不当
139 Samba服务 爆破、未授权访问、远程代码执行
389 ldap 目录访问协议
  • 远程链接服务端口
端口号 服务 攻击方式
22 SSH远程连接 爆破、SSH隧道及内网代理转发、文件传输
23 Telnet远程连接 爆破、嗅探、弱口令
3389 rdp远程桌面连接 shift后门(Windows server2003以下)、爆破
5900 VNC 弱口令爆破
5632 PyAnywhere服务 抓密码、代码执行
  • 邮件服务端口
端口号 服务 攻击方式
25 SMTP邮件服务 邮件伪造
110 POP3协议 爆破、嗅探
143 IMAP协议 爆破
  • 网络常见协议端口
端口号 服务 攻击方式
53 DNS域名系统 允许区域传递、DNS劫持、缓存投毒、欺骗
67/68 DHCP服务 劫持、欺骗
161 SNMP协议 爆破、收集目标内网信息
  • 特殊服务端口
端口号 服务 攻击方式
2181 Zookeepr服务 未授权访问
8069 Zabbix服务 远程执行、SQL注入
9200/9300 Elasticsearch服务 远程执行
11211 Memcache服务 未授权访问
512/513/514 Linux Rexec服务 爆破、Rlogin登录
873 Rsync服务 匿名访问、文件上传
3690 Svn服务 Svn泄露、未授权访问
50000 SAP Management Console 远程执行

1.5指纹信息

指纹信息指网站CMS指纹识别、计算机操作系统及web容器的指纹识别等。
根据一些特定文件中的某些特征,就可以判断出使用的CMS。
渗透测试中有必要对其进行指纹识别,识别出指纹就可以更好的进行相关漏洞的测试。
CMS又称整站系统或文章系统。常见的CMS有dedecms(织梦)、Discuz、PHPWEB、PHPWind、PHPCMS、ECShop、Dvbbs、SiteWeaver、ASPCMS、帝国、Z-Blog、WordPress等。
代表工具:御剑Web指纹识别、WhatWeb、椰树、轻量Web指纹识别等。在线工具:BugScaner,云悉指纹,WhatWeb。

1.6真实IP

首先判断目标是否使用了CDN,可以通过ping测试判断。
如果可知目标没有使用CDN,可以直接通过www.ip138.com获取目标的一些IP及域名信息。
如果使用了CDN,需要绕过CDN来找到CDN。可以通过如下几种方法来进行绕过CDN:

  • 内部邮箱源
    一般的邮件系统都在内部,不会经过CDN解析。通过目标网站用户注册和RSS订阅功能,查看邮件头中的域名信息,通过ping测试得到IP地址。
  • 扫描文件测试文件
    如phpinfo、test等,从而找到目标的真实IP。
  • 分站域名
    很多网站主站流量较大,会使用CDN,但是分站一般不会使用。通过找到分站的IP,很多情况下,分站和主站在同一个网段里面,从而判断出主站存在的网段。然后借助Masscan等工具批量扫描对应IP段中所有开了80/443/8080端口的IP,然后逐个访问,观察结果是否为目标站点。
  • 国外访问
    国内有的网站只对国内网站加速,对国外不一定加速。可以通过App Synthetic Monitor进行ping测试。
  • 从APP获取
    如果网站有自己的APP,可以利用Fiddler或burpsuite抓取APP的请求,从里面找到真实ip。
  • 绕过CloudFlare CDN查找真实IP。
    很多网站使用了CloudFlare CDN,对于这类网站可以通过CloudFlareWatch对CloudFlare客户端进行真实ip查询。

1.7敏感目录文件

渗透测试中,探测目录结构和隐藏的敏感文件是必不可少的。这波操作可能会获得后台管理页面,文件上传页面,以及网站源代码等。
工具有:DirBuster、御剑后台扫描珍藏版、wwwscan、Spinder.py(轻量级快速单文件目录后台扫描)、Sensitivefilescan(轻量级快速单文件目录后台扫描)、Weakfilescan(轻量级快速单文件目录后台扫描)等。
DirBuster的使用:
要求使用java环境
在target URL输入目标地址
请求方式:auto
线程:20-30
URL to full:/{dir} 这里{dir}是一个变量,表示字典里的每一行。
如果扫描的是http://www.xxx.com/admin/,那么URL to fuzz填:/admin/{dir}
若输入:/admin/{dir}.php,表示admin下面所有的php文件。

除此以外,还可以使用WebScan等第三方工具。

1.8社会工程学

一方面可以通过社工方法获取一些相关信息。
另一方面也可以通过社工库查询一些信息。

第二章 环境搭建

2.1在Linux中安装LANMP

2.2在Windows中安装wamp

2.3搭建DVWA漏洞平台

2.4搭建SQL注入平台

2.5搭建XSS测试平台

第三章 渗透工具

3.1sqlmap

SQLmap是一个自动化的SQL注入工具
主要功能:扫描、发现并利用给定的URL的SQL注入漏洞。包括数据库指纹识别、数据库枚举、数据提取、访问目标文件系统,并在获取完全的操作权限时实行任意命令。
支持数据库:MySQL、Oracle、PostgreSQL、SQL server、Access、DB2、SQLite、Firebird、Sybase、SAP MaxDB。
包含的注入技术:

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

3.1.1安装

3.1.2入门

1.判断是否存在注入

sqlmap.py -u http://target?id=1

当目标有多个参数时,需要加双引号

sqlmap.py -u "http://target?id=1&uid=2"

2.判断文本中是否存在注入
从文件中加载HTTP,SQLMAP可以从一个文本中获取HTTP求情,这样就可以不设置其他参数(cookie,post数据等),txt文件中的内容为Web数据包。

sqlmap.py -r target.txt

3.查询当前用户下的所有数据库

sqlmap.py -u http://target?id=1 --dbs

4.查询某个数据库中的表名

sqlmap.py -u http://target?id=1 -D xxx --tables

5.获取某数据库中某表的字段

sqlmap.py -u http://target?id=1 -D xxx -T xxx --columns

6.获取字段内容

sqlmap.py -u http://target?id=1 -D xxx -T xxx -C xxx,xxx --dump

7.获取数据库中所有用户

sqlmap.py -u http://target?id=1 --users

8.获取数据库用户的密码

sqlmap.py -u http://target?id=1 --passwords

9.获取当前网站数据库的名称

sqlmap.py -u http://target?id=1 --current-db

10.获取当前数据库用户名称

sqlmap.py -u http://target?id=1 --current-user

3.1.3进阶:参数讲解

1.–level 探测等级

共1-5五个等级,默认为1,SQLmap使用的payload在xml/payload.xml中,也可以根据响应的格式添加自己的payload。5级包含色payload最多,可自动破解cookie、XFF等头部注入。cookie在level2的时候会测试,http useragent/referer在level3的时候会测试。

2.–is-dba 当前用户是否为管理员权限

sqlmap.py -u http://target?id=1 --is-dba

3.–roles 列出数据库管理员的角色(仅Oracle)

如果当前用户有权限读取包含所有用户的表,输入该命名会列出每个用户的角色。也可以使用-U参数指定查看哪个用户的角色。

4.referer HTTP Referer头

可以自定义Referer头进行欺骗,level3及以上会对Referer进行注入测试。

5.–sql-shell 运行自定义SQL语句

该命令用于执行指定的SQL语句

sqlmap.py -u http://target?id=1 --sql-shell

6.–os-cmd,–os-shell 运行任意操作系统命令

在数据库为MySQL、PostpostgreSQL、SQL Server,并且当用户有权限使用特定的函数时,如果数据库为MySQL、PostgreSQL,SQLmap上传一个二进制库,包含用户自定义的函数sys_exec()和sys_eval(),那么创建这两个函数就可以执行系统命令。在SQLserver中,SQLmap将使用xp_cmdshell存储过程、如果被禁用(SQLserver2005及以上默认关闭),则SQLmap会从新启用它;如果不存在,会自动创建。
用–os-shell参数可以模拟一个真实的shell,输入想执行的命令。当不能执行多语句时(比如PHP和asp的后端数据库为MySQL),仍然可以使用INTOOUTFILE写进可写目录,创建一个Web后门。–os-shell支持ASP、ASP.NET、JSP和PHP四种语言(要想执行该参数、需要由数据库管理员权限,也就是–is-dba的值为true)

7.–file-read 从数据库服务器中读取文件

该命令用于读取执行文件,在数据库为MySQL、PostpostgreSQL、SQL Server,并且当用户有权限使用特定的函数时,读取的文件可以是文本,可以是二进制文件。

sqlmap.py -u http://target?id=1 --file-read "C:/example.exe"

8.–file-write,–file-dest 上传文件到数据库服务器中

该命令用于写入本地文件到服务器中,当数据库为MySQL、PostgreSQL或SQLserver,并且在当前用户有权限使用特定函数时,上传的文件可以是文本,也可以是二进制文件。

9.–identify-waf 判断目标是否有安全防护(WAF/IDS/IPS)进行试探

3.1.4 SQLmap自带绕过脚本tamper的讲解

tamper参数对数据做修改来绕过waf等设备,其中大部分脚本主要使用正则模块替代攻击载荷字符编码的方式绕过waf的检测规则。

sqlmap.py -u http://target?id=1 --tamper "模块名"

常用的tamper脚本

apostrophemask.py

作用:将引号替换为UTF-8,用于过滤单引号。

base64encode.py

作用:替换为base64编码

multiplespaces.py

作用:围绕SQL关键字添加多个空格

space2plus.py

作用:用加号替换空格

nonrecursivereplacement.py

作用:作为双重查询语句,用双重语句替代预定义的SQL关键字(适用于非常弱的自定义过滤器,例如将select替换为空)。

space2randomblank.py

作用:将空格替换为其他有效字符。

unionalltounion.py

作用:将UNION ALL SELECT替换为UNION SELECT

securesphere.py

作用:追加特制的字符串。

space2hash.py

作用:将空格替换为#号,并添加一个随机字符串和换行符。

space2mssqlblank.py(mssql)

作用:将空格替换为其他空符号

space2mssqlhash.py

作用:将空格替换为#号,并添加一个换行符。

between.py

作用:用NOT BETWEEN 0 AND 替换大于号(>),用BETWEEN AND 替换等于号(=)

percentage.py

作用:ASP允许在每个字符前面加上一个%。

sp_password.py

作用:从DBMS日志的自动模糊处理的有效载荷中追加sp_password。

charencode.py

作用:对给定的payload全部字符使用URL编码(不处理已编码的字符)。

randomcase.py

作用:随机大小写。

charunicodeencode.py

作用:字符串Unicode编码。

space2comment.py

作用:将空格替换为/**/。

equaltolike.py

作用:将等号替换为like。

greatest.py

作用:绕过对“>”的过滤,用GREATEST替换大于号。测试通过的数据库有MySQL4、MySQL5.0、MySQL5.5、Oracle 10g、PostgreSQL 8.3、PostgreSQL8.4、PostgreSQL 9.0。

ifnull2ifisnull.py

作用:绕过对IFNULL的过滤,替换类似IFNULL(A,B)为IF(ISNULL(A),B,A)。测试通过的数据库类型版本有MySQL5.0、MySQL5.5。

modsecurityversioned.py

作用:过滤空格,使用MySQL内联注释方式注入。测试MySQL5.0可行。

space2mysqlblank.py

作用:将空格替换为其他空白符号(MySQL5.1测试通过)

modsecurityzeroversioned.py

作用:使用MySQL内联注入方式(/! 00000/)进行注入。(mysql5.0测试通过)

space2mysqldash.py

作用:将空格替换为–,并添加一个换行符。

bluecoat.py

作用:在SQL语句之后用有效的随机空白符替换空格符,随后用like替换等于号。
通过测试的数据路和版本为MySQL5.1和SGOS。

versionedkeywords.py

作用:注释绕过

halfversionedmorekeywords.py

作用:当数据库为Mysql时绕过防火墙,在每个关键字前面添加MySQL版本注释。测试通过的数据库类型和版本有MySQL4.0.18和MySQL5.0.22。

space2morehash.py

作用:将空格替换为#号,并添加一个随机字符串和换行符。测试通过的数据库和版本有MySQL5.1.41。

apostrophenullencode.py

作用:在有效负荷的结束位置加载零字节字符编码。

chardoubleencode.py

作用:对给定的payload全部字符使用双重URL编码(不处理已经编码的字符)。

unmagicquotes.py

作用:用一个多字组合(%bf%27)和末尾通用注释一起替换空格。

randomcomments.py

作用:用/**/分割SQL关键字。

最好掌握tamper插件的编写规则,这样在应对各种实战环境时候才能更加自如。

3.2burpsuite

3.2.1安装

3.2.2入门

1.Proxy

Proxy是利用burp开展测试流程的核心,通过代理模式,可以让我们拦截、查看、修改所有在客户端和服务器之间传递数据。
拦截功能主要由intercept选项卡中的forword、drop、interception is on/off和action构成。

  • Forword表示将拦截的数据包或修改后的数据包发送至服务端。
  • Drop表示丢弃当前拦截的数据包
  • interception is on表示开启拦截功能,interception is off表示关闭拦截功能。
  • 单击Action按钮,可以进一步发送数据包到其他组件做进一步测试。

burp有四种消息类型显示数据包:

  • raw主要显示web请求的raw格式,以纯文本的形式显示数据包,包含求情地址、HTTP协议版本、主机头、浏览信息、accept可接受的内容类型、字符集、编码方式、cookie等,可以手动修改这些参数来完成对服务器的渗透测试。
  • Parmas主要显示客户端请求的参数信息。
  • headers中显示的是数据包中的头信息,以键值对的方式显示。
  • hex对应的raw中信息的二进制内容,可以使用hex编辑器对请求内容进行修改,再进行00截断的时候非常好用。

2.spider

spider爬虫可以帮我们更加了解系统结构,其中spider爬取到的内容将在target中展示。

3.decoder

对原始数据进行各种编码格式和散列的转换。

3.2.3进阶

1.Scanner

用于自动检测Web系统的各种漏洞。
主动扫描:burp会向应用发送新的请求并通过payload验证漏洞。会产生大量的请求和应答数据,直接影响服务器性能,不适合在生产环境使用。主要使用以下两类漏洞。

  • 客户端漏洞,如XSS、HTTP头部注入、操作重定向。
  • 服务端漏洞,如SQL注入、命令行注入、文件遍历。

被动扫描:burp不会重新发送新的求情,只是对已存在的请求和应答进行分析,对于服务器端来讲,比较安全,适合用于生产环境的检测。一般来说,下列漏洞在被动模式下容易被检测出来:

  • 提交的密码为明文。
  • 不安全的cookie属性,例如缺少HTTPonly和安全标志。
  • cookie的范围缺失。
  • 跨域脚本包含和站点引用泄露。
  • 表单值自动填充,尤其是密码。
  • SSL保护的内容缓存。
  • 目录列表。
  • 提交密码后应答延迟。
  • session令牌不安全传输。
  • 敏感信息泄露,例如内部IP地址、电子邮件地址、堆栈跟踪等信息泄露。
  • 不安全的ViewState的配置。
  • 错误或不规范的Content-Type指令。

2.intruder

intruder是一个高度可配置的工具,可以对Web应用程序进行自动化攻击,如通过标识符枚举用户名、ID和账户号码,模糊测试,SQL注入,跨站,目录遍历等。
原理:在原有请求的基础上,通过修改各种请求参数获取不同的请求应答。
常用场景:

  • 标识符枚举。如用户名、文件ID和密码等。
  • 提取有用的数据。在某些场景下,不是简单地识别有效标识符,而是通过简单标识符提取其他数据。例如,通过通过个人的用户空间ID获取所有用户在个人空间的名字和年龄。
  • 模糊测试。

攻击模式

  • Sniper 使用单一的payload组,对每个位置参数都进行一次放置。请求数为位置数和payload数量的乘积。
  • Battering ram 使用单一的payload组,一次性对所有位置都放置相同的payload,适合相同参数值放置在多个位置的场景。请求数量为payload的个数。
  • Pitchfork 使用多个payload组,每个位置对应一个组,一次遍历各个组中的payload给对应位置。请求数量为payload数量最少的那个组的payload数量。
  • Cluster bomb 使用多个payload组,笛卡尔积形式进行参数位置放置。请求数量为所有payload组payload数量的乘积。

3.Repeater

手动修改、补发个别HTTP请求,并分析其响应的工具。通常和其他工具结合起来使用。
Repeater分析选项有四种消息类型:

  • raw主要显示web请求的raw格式,以纯文本的形式显示数据包,包含求情地址、HTTP协议版本、主机头、浏览信息、accept可接受的内容类型、字符集、编码方式、cookie等,可以手动修改这些参数来完成对服务器的渗透测试。
  • Parmas主要显示客户端请求的参数信息。
  • headers中显示的是数据包中的头信息,以键值对的方式显示。
  • hex对应的raw中信息的二进制内容,可以使用hex编辑器对请求内容进行修改,再进行00截断的时候非常好用。

4.Comparer

提供可视化的差异对比功能,来对比分析两次数据之间的区别。使用场景有:

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

数据加载的常用方式:

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

5.Sequencer

用于分析样本随机性质量的工具。可以用它测试应用程序的会话令牌(Sesion token)、密码重置令牌是否可预测等场景。通过数据样本分析,可以很好的降低关键数据被伪造的风险。

3.3nmap

被设计用来快熟扫描大型网络,包括主机探测与发现、开放的端口情况、操作系统与应用服务指纹识别、WAF识别及常见安全漏洞。图形化界面为Zenmap,分布式框架为Dnmap。
nmap特点如下所示:

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

3.3.1安装

3.3.2入门

1.参数

例如:blah.highon.coffee, namp.org/24, 192.168.0.1;10.0.0-25.1-254

  • -iL filename 从文件中读取待检测的目标,文件中的表示方法支持机名,ip,网段
  • -iR hostnum 随机选取,进行扫描.如果-iR指定为0,则是无休止的扫描
  • –exclude host1[, host2] 从扫描任务中需要排除的主机
  • –exculdefile exclude_file 排除文件中的IP,格式和-iL指定扫描文件的格式相同
主机发现
  • -sL 仅仅是显示,扫描的IP数目,不会进行任何扫描
  • -sn ping扫描,即主机发现
  • -Pn 不检测主机存活
  • -PS/PA/PU/PY[portlist] TCP SYN Ping/TCP ACK Ping/UDP Ping发现
  • -PE/PP/PM 使用ICMP echo, timestamp and netmask 请求包发现主机
  • -PO[prococol list] 使用IP协议包探测对方主机是否开启
  • -n/-R 不对IP进行域名反向解析/为所有的IP都进行域名的反响解析
扫描技巧
  • -sS/sT/sA/sW/sM TCP SYN/TCP connect()/ACK/TCP窗口扫描/TCP Maimon扫描
  • -sU UDP扫描
  • -sN/sF/sX TCP Null,FIN,and Xmas扫描
  • –scanflags 自定义TCP包中的flags
  • -sI zombie host[:probeport] Idlescan
  • -sY/sZ SCTP INIT/COOKIE-ECHO 扫描
  • -sO 使用IP protocol 扫描确定目标机支持的协议类型
  • -b “FTP relay host” 使用FTP bounce scan
指定端口和扫描顺序
  • -p 特定的端口 -p80,443 或者 -p1-65535
  • -p U:PORT 扫描udp的某个端口, -p U:53
  • -F 快速扫描模式,比默认的扫描端口还少
  • -r 不随机扫描端口,默认是随机扫描的
  • –top-ports “number” 扫描开放概率最高的number个端口,出现的概率需要参考nmap-services文件,ubuntu中该文件位于/usr/share/nmap.nmap默认扫前1000个
  • –port-ratio “ratio” 扫描指定频率以上的端口
服务版本识别
  • -sV 开放版本探测,可以直接使用-A同时打开操作系统探测和版本探测
  • –version-intensity “level” 设置版本扫描强度,强度水平说明了应该使用哪些探测报文。数值越高,服务越有可能被正确识别。默认是7
  • –version-light 打开轻量级模式,为–version-intensity 2的别名
  • –version-all 尝试所有探测,为–version-intensity 9的别名
  • –version-trace 显示出详细的版本侦测过程信息
脚本扫描
  • -sC 根据端口识别的服务,调用默认脚本
  • –script=”Lua scripts” 调用的脚本名
  • –script-args=n1=v1,[n2=v2] 调用的脚本传递的参数
  • –script-args-file=filename 使用文本传递参数
  • –script-trace 显示所有发送和接收到的数据
  • –script-updatedb 更新脚本的数据库
  • –script-help=”Lua script” 显示指定脚本的帮助
OS识别
  • -O 启用操作系统检测,-A来同时启用操作系统检测和版本检测
  • –osscan-limit 针对指定的目标进行操作系统检测(至少需确知该主机分别有一个open和closed的端口)
  • –osscan-guess 推测操作系统检测结果,当Nmap无法确定所检测的操作系统时,会尽可能地提供最相近的匹配,Nmap默认进行这种匹配
防火墙/IDS躲避和哄骗
  • -f; --mtu value 指定使用分片、指定数据包的MTU.
  • -D decoy1,decoy2,ME 使用诱饵隐蔽扫描
  • -S IP-ADDRESS 源地址欺骗
  • -e interface 使用指定的接口
  • -g/ --source-port PROTNUM 使用指定源端口
  • –proxies url1,[url2],… 使用HTTP或者SOCKS4的代理
  • –data-length NUM 填充随机数据让数据包长度达到NUM
  • –ip-options OPTIONS 使用指定的IP选项来发送数据包
  • –ttl VALUE 设置IP time-to-live域
  • –spoof-mac ADDR/PREFIX/VEBDOR MAC地址伪装
  • –badsum 使用错误的checksum来发送数据包
Nmap 输出
  • -oN 将标准输出直接写入指定的文件
  • -oX 输出xml文件
  • -oS 将所有的输出都改为大写
  • -oG 输出便于通过bash或者perl处理的格式,非xml
  • -oA BASENAME 可将扫描结果以标准格式、XML格式和Grep格式一次性输出
  • -v 提高输出信息的详细度
  • -d level 设置debug级别,最高是9
  • –reason 显示端口处于带确认状态的原因
  • –open 只输出端口状态为open的端口
  • –packet-trace 显示所有发送或者接收到的数据包
  • –iflist 显示路由信息和接口,便于调试
  • –log-errors 把日志等级为errors/warings的日志输出
  • –append-output 追加到指定的文件
  • –resume FILENAME 恢复已停止的扫描
  • –stylesheet PATH/URL 设置XSL样式表,转换XML输出
  • –webxml 从namp.org得到XML的样式
  • –no-sytlesheet 忽略XML声明的XSL样式表
时间性能优化
  • -T 时间优化(0-5)(paranoid|sneaky|polite|normal|aggressive|insane)
  • -F 快速扫描。
  • –max-retries 调整重传次数。
  • –min-hostgroup/–max-hostgroup size 设置组的大小
  • –min-parallelism/–max-parellelism time 指定时间内的探针数
  • –min-rtt-timrout/–max-rtt-timrout/initial-rtt-timrouttime 指定探针超时
  • –scan-delay/-max-scan-delay time 指定探针之间的时延
  • –max-retries tries 指定探针重传转发数
  • –host-timeout time 设置扫描主机的最大时间
  • –defeat-rst-ratelimit 设置rst的限制
其他nmap选项
  • -6 开启IPv6
  • -A OS识别,版本探测,脚本扫描和traceroute
  • –datedir DIRNAME 说明用户Nmap数据文件位置
  • –send-eth / --send-ip 使用原以太网帧发送/在原IP层发送
  • –privileged 假定用户具有全部权限
  • –unprovoleged 假定用户不具有全部权限,创建原始套接字需要root权限
  • -V 打印版本信息
  • -h 输出帮助

2.常用方法

扫描单个地址
nmap ip

扫描多个目标地址

nmap ip1 ip2

扫描一个网段

nmap ip1-ip2

扫描某个地址的网段

nmap ip/24

扫描主机列表targets.txt中的所有目标地址

nmap -iL targets.txt

扫描某一个目标地址之外的其他目标地址

nmap ip1/24 -exclude ip2

扫描除了某一文件中目标地址之外的目标地址

nmap ip1/24 -excludefile targets.txt

扫描某一目标地址的21、22、23、80端口

nmap -p 21,22,23,80 ip

对目标地址进行路由跟踪

nmap --traceroute ip

扫描目标地址所在C段的在线情况

nmap -sP ip/24

目标地址操作系统的指纹识别

nmap -O ip

目标地址提供的服务版本检测

nmap -sV ip

探测防火墙状态

nmap -sF -T4 ip

3.状态识别

nmap输出为扫描列表,包括端口号、端口状态、服务名称、服务版本及协议。
通常状态有六种:

状态 含义
open 开放,表示应用程序正在监听该端口的链接,外部可以访问
filtered 被过滤,表示端口被防火墙或其他设备阻拦,无法访问
closed 关闭,表示端口未开启
unfiltered 未被过滤,表示nmap无法确定端口所处的状态
open/filtered 开放或被过滤,nmap不能识别
closed/filtered 关闭或被过滤,nmap无法识别

3.3.3进阶

nmap的脚本默认存放在…/nmap/scripts/下面。
Web渗透测试学习笔记_第2张图片

nmap的脚本的分类

auth: 负责处理鉴权证书(绕开鉴权)的脚本  
broadcast: 在局域网内探查更多服务开启状况,如dhcp/dns/sqlserver等服务  
brute: 提供暴力破解方式,针对常见的应用如http/snmp等  
default: 使用-sC或-A选项扫描时候默认的脚本,提供基本脚本扫描能力  
discovery: 对网络进行更多的信息,如SMB枚举、SNMP查询等  
dos: 用于进行拒绝服务攻击  
exploit: 利用已知的漏洞入侵系统  
external: 利用第三方的数据库或资源,例如进行whois解析  
fuzzer: 模糊测试的脚本,发送异常的包到目标机,探测出潜在漏洞
intrusive:入侵性的脚本,此类脚本可能引发对方的IDS/IPS的记录或屏蔽  
malware: 探测目标机是否感染了病毒、开启了后门等信息  
safe: 此类与intrusive相反,属于安全性脚本  
version: 负责增强服务与版本扫描(Version Detection)功能的脚本  

脚本参数

--script=defualt:使用默认的脚本进行扫描
--script=:使用某个脚本进行扫描
--script-args=key1=value1,key2=value2:为脚本传递参数
--script-args-file=filename:使用文件向脚本传递参数
--script-trace:显示脚本执行过程中发送和接收的数据
--script-updatedb:更新脚本库数据‘’
--script-help:显示对应脚本帮助信息

案例

1.鉴权扫描

使用–script=auth可以对目标主机或目标主机所在网段进行应用弱口令。

nmap --script=auth ip
2.暴力破解

可对数据库、SMB、SNMP进行简单的密码暴力猜解

nmap --script=brute ip
3.扫描常见漏洞

可检测目标主机或网段是否存在常见漏洞

nmap --script=vuln ip
4.应用服务扫描

nmap具备很多常见应用服务的脚本,如VNC、MySQL、telnet、rsync等

nmap --script=realvnc-auth-bypass ip
5.探测局域网内更多服务开启的情况
nmap -n -p 445 --script=broadcast ip
6.whois解析
nmap -script external 域名

第四章 Web安全原理

4.1SQL注入基础

4.1.1SQL注入的原理

Web应用程序对用户输入的数据合法性没有判断,前端传入后端的参数是攻击可控的,并且参数带入数据库查询,攻击者可以构造不同的SQL语句来实现对数据库的任意操作。
SQL注入漏洞产生的条件

  • 参数用户可控:前端传给后端的参数时攻击者可以控制的
  • 参数带入数据库查询:传入的参数拼接到SQL语句,并且带入数据库查询。
    当传入ID参数为1’时:
select * from users where id = 1'

这不符合数据库语法规范,会报错。当传入参数为 1 and 1=1 时,执行的SQL语句如下图所示:

select * from users where id = 1 and 1=1

因为1=1为真,且where语句中 id=1 也为真,所以页面会返回与 id=1 相同的结果。当传入的id参数为 1 and 1=2时,由于1=2不成立,所以返回假,页面就会返回与 id=1 不同的结果。
由此可初步判断SQL注入漏洞的存在。

4.1.2与MySQL注入相关的注入点

MySQL默认在数据库中存放有一个“information_schema”数据库。我们需记住其中的三个表:SCHEMATA、TABLES、COLUMNS
SCHEMATA存储该用户创建的所有数据库的库名,需记住里面记录数据库库名的字段名为:SCHEMA_NAME
TABLES存储用户创建的所有数据库的库名和表名,需记住TABLE_SCHEMATABLE_NAME这两个字段。
COLUMNS存储该用户创建的所有数据库的库名、表名和字段名,须记住TABLE_SCHEMA、TABLE_NAME、COLUMN_NAME

常用的MySQL查询和函数

1.MySQL查询语句

不知道条件
SELECT 想要查询字段名 FROM 数据库名.表名
知道一个条件
SELECT 想要查询字段名 FROM 数据库名.表名 WHERE 已知条件字段名='已知条件的值'
知道两个条件
SELECT 想要查询字段名 FROM 数据库名.表名 WHERE 已知条件字段名='已知条件的值'

2.limit的用法

limit的使用格式是limit m,n,表示选取从m位置开始取n个元素。m0开始。

3.需记住的几个函数

datebase():当前网站使用的数据库
version():当前MySQL版本
user():当前MySQL的用户

4.注释符

MySQL中,常见注释符的表达方式:#或–空格或/**/。

5.内联注释

内联注释的形式:/! code/。内联注释可以用于整个SQL语句中,用来执行我们的SQL语句。
index.php?id=-15/*! UNION*//*! SELECT*/1,2,3

4.1.3Union注入攻击

以DVWASQL注入来演示:
当输入为1时显示如图所示:
Web渗透测试学习笔记_第3张图片
然后输入为1’时,报出如下错误:
Web渗透测试学习笔记_第4张图片
由报错信息可判断出该处参数值为单引号字符型。
然后输入1' and '1'='1,结果显示和输入1时相同:
Web渗透测试学习笔记_第5张图片
再输入1' and '1'='2,结果未正常显示:
Web渗透测试学习笔记_第6张图片
由此可判断此处可能存在注入,尝试判断该表的字段数量:
①输入1’ order by 2#,结果可正常显示

4.2SQL注入进阶

4.3SQL注入绕过

4.4XSS基础

4.5XSS进阶

4.6CSRF

4.7SSRF

4.8文件上传

4.9暴力破解

4.10命令执行

4.11逻辑漏洞挖掘

4.12XXE

4.13WAF

4.13.1WAF介绍

4.13.2WAF判断

4.13.3WAF绕过

第五章 Metasploit

5.1Metasploit简介

5.2Metasploit基础

5.2.1专业术语

5.2.2渗透攻击步骤

5.3主机扫描

5.3.1使用辅助模块进行端口扫描

5.3.2使用辅助模块进行服务扫描

5.3.3使用nmap扫描

5.4漏洞利用

5.5后渗透攻击:信息收集

5.6后渗透攻击:权限提升

5.7后渗透攻击:移植漏洞利用代码模块

5.8后渗透攻击:后门

5.9内网攻击域渗透实例

第六章 Powershell

你可能感兴趣的:(渗透经验积累,web安全工程师成长之路,信息安全)