简要MYSQL注入

目录

    • 介绍
    • mysql注入
    • MYSQL数据库
    • 必要知识点
    • 注入步骤
    • 总结

介绍

SQL注入,一般不是一些低权限的,都会被认为是很严重的漏洞,不是所有的SQL注入都可以对网站后台进行getshell,它是需要条件的,这个条件我们称为权限。

有的注入点,它是没有办法进行getshell的,他只能得到一些敏感信息,然后我们在一步步的去获取权限

SQL注入的危害有两个,一个是危害到数据,一个是危害到网站的权限,满足条件的注入点就可以,没有这个条件的注入点就不行

mysql注入

前期信息收集,未后续思路做铺垫:
操作系统
数据库名
数据库用户(数据库的管理员和网站的管理员又不一样)
数据库版本
其它(网站源代码放在那个盘符下面等)

存在数据数据注入,mysql数据库,低版本暴力查询或结合读取查询;高版本使用information.schema有据查询

存在高权限注入,我们可以进行数据注入、跨库查询、文件读写
利用注入进行跨数据库查询
利用注入进行文件读取或写入(需要提前知道网站的路径)

//如果数据库是高权限用户,那么我们选择的方案就会比较多,如果权限比较低的话,那我们只能使用一种或一两种

任何的漏洞挖掘都会涉及到信息收集,只有收集的好,你才能知道那些能操作,那些不能操作,你如果选择的方案会比较多的话,你肯定会选择最优,效率最高的那一种

当我们知道某个参数存在SQL注入点,这个时候,我们可以使用文件读写这个功能,直接写入后门,俗称为getshell,但是他有一个条件,他得知道网站路径

数据库用户决定我们是不是采用高权限的注入方案,如果说我们可以getshell,我们就不需要进行数据注入 ,就直接进行文件读写,因为我们的目标是获取服务器的权限,进行数据读取只是获取权限的另一种途径

SQL注入的传递过程

接收数据>拼接数据>拼接完数据才会到数据库当中执行>最后再把结果进行展示
在处理得当的时候没有注入点,处理不得当的时候就会有注入点

SQL注入就是把语句注入到SQL当中,通过参数的一个传递,把我们构造的payload拼接到之前就定义好的SQL语句当中去,由于他能够拼接,就能够将恶意的SQL语句拼接到定义好的SQL语句当中去,执行恶意SQL语句的一个执行效果,比如说,查询其他数据库当中的数据,这个时候后台定义好的SQL语句就直接变了,具体的效果就是在SQL语句当中体现了

SQL的注入点应该能够对后台的SQL语句进行重新定义,如果不能就无法被后台所执行

目标网站能够根据参数值,接收我们的数据,通过查询,把我们的数据进行显示。我们只要知道简单的SQL语句就可以了

SQL语句在定义的时候,没有变量的话,就相当于是死的,就不能够进行操作,不进行操作的时候,就不会产生新的SQL语句

当我在测试注入点的时候,输入单引号,他的响应与原包没有任何变化,说明这个点是写死的,后台的SQL语句没有接受我的payload,或者返回404,是因为输入的值,与存储在后台的值不一样,所以返回404的报错页面。这个时候,可以用and 1=1或 and 1=2,进一步判断,如果都返回404页面,那就说明测试点不是变量的输入值,如果返回的页面不一样,很有可能能够定义后台的SQL语句。如果返回的报错页面直接是SQL语句执行的结果,比如执行错误的结果,那恭喜你,百分百是SQL注入点,只是权限的大小

可控变量,对输入的参数值进行变化
带入数据库查询
要么是没有过滤或者是过滤的不严谨,可控变量处之所以会产生注入,是因为没有过滤或者过滤的不严谨,如果这个过滤的比较严谨或者严格,那就相当于没有注入点

MYSQL数据库

数据库A=网站A
表名
列名
数据
数据库B=网站B
。。。。。
数据库c=网站c
。。。。。

必要知识点

在MYSQL5.0以上版本中,mysql存在一个自带数据库名为information_schema,它是一个存储记录有所有数据库名,表名,列名的数据库,也相当于可以通过查询它获取指定数据库下面的表名或列名信息。如果不通过information_schema只能靠猜

数据库中符号”."代表下一级,如shan.user表示shan数据库下的user表名

information_schema.tables: 记录所有表名信息的表
information_schema.columns:记录所有列名信息的表
table_name: 表名
column_name:列名
table_schema:数据库名

注入步骤

判断注入 >>猜解列名数量(字段数)

输入单引号对网站有影响,说明这个地方有注入;如果没有影响那应该没有注入,我说的有影响不是指网站返回404或者跳转到首页,如果出现这两种情况,说明这个网站对你的输入有检测,你被发现了,那当然就不存在SQL注入

当我们判断这个网站存在SQL注入的时候,我们就会进行手工注入,使用union,进行联合注入,用order by进行列名数量的猜解,这是为了更好的进行数据查询;order by 1,网页正常;order by 2网页正常;直到猜解到不正常,例如4正常,5不正常,说明当前注入点所使用的表有4列

这个时候,我们用union进行联合,-1 union select 1,2,3,4。让他报错出数据,然后在报出数据的地方进行联合查询

信息收集:
数据库版本:version() 5.7.22-0ubuntuo.16.04-1
数据库名字:database() mozhe Discuz_stormGroup
数据库用户:user() root@localhont
操作系统统: @@version_compile_os Linux

-1 union select 1,user(),@@version_compile_os,4

5.0以上是高版本,5.0以下是低版本

查询指定数据库mozhe_ Discuz_stormGroup下的表名信息:
http://xxx.xxx.xx.xxx:48354/new_list.php?id=-1 union select
1,table_nams,3,4 from information_schema.tables where table_schemam=‘mozhe_ Discuz_stormGroup’

查询指定数据库mozhe_ Discuz_stormGroup下所有的表名信息:
http://xxx.xxx.xx.xxx:48354/new_list.php?id=-1 union select
1,group_concat(table_name),3,4 from information_schema.tables where table_schemam=‘mozhe_ Discuz_stormGroup’

查询指定表名stormGroup_member下的列名信息:
http://219.153.49.228:48354/new list.php?id=-1 union select 1,group_concat(column_name),3,4 from information_schema.columns where table_ name=‘stoxmGroup_member’

查询指定数据
http://219,153.49.228:48354/new list.php?id=-1 union select 1,name,password,4 from StormGroup_member

猜解多个数据可以采用limit x,1 变动猜解
http://219,153.49.228:48354/new list.php?id=-1 union select 1,name,password,4 from StormGroup_member limit 0,1

总结

现在后台都有过滤,人会累死的,而且这个案例的前提是,他是回显注入
在实战当中,我们要确定用户账号在那个表,然后再去那个表里面查询

这篇文章讲的是mysql注入,其它的数据库注入不是这么回事。在进行数据库注入之前,要先确认数据库的类型,注入是根据数据库类型来的,跟使用什么脚本是没有什么关系的,例如access注入、oracel注入

不同的数据库注入,方法是不一样的,这就是数据库注入非常复杂、非常难的原因,它的分类特别多,你只要那方面不理解,就不能学透

如果不是高权限注入。那我们只能进行数据注入,获取一些数据,如果数据库是低版本,那我们只能进行暴力查询,有时候会出现查询不到的情况

你可能感兴趣的:(小迪安全,sql,数据库,mysql)