SQLMap进阶使用

预计更新
  1. SQL注入概述
    1.1 SQL注入攻击概述
    1.2 SQL注入漏洞分类
    1.3 SQL注入攻击的危害

  2. SQLMap介绍
    2.1 SQLMap简介
    2.2 SQLMap安装与配置
    2.3 SQLMap基本用法

  3. SQLMap进阶使用
    3.1 SQLMap高级用法
    3.2 SQLMap配置文件详解
    3.3 SQLMap插件的使用

  4. SQL注入漏洞检测
    4.1 SQL注入漏洞检测基础
    4.2 SQL注入漏洞检测工具
    4.3 SQL注入漏洞检测实战

  5. SQL注入漏洞利用
    5.1 SQL注入漏洞利用介绍
    5.2 SQLMap利用SQL注入漏洞
    5.3 SQL注入漏洞利用实战

  6. SQL注入防御
    6.1 SQL注入防御基础
    6.2 防御SQL注入的最佳实践
    6.3 使用SQLMap测试防御效果

  7. SQL注入绕过技术
    7.1 SQL注入绕过技术介绍
    7.2 绕过WAF
    7.3 绕过输入过滤

  8. SQL注入攻击的后果
    8.1 数据泄露
    8.2 数据篡改
    8.3 数据删除

  9. SQL注入漏洞的利用场景
    9.1 SQL注入漏洞的利用场景介绍
    9.2 电商网站SQL注入漏洞利用实战
    9.3 CMS网站SQL注入漏洞利用实战

  10. SQL注入漏洞的漏洞挖掘与利用
    10.1 SQL注入漏洞的漏洞挖掘方法
    10.2 SQL注入漏洞利用的高级技巧
    10.3 SQL注入漏洞利用的未来趋势

SQLMap高级用法

SQL注入是Web应用程序中最常见的漏洞之一,攻击者可以利用这种漏洞访问和操纵数据库中的数据,包括敏感数据。为了利用SQL注入漏洞,渗透测试工程师通常使用工具来自动化注入过程。其中一个最流行的工具是sqlmap,它是一个功能强大的自动化SQL注入工具,可以执行各种高级注入技术。在本文中,我将详细介绍sqlmap的高级用法。

基本用法
在开始讨论sqlmap的高级用法之前,我们先简要介绍一下它的基本用法。sqlmap是一个命令行工具,它可以通过指定目标网站的URL和一些选项来执行SQL注入。下面是一个基本的使用示例:

sqlmap -u “http://example.com/page.php?id=1” --dbs
这个命令会向指定的URL发送一个GET请求,并尝试检测是否存在SQL注入漏洞。如果存在漏洞,sqlmap会列出数据库的名称。这个命令中的选项“–dbs”表示列出所有的数据库名称。

参数化查询
在实际的Web应用程序中,开发人员通常使用参数化查询来防止SQL注入攻击。参数化查询是一种将查询语句中的参数作为单独的变量传递给数据库的技术,从而避免了SQL注入攻击。这种技术可以通过sqlmap的“–dbms”选项进行支持。例如:

sqlmap -u “http://example.com/page.php?id=1” --dbms=mysql --dbs
这个命令指定了目标网站使用的数据库管理系统是MySQL,从而使sqlmap能够使用MySQL特定的注入技术。

自定义HTTP头
有些Web应用程序会检查HTTP头,以确定请求是否来自合法的浏览器。如果sqlmap默认的HTTP头被检测到,那么注入尝试可能会被拒绝或屏蔽。为了避免这种情况,sqlmap允许用户自定义HTTP头。例如:

sqlmap -u “http://example.com/page.php?id=1” --headers=“User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3”
这个命令指定了自定义的User-Agent头,使得sqlmap的请求看起来像是来自Chrome浏览器。

调整注入技术
sqlmap支持多种注入技术,包括基于错误的注入、基于联合的注入、基于时间的盲注等。在一些情况下,某些注入技术可能会被屏蔽或失败,需要尝试其他的技术。sqlmap可以通过“–technique”选项来指定使用的注入技术。例如:

sqlmap -u “http://example.com/page.php?id=1” --technique=U
这个命令指定使用Union-based注入技术。

使用代理
有时候,渗透测试工程师需要通过代理服务器来执行注入攻击。sqlmap支持使用HTTP和SOCKS代理。例如:

sqlmap -u “http://example.com/page.php?id=1” --proxy=http://127.0.0.1:8080 --dbs
这个命令指定了使用HTTP代理服务器,并将所有的请求发送到本地的8080端口。

使用Tor网络
Tor网络是一种匿名通信网络,可以隐藏用户的真实IP地址。渗透测试工程师可以使用Tor网络来匿名执行注入攻击。sqlmap可以通过“–tor”选项来使用Tor网络。例如:

sqlmap -u “http://example.com/page.php?id=1” --tor
这个命令指定使用Tor网络,从而隐藏用户的真实IP地址。

执行命令
sqlmap不仅可以执行SQL注入攻击,还可以执行命令,包括操作系统命令和SQL命令。这个功能可以通过“–os-shell”和“–sql-shell”选项来实现。例如:

sqlmap -u “http://example.com/page.php?id=1” --os-shell
这个命令将打开一个操作系统的Shell,并允许用户执行操作系统命令。

sqlmap -u “http://example.com/page.php?id=1” --sql-shell
这个命令将打开一个SQL Shell,并允许用户执行SQL命令。

自定义Payload
sqlmap使用一些默认的Payload来执行注入攻击,但是这些Payload可能会被目标网站的防御机制屏蔽。为了避免这种情况,渗透测试工程师可以使用自定义的Payload。例如:

sqlmap -u “http://example.com/page.php?id=1” --data=“id=1&name=test” --payload=“1 and 1=0 union select ‘test’”
这个命令指定了自定义的Payload,从而避免了默认的Payload被屏蔽的情况。

自动化扫描
sqlmap可以自动化执行注入攻击,包括检测漏洞、获取数据库信息、获取表信息、获取列信息等。用户可以通过“–level”和“–risk”选项来控制自动化扫描的深度和风险等级。例如:

sqlmap -u “http://example.com/page.php?id=1” --level=5 --risk=3
这个命令将执行深度为5、风险等级为3的自动化扫描。

总结

sqlmap是一个功能强大的自动化SQL注入工具,可以执行各种高级注入技术。在本文中,我们介绍了sqlmap的一些高级用法,包括参数化查询、自定义HTTP头、调整注入技术、使用代理、使用Tor网络、执行命令、自定义Payload和自动化扫描等。通过了解这些高级用法,渗透测试工程师可以更好地利用sqlmap执行SQL注入攻击,并发现Web应用程序中的漏洞。

SQLMap配置文件详解

sqlmap是一款功能强大的自动化SQL注入工具,能够帮助渗透测试工程师快速、准确地发现Web应用程序中的SQL注入漏洞。为了方便使用和快速配置,sqlmap提供了一个配置文件,允许用户自定义sqlmap的各种选项和参数。在本文中,我将从渗透测试工程师的角度详细介绍sqlmap的配置文件,帮助用户更好地理解和使用sqlmap。

配置文件的默认位置
sqlmap的配置文件默认位于用户主目录下的“.sqlmap”目录中,文件名为“sqlmap.conf”。在Linux系统中,可以通过以下命令找到该文件:

ls ~/.sqlmap/sqlmap.conf
在Windows系统中,可以在用户主目录下的“AppData\Roaming\sqlmap”目录中找到该文件。

配置文件的格式
sqlmap的配置文件采用INI格式,包含多个节和键值对。每个节的名称代表了一个选项组,每个键值对表示一个选项和其对应的值。以下是一个典型的sqlmap配置文件的示例:

[main]
flushSession = false

[output]
verbose = true
logFile = /root/sqlmap/output.log

[requests]
headers = {“User-Agent”: “Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3”}

[target]
url = http://example.com/index.php?id=1
配置文件中的选项
以下是sqlmap配置文件中常用的选项及其含义:

3.1 main选项

flushSession: 是否在每次扫描之前清除sqlmap的会话信息,默认为false。如果设置为true,则会在每次扫描之前清除会话信息,包括cookie、HTTP头和其他相关信息。
3.2 output选项

verbose: 是否输出详细信息,默认为false。如果设置为true,则会输出更详细的扫描信息。
logFile: 扫描日志文件的路径,默认为空。如果设置了该选项,则会将扫描信息输出到指定的文件中。
3.3 requests选项

headers: HTTP头信息,默认为空。可以通过该选项设置HTTP头,如User-Agent、Cookie等信息。
3.4 target选项

url: 目标URL,默认为空。必须设置该选项才能进行扫描。
cookie: Cookie信息,默认为空。可以通过该选项设置Cookie信息,如果不设置则使用默认的Cookie信息。
proxy: 代理信息,默认为空。可以通过该选项设置HTTP代理信息,如http://127.0.0.1:8080。如果需要使用socks代理,可以通过设置socks代理环境变量实现,如export http_proxy=socks5://127.0.0.1:1080。
3.5 technique选项

technique: SQL注入技术,默认为“BEUSTQ”。可以通过该选项设置注入技术,包括B:布尔型盲注、E:错误型注入、U:基于联合查询的注入、S:基于堆栈的注入、T:基于时间的盲注、Q:基于双查询的注入、A:自动检测。
3.6 tamper选项

tamper: SQL注入报文的编码方式,默认为空。可以通过该选项设置报文编码方式,如"urlencode、base64、space2comment"等。该选项可以用于绕过WAF或输入过滤等安全机制。
3.7 enumeration选项

users: 获取数据库中的用户列表,默认为false。如果设置为true,则会尝试获取数据库中的用户列表。
passwords: 获取数据库中的密码列表,默认为false。如果设置为true,则会尝试获取数据库中的密码列表。
dbs: 获取数据库中的数据库列表,默认为false。如果设置为true,则会尝试获取数据库中的数据库列表。
tables: 获取数据库中的表列表,默认为false。如果设置为true,则会尝试获取数据库中的表列表。
columns: 获取数据库中的列列表,默认为false。如果设置为true,则会尝试获取数据库中的列列表。
3.8 misc选项

threads: 并发线程数,默认为1。可以通过该选项设置并发线程数,加快扫描速度。
配置文件的使用技巧
sqlmap的配置文件提供了丰富的选项和参数,可以帮助用户更好地控制和定制sqlmap的行为。以下是一些使用技巧:

4.1 备份和恢复配置文件

sqlmap的配置文件中保存了用户的各种选项和参数,非常重要。为了避免配置文件的丢失或损坏,用户可以定期备份配置文件,并将其保存在安全的位置。如果配置文件丢失或损坏,可以通过将备份文件恢复到默认位置的方式来恢复配置文件。

4.2 使用配置文件快速重复扫描

如果需要多次扫描同一个目标,可以在第一次扫描完成后保存扫描选项和参数到配置文件中,并在后续扫描中使用该配置文件。这样可以避免重复输入选项和参数,并加快扫描速度。

4.3 自定义tamper脚本

sqlmap的tamper选项允许用户自定义SQL注入报文的编码方式,可以用于绕过WAF或输入过滤等安全机制。用户可以编写自己的tamper脚本,并将其保存在配置文件中。在后续的扫描中,可以使用自定义的tamper脚本以达到更好的效果。

4.4 使用并发线程加快扫描速度

sqlmap的misc选项中提供了并发线程数的选项,可以通过增加并发线程数来加快扫描速度。在使用并发线程时,需要注意不要设置过高的线程数,以免给目标服务器带来过大的负载。

总结
sqlmap的配置文件提供了丰富的选项和参数,可以帮助用户更好地控制和定制sqlmap的行为。在使用sqlmap时,建议用户仔细阅读配置文件中的各个选项和参数,并根据实际需要进行设置和调整。同时,用户还应该注意备份和恢复配置文件,使用配置文件快速重复扫描,自定义tamper脚本以及使用并发线程加快扫描速度等使用技巧,以提高工作效率和扫描效果。

SQLMap插件的使用

接下来我将从以下几个方面详细介绍 SQLMap 插件的使用:

SQLMap 简介
SQLMap 插件介绍
SQLMap 插件使用实例
SQLMap 插件高级功能介绍

  1. SQLMap 简介
    SQLMap 是一款流行的自动化 SQL 注入工具,可以帮助渗透测试人员快速发现和利用 SQL 注入漏洞。SQLMap 支持多种数据库类型和多种注入技巧,是渗透测试工程师必备的工具之一。

  2. SQLMap 插件介绍
    SQLMap 插件是 SQLMap 的一个扩展功能,可以帮助渗透测试人员更加高效地进行 SQL 注入测试。SQLMap 插件可以与 Burp Suite 集成,从而在 Burp Suite 中使用 SQLMap 的功能,方便测试人员进行测试。

SQLMap 插件支持以下功能:

将请求发送给 SQLMap 进行注入测试
在 Burp Suite 中查看 SQLMap 的测试结果
在 Burp Suite 中使用 SQLMap 的高级功能,如提取数据库信息、执行命令等
3. SQLMap 插件使用实例
下面我将通过一个实例详细介绍 SQLMap 插件的使用。假设我们有一个 Web 应用程序,存在 SQL 注入漏洞,我们希望使用 SQLMap 插件对其进行测试。

首先,我们需要在 Burp Suite 中安装 SQLMap 插件。在 Burp Suite 中选择 Extender -> BApp Store,搜索 SQLMap,点击 Install 安装插件。

安装完成后,在 Burp Suite 中选择 Extender -> Extensions,可以看到已经安装好的 SQLMap 插件。

接下来,在 Burp Suite 中打开目标应用程序,并将其代理设置为 Burp Suite 的代理。然后,在 Burp Suite 的 Proxy -> Intercept 标签页中启用拦截功能。

访问目标应用程序,输入用户名和密码,点击登录按钮。此时,Burp Suite 将拦截到登录请求,我们可以右键点击该请求,选择 Send to SQLMap 进行测试。

SQLMap 插件会自动在后台启动 SQLMap,并将请求发送给 SQLMap 进行注入测试。我们可以在 Burp Suite 的 Output 标签页中查看 SQLMap 的测试结果。

如果 SQLMap 发现了漏洞,我们可以在 Burp Suite 中使用 SQLMap 的高级功能进行测试。例如,我们可以选择 SQLMap -> Extract Database Information,提取数据库的信息。我们也可以选择 SQLMap -> OS Shell,执行命令。

  1. SQLMap 插件高级功能介绍
    上面介绍的是 SQLMap 插件的基本使用方法,下面我将介绍一些 SQLMap 插件的高级功能。

4.1. 配置 SQLMap
在使用 SQLMap 插件之前,我们需要对 SQLMap 进行一些配置。在 Burp Suite 中选择 SQLMap -> Options,可以配置 SQLMap 的选项。

例如,我们可以配置 SQLMap 的数据库类型、目标 URL、代理地址等。我们还可以配置 SQLMap 的其他选项,如 cookie、HTTP 头等。

4.2. 使用 Payloads
在 SQL 注入测试中,我们需要使用一些 Payloads 进行测试。SQLMap 插件内置了一些常用的 Payloads,可以在 SQLMap -> Payloads 中查看。

如果需要自定义 Payloads,可以在 Burp Suite 中使用 Intruder 进行测试,并将测试结果保存为 Payloads。

4.3. 使用 Tamper Scripts
在 SQL 注入测试中,我们还需要使用一些 Tamper Scripts 进行测试。Tamper Scripts 可以帮助我们绕过一些 WAF 或过滤器。

SQLMap 插件内置了一些常用的 Tamper Scripts,可以在 SQLMap -> Tamper Scripts 中查看。

如果需要自定义 Tamper Scripts,可以在 Burp Suite 中使用 Intruder 进行测试,并将测试结果保存为 Tamper Scripts。

4.4. 使用插件 API
SQLMap 插件还提供了插件 API,可以帮助我们编写自定义插件。插件 API 支持多种编程语言,如 Python、Java、Ruby 等。

例如,我们可以使用插件 API 编写一个自定义插件,用于自动化 SQL 注入测试。该插件可以自动扫描目标网站,发现 SQL 注入漏洞,并使用 SQLMap 进行测试。

总结
SQLMap 插件是一款非常实用的工具,可以帮助渗透测试人员更加高效地进行 SQL 注入测试。在使用 SQLMap 插件时,我们需要了解 SQLMap 的基本使用方法,并掌握一些高级功能,如配置 SQLMap、使用 Payloads 和 Tamper Scripts、使用插件 API 等。只有掌握了这些技巧,才能更加高效地进行 SQL 注入测试,发现更多的漏洞。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/212821.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ingress介绍和ingress通过LoadBalancer暴露服务配置

目录 一.ingress基本原理介绍 1.将原有用于暴露服务和负载均衡的服务的三四层负载均衡变为一个七层负载均衡 2.controller和ingress 3.通过下面这个图可能会有更直观的理解 二.为什么会出现ingress 1.NodePort存在缺点 2.LoadBalancer存在缺点 三.ingress三种暴露服务的…

7-6 通讯录排序

输入n个朋友的信息&#xff0c;包括姓名、生日、电话号码&#xff0c;本题要求编写程序&#xff0c;按照年龄从大到小的顺序依次输出通讯录。题目保证所有人的生日均不相同。 输入格式: 输入第一行给出正整数n&#xff08;<10&#xff09;。随后n行&#xff0c;每行按照“…

基于JavaWeb+SSM+Vue微信小程序的科创微应用平台系统的设计和实现

基于JavaWebSSMVue微信小程序的科创微应用平台系统的设计和实现 源码获取入口Lun文目录前言主要技术系统设计功能截图订阅经典源码专栏Java项目精品实战案例《500套》 源码获取 源码获取入口 Lun文目录 1系统概述 1 1.1 研究背景 1 1.2研究目的 1 1.3系统设计思想 1 2相关技术…

Linux Component概述和高通component的使用

1 Linux为什么要引入Component框架&#xff1f; 为了让subsystem按照一定顺序初始化设备才提出来的。 subsystem中由很多设备模块&#xff0c;内核加载这些模块的时间不确定。子系统内有些模块是需要依赖其它模块先初始化才能进行自己初始化工作(例如v4l2 subdev和v4l2 video …

kubebuilder开发operator

安装kubebuilder前 需要有kubernetes环境和golang环境 官网&#xff1a;https://go.kubebuilder.io/ 安装kubebuilder #下载 wget https://go.kubebuilder.io/dl/latest/$(go env GOOS)/$(go env GOARCH) #改名kubebuilder后加权限 chmod x kubebuilder #放到环境变量里 mv k…

【C语言程序设计】编写简单的C程序

目录 前言 一、程序设计 二、程序改错 三、程序完善 总结 &#x1f308;嗨&#xff01;我是Filotimo__&#x1f308;。很高兴与大家相识&#xff0c;希望我的博客能对你有所帮助。 &#x1f4a1;本文由Filotimo__✍️原创&#xff0c;首发于CSDN&#x1f4da;。 &#x1f4e3;如…

unity 2d 入门 飞翔小鸟 死亡 显示GameOver(十四)

1、添加Img create->ui->img 把图片拖进去 2、和分数一样、调整位置 3、修改角色脚本 using System.Collections; using System.Collections.Generic; using UnityEngine;public class Fly : MonoBehaviour {//获取小鸟&#xff08;刚体&#xff09;private Rigidbod…

【Apipost】批量删除我的51CTO文章

文章目录 一、序二、API分析三、Apipost测试四、脚本五、Apipost中完成 一、序 去年开始再51CTO同步更新文章&#xff0c;一年多过去了&#xff0c;只涨了3个粉丝。看了下这个平台就是卖课、搞培训的&#xff0c;退出了。决定把文章也删除了&#xff08;有人私信我说专门注册了…

ToolkenGPT:用大量工具增强LLM

深度学习自然语言处理 原创作者&#xff1a;cola 用外部工具增强大型语言模型(LLM)已经成为解决复杂问题的一种方法。然而&#xff0c;用样例数据对LLM进行微调的传统方法&#xff0c;可能既昂贵又局限于一组预定义的工具。最近的上下文学习范式缓解了这一问题&#xff0c;但有…

Shell 常用命令详解-上

Shell 常用命令详解-上 1.目录查阅相关命令2.文件操作相关命令 1.目录查阅相关命令 ll 命令 命令描述&#xff1a;ll命令用于显示指定工作目录下的内容。 命令格式&#xff1a;ll [参数] [目录名]。 参数说明&#xff1a; 参数说明-a显示所有文件及目录&#xff08;包括隐藏文…

【机器学习】041_模型开发迭代过程

一、模型开发的一般步骤 1. 明确研究问题 确定问题的组成和结果&#xff0c;明晰问题是分类问题还是回归问题 2. 决定系统总体架构 ①理解数据&#xff1a;采集&#xff08;爬取&#xff09;数据&#xff0c;生成&#xff08;导入&#xff09;数据&#xff0c;进行数据清洗…

代码随想录二刷 |二叉树 |101. 对称二叉树

代码随想录二刷 &#xff5c;二叉树 &#xff5c;101. 对称二叉树 题目描述解题思路 & 代码实现递归法迭代法使用队列使用栈 题目描述 101.对称二叉树 给你一个二叉树的根节点 root &#xff0c; 检查它是否轴对称。 示例 1&#xff1a; 输入&#xff1a;root [1,2,2,…

zcms企业官网建站系统源码搭建-支持页面自定义

1.支持mysql&#xff0c;sqlite&#xff0c;access三种数据库。 2.模板和标签与asp版的zzzcms通用。 3.asp版的zzzcms的access数据库可直接使用。 4.支持手机站。 &#xff08;增删改查不做描述&#xff09;&#xff1a; 网站信息 名称&#xff0c;logo&#xff0c;微信&…

基于OpenCV的流水线包装箱检测计数应用(附源码)

导 读 本文主要介绍基于OpenCV的流水线包装箱检测计数应用,并给出源码。 资源下载 完整代码和视频下载地址: https://github.com/freedomwebtech/rpi4-conveyor-belt-boxces-counter 核心代码如下(cboxtest.py): import cv2import numpy as npfrom tracker import*cap=c…

【MYSQL】单表查询

查询语法&#xff1a; select 字段&#xff08;*表示全字段&#xff09; from 数据表 【where 条件表达式】 【group by 分组字段【having 分组条件表达式】】 【order by 排序字段【asc | desc】】 例子&#xff1a; 教职工表Teacher(Tno, TName, age, sal, mgr, DNo)&#…

C# 图解教程 第5版 —— 第17章 转换

文章目录 17.1 什么是转换17.2 隐式转换17.3 显示转换和强制转换17.4 转换的类型17.5 数字的转换17.5.1 隐式数字转换17.5.2 溢出检测上下文17.5.3 显示数字转换 17.6 引用转换17.6.1 隐式引用转换17.6.2 显式引用转换17.6.3 有效显式引用转换 17.7 装箱转换17.7.1 装箱是创建副…

前端发起更改数据请求后再获取后端数据发现数据并未更改的一个解决办法

前端发起更改数据请求后再获取后端数据发现数据并未更改的一个解决办法 问题再现 async function refuseRefund(id,type){if(confirm(确定拒绝&#xff1f;)){await fetch(http://127.0.0.1:3000/api/refuseRefund, {method: POST,headers: {Content-type: application/json}…

vue项目搭建---1.搭建基础的框架

目录 1. pnpm下载1.1 安装1.2 差异1.3 镜像源设置 2. 项目2.1 vite创建项目2.2 项目配置2.3 piniavue-routermain.jsstore/index.jsrouter/index.jsvue文件里使用示例 2.4 eslint prettier.eslintrc.js.eslintignore.prettierrc 2.5 样式2.6 commitizenpackage.json.cz-config…

MySQL - 聚簇索引和非聚簇索引,回表查询,索引覆盖,索引下推,最左匹配原则

聚簇索引和非聚簇索引 聚簇索引和非聚簇索引是 InnoDB 里面的叫法 一张表它一定有聚簇索引&#xff0c;一张表只有一个聚簇索引在物理上也是连续存储的 它产生的过程如下&#xff1a; 表中有无有主键索引&#xff0c;如果有&#xff0c;则使用主键索引作为聚簇索引&#xff1b;…

【Scala】Scala中的一些基本数据类型的特性 列表、元组、构造器、单例对象、伴生类、伴生对象、抽象类与特质

列表 使用List(“”,“”,“”)去声明 sliding 和 groued表示迭代器 val iter List("Hadoop", "Spark", "Scala") sliding 2// sliding 和 groued 是有区别的while (iter.hasNext){println(iter.next())}for (elem <- iter){println(elem)}…