Good in study, attitude and health

  • 渗透技巧——利用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)...

  • 利用BHO实现IE浏览器劫持

    0x00 前言 本文源于一个隐蔽连接的测试,模拟IE浏览器发起网络连接,能绕过某些防护产品拦截发起网络连接的第三方程序 模拟IE浏览器发起网络连接的方法有很多种,其中,利用BHO劫持IE浏览器存在诸多优点(开放接口、简单高效、功能丰富等),所以本文将要介绍BHO的开发和劫持利用思路 0x01 简介 本文将要介绍以下内容: BHO简介 开发BHO 利用思路 实际测试 防御 0x02 BHO简介 BHO,全称Browser Helper Object(浏览器辅助对象) 微软推出的作为浏览器对第三方程序员开放交互接口的业界标准 BHO的作用: 获取浏览器行为,如“后退”、“前进”、“当前页面”等 控制浏览器行为,如修改替换浏览器工具栏,添加自己的程序按钮等 BHO依托于浏览器主窗口, 与浏览器实例生命周期一致,即浏览器页面打开时BHO对象运行,页面关闭时随之结束 使用BHO时需要注册,相当于写入注册表,位于HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Explorer\Browser Helper\ Objects\{GUID}和HKEY_CLASSES_ROOT\CLSID\{GUID} 0x03 开发BHO 本节仅作简要介绍 开发工具: VS2012 1、生成dll 新建-Visual C++-ATL 添加-类-ATL-ATL简单对象,设定简称为HelloWorldBHO,选中IObjectWithSite(IE对象支持) 修改以下文件: HelloWorldBHO.h HelloWorldBHO.cpp dllmain.cpp HelloWorld.rgs 注: 详情可参考http://blog.csdn.net/feier7501/article/details/11266345 helloworld.rgs内保存BHO的GUID,如下图 HelloWorldBHO.rgs内保存BHO的名称,如下图 helloworld.rc内的CompanyName代表发行者,PRODUCTVERSION代表版本,如下图 注: 以上三个图对应下文加载项的显示信息 HelloWorldBHO.cpp保存IE浏览器中不同事件对应的操作,这里仅介绍一段实例代码(详细代码参照开源工程),实现当页面加载完成时,弹框显示当前URL,关键代码如下: void STDMETHODCALLTYPE...

  • Invoke-PSImage利用分析

    0x00 前言 最近在github看见一个有趣的项目:Invoke-PSImage,在png文件的像素内插入powershell代码作为payload(不影响原图片的正常浏览),在命令行下仅通过一行powershell代码就能够执行像素内隐藏的payload 这是一种隐写(Steganography)技术的应用,我在之前的文章对png的隐写技术做了一些介绍,可供参考: 《隐写技巧——PNG文件中的LSB隐写》 《隐写技巧——利用PNG文件格式隐藏Payload》 本文将结合自己的一些心得对Invoke-PSImage进行分析,介绍原理,解决测试中遇到的问题,学习脚本中的编程技巧,提出自己的优化思路 Invoke-PSImage地址: https://github.com/peewpw/Invoke-PSImage 0x01 简介 本文将要介绍以下内容: 脚本分析 隐写原理 实际测试 编程技巧 优化思路 0x02 脚本分析 1、参考说明文件 https://github.com/peewpw/Invoke-PSImage/blob/master/README.md (1) 选取每个像素的两个颜色中的4位用于保存payload (2) 图像质量将受到影响 (3) 输出格式为png 2、参考源代码对上述说明进行分析 (1) 像素使用的为RGB模式,分别选取颜色分量中的G和B的低4位(共8位)保存payload (2) 由于同时替换了G和B的低4位,故图片质量会受影响 补充: LSB隐写是替换RGB三个分量的最低1位,人眼不会注意到前后变化,每个像素可以存储3位的信息 猜测Invoke-PSImage选择每个像素存储8位是为了方便实现(8位=1字节),所以选择牺牲了图片质量 (3) 输出格式为png,需要无损 png图片为无损压缩(bmp图片也是无损压缩),jpg图片为有损压缩。所以在实际测试过程,输入jpg图片,输出png图片,会发现png图片远远大于jpg图片的大小 (4) 需要注意payload长度,每个像素保存一个字节,像素个数需要大于payload的长度 0x03 隐写原理 参照源代码进行举例说明(跳过读取原图片的部分) 1、修改像素的RGB值,替换为payload 代码起始位置: https://github.com/peewpw/Invoke-PSImage/blob/master/Invoke-PSImage.ps1#L110 对for循环做一个简单的修改,假定需要读取0x73,将其写入第一个像素RGB(0x67,0x66,0x65) (1) 读取payload 代码:...

  • 渗透技巧——Windows中Credential Manager的信息获取

    0x00 前言 在后渗透阶段,获得权限后需要搜集目标系统的信息。信息越全面,越有助于进一步的渗透。 对于Windows系统,Credential Manager中包含十分重要的信息。 这其中具体包含什么类型的信息,获取的方法有哪些呢?本文将要一一介绍 0x01 简介 本文将要介绍以下内容: Credential Manager中不同类型的凭据 不同凭据的明文口令获取方法 实际测试 0x02 Credential Manager简介 Credential Manager,中文翻译为凭据管理器,用来存储凭据(例如网站登录和主机远程连接的用户名密码) 如果用户选择存储凭据,那么当用户再次使用对应的操作,系统会自动填入凭据,实现自动登录 凭据保存在特定的位置,被称作为保管库(vault)(位于%localappdata%/Microsoft\Vault) 凭据类别: 包含两种,分别为Domain Credentials和Generic Credentials Domain Credentials: 只有本地Local Security Authority (LSA)能够对其读写 也就是说,普通权限无法读取Domain Credentials类型的明文口令 Generic Credentials: 能够被用户进程读写 也就是说,普通权限可以读取Generic Credentials类型的明文口令 参考资料: https://msdn.microsoft.com/en-us/library/aa380517.aspx 0x03 实际测试 测试1: 测试系统: Win7 访问文件共享\\192.168.62.130 如下图 填入正确的用户名密码,选中记住我的凭据 下次再访问时,就不需要再次输入用户名密码 通过控制面板能够找到添加的凭据,位置为控制面板-用户帐户和家庭安全-凭据管理器 如下图...

  • Process Doppelganging利用介绍

    0x00 前言 在最近的BlackHat Europe 2017,Tal Liberman和Eugene Kogan介绍了一种新的代码注入技术——Process Doppelgänging 据说这种利用方式支持所有Windows系统,能够绕过绝大多数安全产品的检测 于是,本文将要根据开源代码,编写程序,实现Process Doppelgänging,测试功能,分析利用思路 参考地址: https://www.blackhat.com/docs/eu-17/materials/eu-17-Liberman-Lost-In-Transaction-Process-Doppelganging.pdf 0x01 简介 本文将要介绍以下内容: 原理 开源代码 修复方法 实际测试 利用思路 防御检测 0x02 Process Doppelgänging原理 原理上类似于Process Hollowing,但是更加高级: 不需要使用傀儡进程 不需要特殊的内存操作,例如SuspendProcess和NtUnmapViewOfSection 注: 关于Process Hollowing的介绍,可参考之前的文章《傀儡进程的实现与检测》 实现思路: 1.打开一个正常文件,创建transaction 关于NTFS transaction,可参考: http://www.ntfs.com/transaction.htm 2.在这个transaction内填入payload,payload作为进程被启动 目前为止,杀毒软件无法对填入的payload进行扫描 3.回滚transaction 相当于还原transaction,清理痕迹 对应程序实现过程: 1.创建transaction 关键函数: NtCreateTransaction 2.在这个transaction内填入payload 关键函数: CreateFileTransacted NtCreateSection 3.payload作为进程被启动...

  • 域渗透——Pass The Hash的实现

    0x00 前言 在之前的文章《域渗透——Pass The Hash & Pass The Key》曾介绍过kb2871997对Pass The Hash的影响。本文将站在另一个角度,介绍Pass The Hash的相关实现 0x01 简介 本文将要介绍以下内容: Pass The Hash的原理 常用工具 mimikatz中的Pass The Hash mimikatz中的Pass The Ticket 0x02 Pass The Hash的原理 可参考Wikipedia的介绍,地址如下: https://en.wikipedia.org/wiki/Pass_the_hash 提取出关键信息: 在Windows系统中,通常会使用NTLM身份认证 NTLM认证不使用明文口令,而是使用口令加密后的hash值,hash值由系统API生成(例如LsaLogonUser) hash分为LM hash和NT hash,如果密码长度大于15,那么无法生成LM hash。从Windows Vista和Windows Server 2008开始,微软默认禁用LM hash 如果攻击者获得了hash,就能够在身份验证的时候模拟该用户(即跳过调用API生成hash的过程) 注: mimikatz支持导出内存中用户的LM hash,但前提是Windows系统支持LM hash Windows Server...

  • TeamViewer 13.0.5058中的权限漏洞测试

    0x00 前言 12月5日,TeamViewer发布新版本13.0.5640,修复了之前版本13.0.5058中的一个bug。 随后,gellin在github上传了该漏洞的POC,安全信息网站ThreatPost对这个情况作了报道。 但一眼看上去,该漏洞的描述和POC较难理解,于是,本文对其做了进一步测试,验证POC,得出结论 POC: https://github.com/gellin/TeamViewer_Permissions_Hook_V1 ThreatPost报道: https://threatpost.com/teamviewer-rushes-fix-for-permissions-bug/129096/ 0x01 简介 本文将要介绍以下内容: POC测试 原理简要分析 利用思路 防御 0x02 POC测试 1、编译生成dll POC通过c++开发,在使用VS2012对其编译时会出现如下bug: error C2784: “std::_String_iterator std::operator +(_String_iterator::difference_type,std::_String_iterator)”:未能从“std::string”为“std::_String_iterator”推导 模板 参数 bug出现的位置: https://github.com/gellin/TeamViewer_Permissions_Hook_V1/blob/master/TeamViewerHook_13_0_3711_88039/main.cpp#L25 Bug出现的原因是作者使用更高版本的Visual Studio编写,况且这段代码的功能是输出,所以可以忽略,修改后的代码如下: console = new Console(std::string(BANNER), std::string("TeamViewer Permissions Hook v1")); 编译成功,生成TeamViewerHook_13_0_3711_88039.dll 2、测试环境搭建 主机1(Server): 操作系统:Win8 x86 安装TeamViewer 13.0.5058 作为被控制端,ID为543 847 147,密码为49s4eb 主机2(Client):...