4.11网安学习日志(sql注入)上篇

1.了解数据库的简单用法

想要学习sql注入,你就必须得能熟练的使用数据库相关代码,那我们先来复习一下数据库的基本语法吧。

1.1基本查询语法

我们在这里主要是复习一下关于数据库查询有关的命令:

select * from user

这个代码的意思是查询位于表“user”中的所有信息,“*”代表匹配所有;

通过查询,我们可以发现现在位于表“user”中的数据一共有两条,分别属于用户“dachu”和“kunkun”;

select * from user where username="dachu"

这段sql查询就比上面一段更加的细节,在这里我指定了要查询的表名为“user”,同时我指定了查询的列“username”的值为“大厨”,可以发现,结果就出现了属于“dachu”的一条信息。

1.2模糊查询

当然在mysql中也是支持模糊查询的,为了展示区别,我们在数据库中新增几条相似的数据,新增完毕后全部数据如下:

我们先用“%”来进行第一次模糊查询如下图所示:

select * from user where username like "kun%"

注意这次模糊查询代码中“%”号的位置,它位于字段的结尾,形成LIKE “abc%”的形式,代表搜索以字母 “abc”开头的所有字符串(如 abc666,abcplus),所以这次搜索的结果如上图所示;

随后我们改变百分号的位置,使其位于字段前,代码与结果如下图所示:

select * from user where username like "%kun"

这次代码中“%”号的位置,它位于字段的开头,形成LIKE “%abc”的形式,代表搜索以字母 “abc”结尾的所有字符串(如 666abc,nbabc);

那如果我两头都加上“%”呢,我们直接把结果贴出来:

由图我们可知,所有字段中包含“kun”的信息全都被列了出来,所以LIKE  “%abc%” 的格式的意思是搜索在任何位置包含字母 abc 的所有字符串(如 gabce、abcd、pppabc);

当然还存在其他模糊查询的符号和语法,这里就不一一举例说明了。

1.3查询其他数据库

如果我想查询其他数据库中的表,我该怎么操作呢?代码如下所示:

select * from bank.amount

这段代码代表我即将查询位于“bank”数据库中的“amount”表,同理,要查询其他地方的表按照这个格式输入就行。

2.初步认识SQL注入

2.1什么是sql注入?

sql注入是一种常见的网络安全漏洞,它是由于对用户输入的数据没有进行妥善的处理从而形成的漏洞(感觉和文件上传漏洞差不多的概念,都是通过上传一段违法代码脚本来实现攻击),通过成功注入恶意代码,攻击者可以执行未经授权的数据库操作,获取敏感信息、篡改数据甚至完全破坏数据库。

2.2对于简易登录网站的sql注入攻击

如上图是我自己搭建的一个简易登录网站,连接着在上一步建立的数据库。

这个时候,如果我们想对其发动sql注入攻击我们就得思考 ,我们该如何,从哪里开始攻击呢?

我们首先仔细观察这个页面,能操作的地方不多,分别是输入账号和密码和登录的按钮;

我们一个个分析,首先我们排除从按钮进行攻击的可能性,对于现在这种情况来说,一个按钮玩不出什么花样;

然后我们聚焦于输入处,这是一个能够允许用户自由输入的地方,也是我们唯一的突破点,想象一下,如果我们能够通过这个输入出输入恶意代码,能不能执行成功呢?我们直接开始尝试:

第一次我们先选择直接在输入出写上一段查询语句,想要直接获取数据库里的所有数据:

 

可恶,我们被“kunkun out!” 了,显然,这种攻击太过于直白了,第一次攻击失败!

显而易见的是,如果通过普通的数据库语句来攻击是没有效果的,所以我们必须要使用一些特殊的手段。

想要获取数据库“user”表中的数据除了我们上面讲到的一种方法以外其实还有另外一种办法,我将两种办法的代码都贴在下面:

select * from user
select * from user where username ="dachu" and password ='' or '1'='1'

这两种代码的执行都能得到所有的数据,而且很显然第二种方式长得不那么合法, 其实这就是一种sql注入的闭合方式,通过在查询语句中加上“or '1'='1'”来使得后半段判断为真,从而实现绕过;

我们抽象一下这段代码,如下所示:

(A and B) or C

 我们知道,对于“or”判断来说,只要前后有一个为真,那整个语句就为真,这里也是一样“1=1”是绝对为真的,所以执行这段语句的结果就为真,从而能通过登录的验证,实现绕过。

A and B or C

如果是上面这种形式,由于“and”的判断优先级比“or”要高,所以必须A为真且B或C有一个为真才能实现绕过。 

于是我们将“' or '1'='1”写入密码,账号随便输入,结果如下:

 

发现已经成功登录,获取到了想要的数据,攻击结束; 

3.暂时结个尾

今日先写这么多,中篇会写一些更加难以获取信息网站的攻击(ˉ﹃ˉ)。

  • 34
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值