数据库
一.数据库类型
关系型数据库
非关系性数据库
键值数据库
二.关系数据结构化的特点
- 数据结构化和共享性
库,表,字段
结构化查询语言(SQL) 每一条SQL语句都是在请求DBMS完成动作,SQL语言是数据库能读懂的语言- 数据独立性
- 完整约束性
- 由DBMS统一管理和控制
三.SQL语言中的查询语句与数据库的查询
SQL查询语句
举例说明
注:语句后有一个分号
select(操作动作) *(关键字,就是所有的意思,显示查询的全部信息,如果没有该关键字,只会显示后面关键字的信息) from admin(表名) where(后跟字段名称,eg.username+具体信息,eg.字段值) username=‘admin’ and(逻辑运算符) password ‘123456’ ;(若select无条件子语句(即where后面的语句),则代表是查询整张表)
SQL中的select查询语句模板:
在表中写入SQL指令
== 注:select语句本身就带有双引号==
select * from 表名 where 字段名=’ ’ 运算符 字段名=’ ';注:查找出该表中满足条件项的所有字段名的字段值
select * from 表名; 注:查找出该表的所有字段名以及对应的字段值
select 字段名,字段名 from 表名; 注:查找出该表中的给出字段名以及其所有字段值
select 字段名,字段名 from 表名 where +条件; 注:查找出该表中给出字段名的满足条件项的字段名以及字段值
SQL中的union select语句
在数据库中进行写入SQL指令
select * from persons union select username,password,3,4,5,6 from admin;
|id |LastName |FirstName |Address |City |Year |//这里的字段名为union前面的表的字段名
| 1 | Adams | John | Oxford Street | London | 1970 |
| 2 | Bush | George | Fifth Avenue | New York | 1975 |
| 3 | Carter | Thomas | Changan Street | Beijing | 1980 |
| 4 | Gates | Bill | Xuanwumen 10 | Beijing | 1985 |
| 5 | Carter2 | Thomas | Changan Street | Beijing | 1980 |
| admin | 123456 | 3 | 4 | 5 | 6 |
| test2 | test | 3 | 4 | 5 | 6 |
| root | root | 3 | 4 | 5 | 6 |
8 rows in set
语法用于合并两个或多个select语句的结果集(1-5是persons的结果集,admin-root是)
注解:3,4,5,6用来自动填充表admin的缺少项。
注:UNION内部的select语句必须具有相同数量的列。
- and运算和or运算
and运算的优先级大于or运算
select lastname,firstname,city from persons where lastname='Gates' or lastname='carter' and firstname='Thomas';
|lastname| frirstname | city
| carter | Thomas | Beijing
| Gates | Bill | Beijing
2 rows in set
注:找出or的左右两种情况
or运算(||):只满足具体信息的一项就会查询显示出来
and运算(&&):都满足才显示
数据库的查询
利用APP phpmyadmin
步骤:
此处使用之前,需点切换版本,换成最上面的选项,点其他选项菜单,打开配置文件,点击第一个,ctrl+f,输入magic,将445行的on改为off
选择数据库
写select语句
写union select 语句
但是在phpmyadmin中有个bug,虽然说你可以成功合并查询,但是在点击执行后,仍然会弹出表单类内缺少值,这个语句的概念就是由于union select的要求是合并的两个查询结果集字段数相等,当表中字段名数不相等时,无法执行该指令。
添加数据库
导入数据库
添加数据表
添加字段
查询结果
四.动态页面登录工作流程
- 浏览器=>HTTP请求包=>WEB服务器(转换为SQL指令)=>数据库
- 返回空包或者数据包,登陆失败和登陆成功
五.SQL注入攻击
利用APP 椰树
SQL注入攻击指的是通过构建特殊的输入作为参数传入Web应用程序,改变原有的SQL语句的语义来执行攻击者所要的操作,其主要原 因是程序没有采用必要的措施避免用户输入内容改变原有SQL语句的语义。
下面两个实验是连在一起的
只针对数据库登录程序没有采用必要的措施避免用户输入内容改变原有SQL语句的语义的登录(存在这样的漏洞才能操作)
万能密码(构建特殊输入作为参数传入)
三种经典万能密码
注:输入流中的所有全部放进关键字后的双引号里
- 用户名已知:admin
用户名:admin 密码:‘1’ or ‘1’=‘1’
翻译:select * from admin where username=‘admin’ and password=‘1’ or ‘1’=‘1’; =>1&&1==1=>进入
用户名:admin’or ‘1’=‘1’ 密码:随便输
翻译:select * from admin where username=‘admin’ or ‘1’ =‘1’ and password=‘xxxx’;(由于密码不知道,所以&&右边为0,1&&0=0,0||1=1=>进入)
- 可用注释符号
用户名:‘or 1=1# 密码:随便输
翻译:select * from admin where username=’‘or1=1#’ and password=‘xxx’;
'#'注释符号:其后的所有语句的真假将不影响select语句的真假
- 用户名未知
用户名:1‘or’1’or’1 密码:随便输
翻译:select * from admin where username=‘1’or’1’or’1’ and password=‘xxx’;=>0||1||1&&0==1 => 进入
实验
- 在虚拟机中打开windows 2003
- 找到win2003的IP地址
- 在椰树中,点浏览器,在url框的输入http:// IP地址/dvwa(一个数据库名)/,进入登陆页面。
- 输入万能密码进入数据库网站页面。(发现具有漏洞)
密码解析
- 点击左侧的sql injection
- 然后点击右上角的扫描url
- 然后右键点击下面的红色网址(红色网站都可以),选择sql injection poc(爆破)
- 点击获取信息
- 点击数据库,点击下面的表名,字段名,选中自己需要的选项,再在右下角,点击获取数据,得到password的代码
10. 在网页中搜索CMD5,输入代码,翻译出来密码。