SQL线上练习
Posted Jacob高
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SQL线上练习相关的知识,希望对你有一定的参考价值。
入门视频(点我)
xuesql.cn
,一个适合小白学SQL
的网站,我们会由浅入深的介绍所有有关 SQL
的知识, 每一个章节是一组相关的SQL知识点; 并且会配备一组动手练习任务。
这个网站特别适合学完某种知识就想马上动手的 实践党
. 如果您在学习其他相关的SQL课程或已经在工作中展开了SQL实践,也可以把它作为巩固SQL知识的小工具。
那么什么是 SQL ?(What is SQL?)
SQL
, 全称为Structured Query Language(结构化查询语言)。 要讲SQL就绕不开database(数据库), 平时所说的数据库,一般就是指的 Relational database(关系型数据库)
.
大家知道数据库是用来存储大量数据的一种软件,那么SQL呢是用来操作数据里的数据,具体来说SQL可以做数据查询,数据更新,写入数据等等。
如果把数据库
比作盘子
,那数据
就是盘子里的菜
,SQL
则是你的筷子
。
因为SQL和数据库是天生的一对,又相对简单,目前世界上大部分网站和APP背后的数据都是建立在SQL数据库基础之上。
大家应该或多或少听说过一些数据库比如 SQLite
, mysql
, Postgres
, Oracle
和 Microsoft SQL Server
. 这几个数据库(可以理解为软件)是目前比较流行的一些数据库。所有这些数据库都支持标准的 SQL
,换句话说,你学会了SQL就可以对这些数据库做数据操作了! 当然上面的每一种数据库都有自己的特性和适用范围(想象一下你家有 不同尺寸的盘子
).
关系型数据库(Relational databases)
在学习SQL语法之前有必要解释一下什么是关系型数据库(Relational databases)?数据库由若干张表
(Table)组成,这里说的数据Table很像Excel里的表; 正如Excel里的表格,Table也是由 行(rows)
和列(columns)
组成
一个Table存储一个类别的数据,每一行是一条数据,每一列是这种数据的一个属性; Table就像一个二维的表格,列(columns)
是有限固定的,行(rows)
是无限不固定的
举个例子, 比如我们数据库里有一张表(Table)
. 是用来存储世界上所有的狗,每一行(rows)
是一条狗的信息。那么你会在这个狗Table里存储 哪些狗的属性列(columns)
呢?比如 编号,名字,体重,身高,品种,年龄,毛发颜色?。让我们来看一下这张表,暂且就叫表 Dog吧!
Id | # Name(名字) | # Weight(体重) | # Height (身高) | # Type (品种) | # Age (月龄) | # Color (肤色) |
1 | Mike | 3 | 28 | 吉娃娃 | 10 | 白 |
2 | Sala | 6.5 | 40 | 柴犬 | 15 | 黄 |
3 | 黑狮 | 21.5 | 45 | 藏獒 | 26 | 黑 |
4 | 大圣 | 15 | 42 | 牧羊犬 | 20 | 黄 |
5 | Boy | 5.5 | 24 | 蝴蝶犬 | 6 | 白 |
... | ... | ... | ... | ... | ... | ... |
上面就是一个Dog表的简单展示,像这样一个狗数据库里,除了这张狗(Dog)表,还可能存在其他的表,比如有一张表是存狗品种信息, 另外有一张表是存狗主人信息的 ...
我们学习SQL, 其实最后目的就是在类似这张Dog表数据基础上, 可以通过SQL来回答诸如以下的一类问题: "现在全世界名字叫 \'Mike\'的狗有几条?", 或者 "有多少条狗的毛发是 红色的?", 等等。 通过SQL我们可以方便的去获取,统计这些信息,在接下来的更多章节中你会有更深的体会.
怎么做任务练习?
所有练习都会有表(Table)的数据展示,在表下方有一个可以输入 SQL(SQL语句) 的编辑器,您需要理解右侧的任务列表并写出正确的SQL . 当然,您也可以直接在编辑器里输入 其他的SQL,每次输入SQL都会立即执行,并把结果显示在表数据的位置!
第一次的练习很简单,您只需要按照任务列表里的SQL,在编辑器里抄一遍即可(抄完SQL注意下表格里的数据有何变化)。这个练习主要是希望你通过互动对SQL有一个初步映像. 那让我们赶紧开始玩吧 ..
注意我们练习中的表不是狗表,而是一张存储了电影信息(movies)的表
提示信息 |
SQL为空或数据为空 |
--请输入sql
如何使用基于整数的手动SQL注入技术
今天,我将教大家如何使用基于整型的手动SQL注入技术来对MySQL数据库进行渗透测试。提醒一下,这是一篇写给newbee的文章。话不多说,我们直奔主题!
SQL注入线上实验室
1. 初学者可以使用这个网站来练习自己的SQL注入技术。
2. 访问线上实验室,请跳转【http://testphp.vulnweb.com/artists.php?artist=1】。
第一步:对查询语句动手
testphp.vulnweb.com/artists.php?artist=1
testphp.vulnweb.com/artists.php?artist=1′
此时,我们通过修改查询语句成功接收到了数据库返回的错误消息。但是,我们却没有收到关于输入数据(我们所添加的那个单引号)的错误提示,这也就说明我们的输入已经成功了。现在我们就可以知道,我们所输入的这个字符串(单引号)是不会让数据库返回相关错误信息的,接下来我们尝试修复一下这个问题,去掉单引号:
上图说明,我们在查询语句中采用了基于整型的方法之后就不会在触发错误了,这也就是我们所说的基于整型的SQL注入方法。
第二步:查询数据库条目
确认了漏洞存在之后,我们就可以尝试弄清楚这个数据库表中到底有多少列了,这里我们可以使用order by命令实现。我们可以不断尝试输入任意值的数字来测试数据库中有多少列。
上图中,我输入了数字4,我想要查询4列,但是得到了一条错误提示。所以我得尝试其他数字,试试3呢?
大家可以看到,这里没有返回SQL错误。是的,就是3列!
第三步:查询后台数据库表和表名
接下来,我们需要获取表路径,这里使用union all select:
上图表明,union all select语句返回了表.2和3的表路径:
上图显示了database() & version()命令的执行结果,并拿到了数据库名和版本信息。
大家可以看到,数据库名为acuart,版本信息为5.1.73-0ubuntu0.10.04.1。
第四步:导出数据库表
Groupconcat()函数可以从一个group中获取与非空值级联的字符串,这里我们可以使用这个函数来枚举出数据库中所有的表。除此之外,我们还可以使用InformationSchema来查看关于数据库中对象的元数据:
上图显示的是目标数据库中导出的所有表信息,即:carts,categ,featured,guestbook,pictures,products,users。
第五步:导出数据库表中所有列的数据
接下来,我们导出目标数据库中user表的所有数据:
从上图的结果中可以看到,这个数据库表中包含的列条目有:uname,pass,cc,address,email,name,phone,cart。
第六步:导出所有的用户名和密码
接下来,我们就可以导出目标数据库中所有的用户名及密码了:
这样一来,我们就成功拿到了用户名为test且密码为test的用户信息了。
后话
希望大家可以不断练习,并尝试导出数据库表中包含以下列名的数据:address, email, name, phone, cart。
最后,祝大家Happy Hacking!
*参考来源:gbhackers,FB小编Alpha_h4ck编译,转载请注明来自FreeBuf.COM
以上是关于SQL线上练习的主要内容,如果未能解决你的问题,请参考以下文章
spring练习,在Eclipse搭建的Spring开发环境中,使用set注入方式,实现对象的依赖关系,通过ClassPathXmlApplicationContext实体类获取Bean对象(代码片段
Python练习册 第 0013 题: 用 Python 写一个爬图片的程序,爬 这个链接里的日本妹子图片 :-),(http://tieba.baidu.com/p/2166231880)(代码片段